Use a single lookup table for insert/copy offsets and extra bits.

Remove safe_malloc.c since all the bounds checking is done inside
decode.c now.
This commit is contained in:
Zoltan Szabadka 2015-08-10 16:39:50 +02:00
parent da11e911a5
commit 4b2fd00e24
9 changed files with 722 additions and 140 deletions

View File

@ -4,7 +4,7 @@ include ../shared.mk
CFLAGS += -Wall
OBJS = bit_reader.o decode.o huffman.o safe_malloc.o state.o streams.o
OBJS = bit_reader.o decode.o huffman.o state.o streams.o
all : $(OBJS)

View File

@ -13,6 +13,7 @@
limitations under the License.
*/
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@ -24,7 +25,6 @@
#include "./transform.h"
#include "./huffman.h"
#include "./prefix.h"
#include "./safe_malloc.h"
#ifdef __ARM_NEON__
#include <arm_neon.h>
@ -222,6 +222,10 @@ static BrotliResult ReadHuffmanCode(int alphabet_size,
1 for simple code;
0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
int simple_code_or_skip;
/* Unnecessary masking, but might be good for safety. */
alphabet_size &= 0x3ff;
/* State machine */
for (;;) {
switch(s->sub1_state) {
@ -278,9 +282,7 @@ static BrotliResult ReadHuffmanCode(int alphabet_size,
static const uint8_t huff_val[16] = {
0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5,
};
s->code_lengths =
(uint8_t*)BrotliSafeMalloc((uint64_t)alphabet_size,
sizeof(*s->code_lengths));
s->code_lengths = (uint8_t*)malloc((size_t)alphabet_size);
if (s->code_lengths == NULL) {
return BROTLI_FAILURE();
}
@ -961,14 +963,16 @@ BrotliResult BrotliDecompressStreaming(BrotliInput input, BrotliOutput output,
}
s->max_backward_distance = (1 << s->window_bits) - 16;
/* Allocate memory for both block_type_trees and block_len_trees. */
s->block_type_trees = (HuffmanCode*)malloc(
3 * BROTLI_HUFFMAN_MAX_TABLE_SIZE * sizeof(HuffmanCode));
s->block_len_trees = (HuffmanCode*)malloc(
3 * BROTLI_HUFFMAN_MAX_TABLE_SIZE * sizeof(HuffmanCode));
if (s->block_type_trees == NULL || s->block_len_trees == NULL) {
6 * BROTLI_HUFFMAN_MAX_TABLE_SIZE * sizeof(HuffmanCode));
if (s->block_type_trees == NULL) {
result = BROTLI_FAILURE();
break;
}
s->block_len_trees = s->block_type_trees +
3 * BROTLI_HUFFMAN_MAX_TABLE_SIZE;
s->state = BROTLI_STATE_METABLOCK_BEGIN;
/* No break, continue to next state */
@ -1235,19 +1239,13 @@ BrotliResult BrotliDecompressStreaming(BrotliInput input, BrotliOutput output,
--s->block_length[1];
{
int cmd_code = ReadSymbol(s->htree_command, br);
int range_idx = cmd_code >> 6;
if (PREDICT_FALSE((range_idx & ~1) == 0)) {
const uint16_t *v = &kCmdLut[cmd_code][0];
if (PREDICT_FALSE((cmd_code & ~0x7f) == 0)) {
s->distance_code = 0;
}
s->insert_code =
kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);
s->copy_code = kCopyRangeLut[range_idx] + (cmd_code & 7);
i = (int)BrotliReadBits(br, v[0]) + v[1];
s->copy_length = (int)BrotliReadBits(br, v[2]) + v[3];
}
i = kInsertLengthPrefixCode[s->insert_code].offset +
(int)BrotliReadBits(br,
kInsertLengthPrefixCode[s->insert_code].nbits);
s->copy_length = kCopyLengthPrefixCode[s->copy_code].offset +
(int)BrotliReadBits(br, kCopyLengthPrefixCode[s->copy_code].nbits);
BROTLI_LOG_UINT(i);
BROTLI_LOG_UINT(s->copy_length);
BROTLI_LOG_UINT(s->distance_code);

View File

@ -20,7 +20,6 @@
#include <string.h>
#include "./huffman.h"
#include "./port.h"
#include "./safe_malloc.h"
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {

View File

@ -37,30 +37,711 @@ static const struct PrefixCodeRange kBlockLengthPrefixCode[] = {
{8433, 13}, {16625, 24}
};
static const struct PrefixCodeRange kInsertLengthPrefixCode[] = {
{ 0, 0}, { 1, 0}, { 2, 0}, { 3, 0},
{ 4, 0}, { 5, 0}, { 6, 1}, { 8, 1},
{ 10, 2}, { 14, 2}, { 18, 3}, { 26, 3},
{ 34, 4}, { 50, 4}, { 66, 5}, { 98, 5},
{ 130, 6}, { 194, 7}, { 322, 8}, { 578, 9},
{1090, 10}, {2114, 12}, {6210, 14}, {22594, 24},
};
static const struct PrefixCodeRange kCopyLengthPrefixCode[] = {
{ 2, 0}, { 3, 0}, { 4, 0}, { 5, 0},
{ 6, 0}, { 7, 0}, { 8, 0}, { 9, 0},
{ 10, 1}, { 12, 1}, { 14, 2}, { 18, 2},
{ 22, 3}, { 30, 3}, { 38, 4}, { 54, 4},
{ 70, 5}, { 102, 5}, { 134, 6}, { 198, 7},
{326, 8}, { 582, 9}, {1094, 10}, {2118, 24},
};
static const uint8_t kInsertRangeLut[11] = {
0, 0, 0, 0, 8, 8, 0, 16, 8, 16, 16,
};
static const uint8_t kCopyRangeLut[11] = {
0, 8, 0, 8, 0, 8, 16, 0, 16, 8, 16,
static const uint16_t kCmdLut[704][4] = {
{ 0x0000, 0x0000, 0x0000, 0x0002 },
{ 0x0000, 0x0000, 0x0000, 0x0003 },
{ 0x0000, 0x0000, 0x0000, 0x0004 },
{ 0x0000, 0x0000, 0x0000, 0x0005 },
{ 0x0000, 0x0000, 0x0000, 0x0006 },
{ 0x0000, 0x0000, 0x0000, 0x0007 },
{ 0x0000, 0x0000, 0x0000, 0x0008 },
{ 0x0000, 0x0000, 0x0000, 0x0009 },
{ 0x0000, 0x0001, 0x0000, 0x0002 },
{ 0x0000, 0x0001, 0x0000, 0x0003 },
{ 0x0000, 0x0001, 0x0000, 0x0004 },
{ 0x0000, 0x0001, 0x0000, 0x0005 },
{ 0x0000, 0x0001, 0x0000, 0x0006 },
{ 0x0000, 0x0001, 0x0000, 0x0007 },
{ 0x0000, 0x0001, 0x0000, 0x0008 },
{ 0x0000, 0x0001, 0x0000, 0x0009 },
{ 0x0000, 0x0002, 0x0000, 0x0002 },
{ 0x0000, 0x0002, 0x0000, 0x0003 },
{ 0x0000, 0x0002, 0x0000, 0x0004 },
{ 0x0000, 0x0002, 0x0000, 0x0005 },
{ 0x0000, 0x0002, 0x0000, 0x0006 },
{ 0x0000, 0x0002, 0x0000, 0x0007 },
{ 0x0000, 0x0002, 0x0000, 0x0008 },
{ 0x0000, 0x0002, 0x0000, 0x0009 },
{ 0x0000, 0x0003, 0x0000, 0x0002 },
{ 0x0000, 0x0003, 0x0000, 0x0003 },
{ 0x0000, 0x0003, 0x0000, 0x0004 },
{ 0x0000, 0x0003, 0x0000, 0x0005 },
{ 0x0000, 0x0003, 0x0000, 0x0006 },
{ 0x0000, 0x0003, 0x0000, 0x0007 },
{ 0x0000, 0x0003, 0x0000, 0x0008 },
{ 0x0000, 0x0003, 0x0000, 0x0009 },
{ 0x0000, 0x0004, 0x0000, 0x0002 },
{ 0x0000, 0x0004, 0x0000, 0x0003 },
{ 0x0000, 0x0004, 0x0000, 0x0004 },
{ 0x0000, 0x0004, 0x0000, 0x0005 },
{ 0x0000, 0x0004, 0x0000, 0x0006 },
{ 0x0000, 0x0004, 0x0000, 0x0007 },
{ 0x0000, 0x0004, 0x0000, 0x0008 },
{ 0x0000, 0x0004, 0x0000, 0x0009 },
{ 0x0000, 0x0005, 0x0000, 0x0002 },
{ 0x0000, 0x0005, 0x0000, 0x0003 },
{ 0x0000, 0x0005, 0x0000, 0x0004 },
{ 0x0000, 0x0005, 0x0000, 0x0005 },
{ 0x0000, 0x0005, 0x0000, 0x0006 },
{ 0x0000, 0x0005, 0x0000, 0x0007 },
{ 0x0000, 0x0005, 0x0000, 0x0008 },
{ 0x0000, 0x0005, 0x0000, 0x0009 },
{ 0x0001, 0x0006, 0x0000, 0x0002 },
{ 0x0001, 0x0006, 0x0000, 0x0003 },
{ 0x0001, 0x0006, 0x0000, 0x0004 },
{ 0x0001, 0x0006, 0x0000, 0x0005 },
{ 0x0001, 0x0006, 0x0000, 0x0006 },
{ 0x0001, 0x0006, 0x0000, 0x0007 },
{ 0x0001, 0x0006, 0x0000, 0x0008 },
{ 0x0001, 0x0006, 0x0000, 0x0009 },
{ 0x0001, 0x0008, 0x0000, 0x0002 },
{ 0x0001, 0x0008, 0x0000, 0x0003 },
{ 0x0001, 0x0008, 0x0000, 0x0004 },
{ 0x0001, 0x0008, 0x0000, 0x0005 },
{ 0x0001, 0x0008, 0x0000, 0x0006 },
{ 0x0001, 0x0008, 0x0000, 0x0007 },
{ 0x0001, 0x0008, 0x0000, 0x0008 },
{ 0x0001, 0x0008, 0x0000, 0x0009 },
{ 0x0000, 0x0000, 0x0001, 0x000a },
{ 0x0000, 0x0000, 0x0001, 0x000c },
{ 0x0000, 0x0000, 0x0002, 0x000e },
{ 0x0000, 0x0000, 0x0002, 0x0012 },
{ 0x0000, 0x0000, 0x0003, 0x0016 },
{ 0x0000, 0x0000, 0x0003, 0x001e },
{ 0x0000, 0x0000, 0x0004, 0x0026 },
{ 0x0000, 0x0000, 0x0004, 0x0036 },
{ 0x0000, 0x0001, 0x0001, 0x000a },
{ 0x0000, 0x0001, 0x0001, 0x000c },
{ 0x0000, 0x0001, 0x0002, 0x000e },
{ 0x0000, 0x0001, 0x0002, 0x0012 },
{ 0x0000, 0x0001, 0x0003, 0x0016 },
{ 0x0000, 0x0001, 0x0003, 0x001e },
{ 0x0000, 0x0001, 0x0004, 0x0026 },
{ 0x0000, 0x0001, 0x0004, 0x0036 },
{ 0x0000, 0x0002, 0x0001, 0x000a },
{ 0x0000, 0x0002, 0x0001, 0x000c },
{ 0x0000, 0x0002, 0x0002, 0x000e },
{ 0x0000, 0x0002, 0x0002, 0x0012 },
{ 0x0000, 0x0002, 0x0003, 0x0016 },
{ 0x0000, 0x0002, 0x0003, 0x001e },
{ 0x0000, 0x0002, 0x0004, 0x0026 },
{ 0x0000, 0x0002, 0x0004, 0x0036 },
{ 0x0000, 0x0003, 0x0001, 0x000a },
{ 0x0000, 0x0003, 0x0001, 0x000c },
{ 0x0000, 0x0003, 0x0002, 0x000e },
{ 0x0000, 0x0003, 0x0002, 0x0012 },
{ 0x0000, 0x0003, 0x0003, 0x0016 },
{ 0x0000, 0x0003, 0x0003, 0x001e },
{ 0x0000, 0x0003, 0x0004, 0x0026 },
{ 0x0000, 0x0003, 0x0004, 0x0036 },
{ 0x0000, 0x0004, 0x0001, 0x000a },
{ 0x0000, 0x0004, 0x0001, 0x000c },
{ 0x0000, 0x0004, 0x0002, 0x000e },
{ 0x0000, 0x0004, 0x0002, 0x0012 },
{ 0x0000, 0x0004, 0x0003, 0x0016 },
{ 0x0000, 0x0004, 0x0003, 0x001e },
{ 0x0000, 0x0004, 0x0004, 0x0026 },
{ 0x0000, 0x0004, 0x0004, 0x0036 },
{ 0x0000, 0x0005, 0x0001, 0x000a },
{ 0x0000, 0x0005, 0x0001, 0x000c },
{ 0x0000, 0x0005, 0x0002, 0x000e },
{ 0x0000, 0x0005, 0x0002, 0x0012 },
{ 0x0000, 0x0005, 0x0003, 0x0016 },
{ 0x0000, 0x0005, 0x0003, 0x001e },
{ 0x0000, 0x0005, 0x0004, 0x0026 },
{ 0x0000, 0x0005, 0x0004, 0x0036 },
{ 0x0001, 0x0006, 0x0001, 0x000a },
{ 0x0001, 0x0006, 0x0001, 0x000c },
{ 0x0001, 0x0006, 0x0002, 0x000e },
{ 0x0001, 0x0006, 0x0002, 0x0012 },
{ 0x0001, 0x0006, 0x0003, 0x0016 },
{ 0x0001, 0x0006, 0x0003, 0x001e },
{ 0x0001, 0x0006, 0x0004, 0x0026 },
{ 0x0001, 0x0006, 0x0004, 0x0036 },
{ 0x0001, 0x0008, 0x0001, 0x000a },
{ 0x0001, 0x0008, 0x0001, 0x000c },
{ 0x0001, 0x0008, 0x0002, 0x000e },
{ 0x0001, 0x0008, 0x0002, 0x0012 },
{ 0x0001, 0x0008, 0x0003, 0x0016 },
{ 0x0001, 0x0008, 0x0003, 0x001e },
{ 0x0001, 0x0008, 0x0004, 0x0026 },
{ 0x0001, 0x0008, 0x0004, 0x0036 },
{ 0x0000, 0x0000, 0x0000, 0x0002 },
{ 0x0000, 0x0000, 0x0000, 0x0003 },
{ 0x0000, 0x0000, 0x0000, 0x0004 },
{ 0x0000, 0x0000, 0x0000, 0x0005 },
{ 0x0000, 0x0000, 0x0000, 0x0006 },
{ 0x0000, 0x0000, 0x0000, 0x0007 },
{ 0x0000, 0x0000, 0x0000, 0x0008 },
{ 0x0000, 0x0000, 0x0000, 0x0009 },
{ 0x0000, 0x0001, 0x0000, 0x0002 },
{ 0x0000, 0x0001, 0x0000, 0x0003 },
{ 0x0000, 0x0001, 0x0000, 0x0004 },
{ 0x0000, 0x0001, 0x0000, 0x0005 },
{ 0x0000, 0x0001, 0x0000, 0x0006 },
{ 0x0000, 0x0001, 0x0000, 0x0007 },
{ 0x0000, 0x0001, 0x0000, 0x0008 },
{ 0x0000, 0x0001, 0x0000, 0x0009 },
{ 0x0000, 0x0002, 0x0000, 0x0002 },
{ 0x0000, 0x0002, 0x0000, 0x0003 },
{ 0x0000, 0x0002, 0x0000, 0x0004 },
{ 0x0000, 0x0002, 0x0000, 0x0005 },
{ 0x0000, 0x0002, 0x0000, 0x0006 },
{ 0x0000, 0x0002, 0x0000, 0x0007 },
{ 0x0000, 0x0002, 0x0000, 0x0008 },
{ 0x0000, 0x0002, 0x0000, 0x0009 },
{ 0x0000, 0x0003, 0x0000, 0x0002 },
{ 0x0000, 0x0003, 0x0000, 0x0003 },
{ 0x0000, 0x0003, 0x0000, 0x0004 },
{ 0x0000, 0x0003, 0x0000, 0x0005 },
{ 0x0000, 0x0003, 0x0000, 0x0006 },
{ 0x0000, 0x0003, 0x0000, 0x0007 },
{ 0x0000, 0x0003, 0x0000, 0x0008 },
{ 0x0000, 0x0003, 0x0000, 0x0009 },
{ 0x0000, 0x0004, 0x0000, 0x0002 },
{ 0x0000, 0x0004, 0x0000, 0x0003 },
{ 0x0000, 0x0004, 0x0000, 0x0004 },
{ 0x0000, 0x0004, 0x0000, 0x0005 },
{ 0x0000, 0x0004, 0x0000, 0x0006 },
{ 0x0000, 0x0004, 0x0000, 0x0007 },
{ 0x0000, 0x0004, 0x0000, 0x0008 },
{ 0x0000, 0x0004, 0x0000, 0x0009 },
{ 0x0000, 0x0005, 0x0000, 0x0002 },
{ 0x0000, 0x0005, 0x0000, 0x0003 },
{ 0x0000, 0x0005, 0x0000, 0x0004 },
{ 0x0000, 0x0005, 0x0000, 0x0005 },
{ 0x0000, 0x0005, 0x0000, 0x0006 },
{ 0x0000, 0x0005, 0x0000, 0x0007 },
{ 0x0000, 0x0005, 0x0000, 0x0008 },
{ 0x0000, 0x0005, 0x0000, 0x0009 },
{ 0x0001, 0x0006, 0x0000, 0x0002 },
{ 0x0001, 0x0006, 0x0000, 0x0003 },
{ 0x0001, 0x0006, 0x0000, 0x0004 },
{ 0x0001, 0x0006, 0x0000, 0x0005 },
{ 0x0001, 0x0006, 0x0000, 0x0006 },
{ 0x0001, 0x0006, 0x0000, 0x0007 },
{ 0x0001, 0x0006, 0x0000, 0x0008 },
{ 0x0001, 0x0006, 0x0000, 0x0009 },
{ 0x0001, 0x0008, 0x0000, 0x0002 },
{ 0x0001, 0x0008, 0x0000, 0x0003 },
{ 0x0001, 0x0008, 0x0000, 0x0004 },
{ 0x0001, 0x0008, 0x0000, 0x0005 },
{ 0x0001, 0x0008, 0x0000, 0x0006 },
{ 0x0001, 0x0008, 0x0000, 0x0007 },
{ 0x0001, 0x0008, 0x0000, 0x0008 },
{ 0x0001, 0x0008, 0x0000, 0x0009 },
{ 0x0000, 0x0000, 0x0001, 0x000a },
{ 0x0000, 0x0000, 0x0001, 0x000c },
{ 0x0000, 0x0000, 0x0002, 0x000e },
{ 0x0000, 0x0000, 0x0002, 0x0012 },
{ 0x0000, 0x0000, 0x0003, 0x0016 },
{ 0x0000, 0x0000, 0x0003, 0x001e },
{ 0x0000, 0x0000, 0x0004, 0x0026 },
{ 0x0000, 0x0000, 0x0004, 0x0036 },
{ 0x0000, 0x0001, 0x0001, 0x000a },
{ 0x0000, 0x0001, 0x0001, 0x000c },
{ 0x0000, 0x0001, 0x0002, 0x000e },
{ 0x0000, 0x0001, 0x0002, 0x0012 },
{ 0x0000, 0x0001, 0x0003, 0x0016 },
{ 0x0000, 0x0001, 0x0003, 0x001e },
{ 0x0000, 0x0001, 0x0004, 0x0026 },
{ 0x0000, 0x0001, 0x0004, 0x0036 },
{ 0x0000, 0x0002, 0x0001, 0x000a },
{ 0x0000, 0x0002, 0x0001, 0x000c },
{ 0x0000, 0x0002, 0x0002, 0x000e },
{ 0x0000, 0x0002, 0x0002, 0x0012 },
{ 0x0000, 0x0002, 0x0003, 0x0016 },
{ 0x0000, 0x0002, 0x0003, 0x001e },
{ 0x0000, 0x0002, 0x0004, 0x0026 },
{ 0x0000, 0x0002, 0x0004, 0x0036 },
{ 0x0000, 0x0003, 0x0001, 0x000a },
{ 0x0000, 0x0003, 0x0001, 0x000c },
{ 0x0000, 0x0003, 0x0002, 0x000e },
{ 0x0000, 0x0003, 0x0002, 0x0012 },
{ 0x0000, 0x0003, 0x0003, 0x0016 },
{ 0x0000, 0x0003, 0x0003, 0x001e },
{ 0x0000, 0x0003, 0x0004, 0x0026 },
{ 0x0000, 0x0003, 0x0004, 0x0036 },
{ 0x0000, 0x0004, 0x0001, 0x000a },
{ 0x0000, 0x0004, 0x0001, 0x000c },
{ 0x0000, 0x0004, 0x0002, 0x000e },
{ 0x0000, 0x0004, 0x0002, 0x0012 },
{ 0x0000, 0x0004, 0x0003, 0x0016 },
{ 0x0000, 0x0004, 0x0003, 0x001e },
{ 0x0000, 0x0004, 0x0004, 0x0026 },
{ 0x0000, 0x0004, 0x0004, 0x0036 },
{ 0x0000, 0x0005, 0x0001, 0x000a },
{ 0x0000, 0x0005, 0x0001, 0x000c },
{ 0x0000, 0x0005, 0x0002, 0x000e },
{ 0x0000, 0x0005, 0x0002, 0x0012 },
{ 0x0000, 0x0005, 0x0003, 0x0016 },
{ 0x0000, 0x0005, 0x0003, 0x001e },
{ 0x0000, 0x0005, 0x0004, 0x0026 },
{ 0x0000, 0x0005, 0x0004, 0x0036 },
{ 0x0001, 0x0006, 0x0001, 0x000a },
{ 0x0001, 0x0006, 0x0001, 0x000c },
{ 0x0001, 0x0006, 0x0002, 0x000e },
{ 0x0001, 0x0006, 0x0002, 0x0012 },
{ 0x0001, 0x0006, 0x0003, 0x0016 },
{ 0x0001, 0x0006, 0x0003, 0x001e },
{ 0x0001, 0x0006, 0x0004, 0x0026 },
{ 0x0001, 0x0006, 0x0004, 0x0036 },
{ 0x0001, 0x0008, 0x0001, 0x000a },
{ 0x0001, 0x0008, 0x0001, 0x000c },
{ 0x0001, 0x0008, 0x0002, 0x000e },
{ 0x0001, 0x0008, 0x0002, 0x0012 },
{ 0x0001, 0x0008, 0x0003, 0x0016 },
{ 0x0001, 0x0008, 0x0003, 0x001e },
{ 0x0001, 0x0008, 0x0004, 0x0026 },
{ 0x0001, 0x0008, 0x0004, 0x0036 },
{ 0x0002, 0x000a, 0x0000, 0x0002 },
{ 0x0002, 0x000a, 0x0000, 0x0003 },
{ 0x0002, 0x000a, 0x0000, 0x0004 },
{ 0x0002, 0x000a, 0x0000, 0x0005 },
{ 0x0002, 0x000a, 0x0000, 0x0006 },
{ 0x0002, 0x000a, 0x0000, 0x0007 },
{ 0x0002, 0x000a, 0x0000, 0x0008 },
{ 0x0002, 0x000a, 0x0000, 0x0009 },
{ 0x0002, 0x000e, 0x0000, 0x0002 },
{ 0x0002, 0x000e, 0x0000, 0x0003 },
{ 0x0002, 0x000e, 0x0000, 0x0004 },
{ 0x0002, 0x000e, 0x0000, 0x0005 },
{ 0x0002, 0x000e, 0x0000, 0x0006 },
{ 0x0002, 0x000e, 0x0000, 0x0007 },
{ 0x0002, 0x000e, 0x0000, 0x0008 },
{ 0x0002, 0x000e, 0x0000, 0x0009 },
{ 0x0003, 0x0012, 0x0000, 0x0002 },
{ 0x0003, 0x0012, 0x0000, 0x0003 },
{ 0x0003, 0x0012, 0x0000, 0x0004 },
{ 0x0003, 0x0012, 0x0000, 0x0005 },
{ 0x0003, 0x0012, 0x0000, 0x0006 },
{ 0x0003, 0x0012, 0x0000, 0x0007 },
{ 0x0003, 0x0012, 0x0000, 0x0008 },
{ 0x0003, 0x0012, 0x0000, 0x0009 },
{ 0x0003, 0x001a, 0x0000, 0x0002 },
{ 0x0003, 0x001a, 0x0000, 0x0003 },
{ 0x0003, 0x001a, 0x0000, 0x0004 },
{ 0x0003, 0x001a, 0x0000, 0x0005 },
{ 0x0003, 0x001a, 0x0000, 0x0006 },
{ 0x0003, 0x001a, 0x0000, 0x0007 },
{ 0x0003, 0x001a, 0x0000, 0x0008 },
{ 0x0003, 0x001a, 0x0000, 0x0009 },
{ 0x0004, 0x0022, 0x0000, 0x0002 },
{ 0x0004, 0x0022, 0x0000, 0x0003 },
{ 0x0004, 0x0022, 0x0000, 0x0004 },
{ 0x0004, 0x0022, 0x0000, 0x0005 },
{ 0x0004, 0x0022, 0x0000, 0x0006 },
{ 0x0004, 0x0022, 0x0000, 0x0007 },
{ 0x0004, 0x0022, 0x0000, 0x0008 },
{ 0x0004, 0x0022, 0x0000, 0x0009 },
{ 0x0004, 0x0032, 0x0000, 0x0002 },
{ 0x0004, 0x0032, 0x0000, 0x0003 },
{ 0x0004, 0x0032, 0x0000, 0x0004 },
{ 0x0004, 0x0032, 0x0000, 0x0005 },
{ 0x0004, 0x0032, 0x0000, 0x0006 },
{ 0x0004, 0x0032, 0x0000, 0x0007 },
{ 0x0004, 0x0032, 0x0000, 0x0008 },
{ 0x0004, 0x0032, 0x0000, 0x0009 },
{ 0x0005, 0x0042, 0x0000, 0x0002 },
{ 0x0005, 0x0042, 0x0000, 0x0003 },
{ 0x0005, 0x0042, 0x0000, 0x0004 },
{ 0x0005, 0x0042, 0x0000, 0x0005 },
{ 0x0005, 0x0042, 0x0000, 0x0006 },
{ 0x0005, 0x0042, 0x0000, 0x0007 },
{ 0x0005, 0x0042, 0x0000, 0x0008 },
{ 0x0005, 0x0042, 0x0000, 0x0009 },
{ 0x0005, 0x0062, 0x0000, 0x0002 },
{ 0x0005, 0x0062, 0x0000, 0x0003 },
{ 0x0005, 0x0062, 0x0000, 0x0004 },
{ 0x0005, 0x0062, 0x0000, 0x0005 },
{ 0x0005, 0x0062, 0x0000, 0x0006 },
{ 0x0005, 0x0062, 0x0000, 0x0007 },
{ 0x0005, 0x0062, 0x0000, 0x0008 },
{ 0x0005, 0x0062, 0x0000, 0x0009 },
{ 0x0002, 0x000a, 0x0001, 0x000a },
{ 0x0002, 0x000a, 0x0001, 0x000c },
{ 0x0002, 0x000a, 0x0002, 0x000e },
{ 0x0002, 0x000a, 0x0002, 0x0012 },
{ 0x0002, 0x000a, 0x0003, 0x0016 },
{ 0x0002, 0x000a, 0x0003, 0x001e },
{ 0x0002, 0x000a, 0x0004, 0x0026 },
{ 0x0002, 0x000a, 0x0004, 0x0036 },
{ 0x0002, 0x000e, 0x0001, 0x000a },
{ 0x0002, 0x000e, 0x0001, 0x000c },
{ 0x0002, 0x000e, 0x0002, 0x000e },
{ 0x0002, 0x000e, 0x0002, 0x0012 },
{ 0x0002, 0x000e, 0x0003, 0x0016 },
{ 0x0002, 0x000e, 0x0003, 0x001e },
{ 0x0002, 0x000e, 0x0004, 0x0026 },
{ 0x0002, 0x000e, 0x0004, 0x0036 },
{ 0x0003, 0x0012, 0x0001, 0x000a },
{ 0x0003, 0x0012, 0x0001, 0x000c },
{ 0x0003, 0x0012, 0x0002, 0x000e },
{ 0x0003, 0x0012, 0x0002, 0x0012 },
{ 0x0003, 0x0012, 0x0003, 0x0016 },
{ 0x0003, 0x0012, 0x0003, 0x001e },
{ 0x0003, 0x0012, 0x0004, 0x0026 },
{ 0x0003, 0x0012, 0x0004, 0x0036 },
{ 0x0003, 0x001a, 0x0001, 0x000a },
{ 0x0003, 0x001a, 0x0001, 0x000c },
{ 0x0003, 0x001a, 0x0002, 0x000e },
{ 0x0003, 0x001a, 0x0002, 0x0012 },
{ 0x0003, 0x001a, 0x0003, 0x0016 },
{ 0x0003, 0x001a, 0x0003, 0x001e },
{ 0x0003, 0x001a, 0x0004, 0x0026 },
{ 0x0003, 0x001a, 0x0004, 0x0036 },
{ 0x0004, 0x0022, 0x0001, 0x000a },
{ 0x0004, 0x0022, 0x0001, 0x000c },
{ 0x0004, 0x0022, 0x0002, 0x000e },
{ 0x0004, 0x0022, 0x0002, 0x0012 },
{ 0x0004, 0x0022, 0x0003, 0x0016 },
{ 0x0004, 0x0022, 0x0003, 0x001e },
{ 0x0004, 0x0022, 0x0004, 0x0026 },
{ 0x0004, 0x0022, 0x0004, 0x0036 },
{ 0x0004, 0x0032, 0x0001, 0x000a },
{ 0x0004, 0x0032, 0x0001, 0x000c },
{ 0x0004, 0x0032, 0x0002, 0x000e },
{ 0x0004, 0x0032, 0x0002, 0x0012 },
{ 0x0004, 0x0032, 0x0003, 0x0016 },
{ 0x0004, 0x0032, 0x0003, 0x001e },
{ 0x0004, 0x0032, 0x0004, 0x0026 },
{ 0x0004, 0x0032, 0x0004, 0x0036 },
{ 0x0005, 0x0042, 0x0001, 0x000a },
{ 0x0005, 0x0042, 0x0001, 0x000c },
{ 0x0005, 0x0042, 0x0002, 0x000e },
{ 0x0005, 0x0042, 0x0002, 0x0012 },
{ 0x0005, 0x0042, 0x0003, 0x0016 },
{ 0x0005, 0x0042, 0x0003, 0x001e },
{ 0x0005, 0x0042, 0x0004, 0x0026 },
{ 0x0005, 0x0042, 0x0004, 0x0036 },
{ 0x0005, 0x0062, 0x0001, 0x000a },
{ 0x0005, 0x0062, 0x0001, 0x000c },
{ 0x0005, 0x0062, 0x0002, 0x000e },
{ 0x0005, 0x0062, 0x0002, 0x0012 },
{ 0x0005, 0x0062, 0x0003, 0x0016 },
{ 0x0005, 0x0062, 0x0003, 0x001e },
{ 0x0005, 0x0062, 0x0004, 0x0026 },
{ 0x0005, 0x0062, 0x0004, 0x0036 },
{ 0x0000, 0x0000, 0x0005, 0x0046 },
{ 0x0000, 0x0000, 0x0005, 0x0066 },
{ 0x0000, 0x0000, 0x0006, 0x0086 },
{ 0x0000, 0x0000, 0x0007, 0x00c6 },
{ 0x0000, 0x0000, 0x0008, 0x0146 },
{ 0x0000, 0x0000, 0x0009, 0x0246 },
{ 0x0000, 0x0000, 0x000a, 0x0446 },
{ 0x0000, 0x0000, 0x0018, 0x0846 },
{ 0x0000, 0x0001, 0x0005, 0x0046 },
{ 0x0000, 0x0001, 0x0005, 0x0066 },
{ 0x0000, 0x0001, 0x0006, 0x0086 },
{ 0x0000, 0x0001, 0x0007, 0x00c6 },
{ 0x0000, 0x0001, 0x0008, 0x0146 },
{ 0x0000, 0x0001, 0x0009, 0x0246 },
{ 0x0000, 0x0001, 0x000a, 0x0446 },
{ 0x0000, 0x0001, 0x0018, 0x0846 },
{ 0x0000, 0x0002, 0x0005, 0x0046 },
{ 0x0000, 0x0002, 0x0005, 0x0066 },
{ 0x0000, 0x0002, 0x0006, 0x0086 },
{ 0x0000, 0x0002, 0x0007, 0x00c6 },
{ 0x0000, 0x0002, 0x0008, 0x0146 },
{ 0x0000, 0x0002, 0x0009, 0x0246 },
{ 0x0000, 0x0002, 0x000a, 0x0446 },
{ 0x0000, 0x0002, 0x0018, 0x0846 },
{ 0x0000, 0x0003, 0x0005, 0x0046 },
{ 0x0000, 0x0003, 0x0005, 0x0066 },
{ 0x0000, 0x0003, 0x0006, 0x0086 },
{ 0x0000, 0x0003, 0x0007, 0x00c6 },
{ 0x0000, 0x0003, 0x0008, 0x0146 },
{ 0x0000, 0x0003, 0x0009, 0x0246 },
{ 0x0000, 0x0003, 0x000a, 0x0446 },
{ 0x0000, 0x0003, 0x0018, 0x0846 },
{ 0x0000, 0x0004, 0x0005, 0x0046 },
{ 0x0000, 0x0004, 0x0005, 0x0066 },
{ 0x0000, 0x0004, 0x0006, 0x0086 },
{ 0x0000, 0x0004, 0x0007, 0x00c6 },
{ 0x0000, 0x0004, 0x0008, 0x0146 },
{ 0x0000, 0x0004, 0x0009, 0x0246 },
{ 0x0000, 0x0004, 0x000a, 0x0446 },
{ 0x0000, 0x0004, 0x0018, 0x0846 },
{ 0x0000, 0x0005, 0x0005, 0x0046 },
{ 0x0000, 0x0005, 0x0005, 0x0066 },
{ 0x0000, 0x0005, 0x0006, 0x0086 },
{ 0x0000, 0x0005, 0x0007, 0x00c6 },
{ 0x0000, 0x0005, 0x0008, 0x0146 },
{ 0x0000, 0x0005, 0x0009, 0x0246 },
{ 0x0000, 0x0005, 0x000a, 0x0446 },
{ 0x0000, 0x0005, 0x0018, 0x0846 },
{ 0x0001, 0x0006, 0x0005, 0x0046 },
{ 0x0001, 0x0006, 0x0005, 0x0066 },
{ 0x0001, 0x0006, 0x0006, 0x0086 },
{ 0x0001, 0x0006, 0x0007, 0x00c6 },
{ 0x0001, 0x0006, 0x0008, 0x0146 },
{ 0x0001, 0x0006, 0x0009, 0x0246 },
{ 0x0001, 0x0006, 0x000a, 0x0446 },
{ 0x0001, 0x0006, 0x0018, 0x0846 },
{ 0x0001, 0x0008, 0x0005, 0x0046 },
{ 0x0001, 0x0008, 0x0005, 0x0066 },
{ 0x0001, 0x0008, 0x0006, 0x0086 },
{ 0x0001, 0x0008, 0x0007, 0x00c6 },
{ 0x0001, 0x0008, 0x0008, 0x0146 },
{ 0x0001, 0x0008, 0x0009, 0x0246 },
{ 0x0001, 0x0008, 0x000a, 0x0446 },
{ 0x0001, 0x0008, 0x0018, 0x0846 },
{ 0x0006, 0x0082, 0x0000, 0x0002 },
{ 0x0006, 0x0082, 0x0000, 0x0003 },
{ 0x0006, 0x0082, 0x0000, 0x0004 },
{ 0x0006, 0x0082, 0x0000, 0x0005 },
{ 0x0006, 0x0082, 0x0000, 0x0006 },
{ 0x0006, 0x0082, 0x0000, 0x0007 },
{ 0x0006, 0x0082, 0x0000, 0x0008 },
{ 0x0006, 0x0082, 0x0000, 0x0009 },
{ 0x0007, 0x00c2, 0x0000, 0x0002 },
{ 0x0007, 0x00c2, 0x0000, 0x0003 },
{ 0x0007, 0x00c2, 0x0000, 0x0004 },
{ 0x0007, 0x00c2, 0x0000, 0x0005 },
{ 0x0007, 0x00c2, 0x0000, 0x0006 },
{ 0x0007, 0x00c2, 0x0000, 0x0007 },
{ 0x0007, 0x00c2, 0x0000, 0x0008 },
{ 0x0007, 0x00c2, 0x0000, 0x0009 },
{ 0x0008, 0x0142, 0x0000, 0x0002 },
{ 0x0008, 0x0142, 0x0000, 0x0003 },
{ 0x0008, 0x0142, 0x0000, 0x0004 },
{ 0x0008, 0x0142, 0x0000, 0x0005 },
{ 0x0008, 0x0142, 0x0000, 0x0006 },
{ 0x0008, 0x0142, 0x0000, 0x0007 },
{ 0x0008, 0x0142, 0x0000, 0x0008 },
{ 0x0008, 0x0142, 0x0000, 0x0009 },
{ 0x0009, 0x0242, 0x0000, 0x0002 },
{ 0x0009, 0x0242, 0x0000, 0x0003 },
{ 0x0009, 0x0242, 0x0000, 0x0004 },
{ 0x0009, 0x0242, 0x0000, 0x0005 },
{ 0x0009, 0x0242, 0x0000, 0x0006 },
{ 0x0009, 0x0242, 0x0000, 0x0007 },
{ 0x0009, 0x0242, 0x0000, 0x0008 },
{ 0x0009, 0x0242, 0x0000, 0x0009 },
{ 0x000a, 0x0442, 0x0000, 0x0002 },
{ 0x000a, 0x0442, 0x0000, 0x0003 },
{ 0x000a, 0x0442, 0x0000, 0x0004 },
{ 0x000a, 0x0442, 0x0000, 0x0005 },
{ 0x000a, 0x0442, 0x0000, 0x0006 },
{ 0x000a, 0x0442, 0x0000, 0x0007 },
{ 0x000a, 0x0442, 0x0000, 0x0008 },
{ 0x000a, 0x0442, 0x0000, 0x0009 },
{ 0x000c, 0x0842, 0x0000, 0x0002 },
{ 0x000c, 0x0842, 0x0000, 0x0003 },
{ 0x000c, 0x0842, 0x0000, 0x0004 },
{ 0x000c, 0x0842, 0x0000, 0x0005 },
{ 0x000c, 0x0842, 0x0000, 0x0006 },
{ 0x000c, 0x0842, 0x0000, 0x0007 },
{ 0x000c, 0x0842, 0x0000, 0x0008 },
{ 0x000c, 0x0842, 0x0000, 0x0009 },
{ 0x000e, 0x1842, 0x0000, 0x0002 },
{ 0x000e, 0x1842, 0x0000, 0x0003 },
{ 0x000e, 0x1842, 0x0000, 0x0004 },
{ 0x000e, 0x1842, 0x0000, 0x0005 },
{ 0x000e, 0x1842, 0x0000, 0x0006 },
{ 0x000e, 0x1842, 0x0000, 0x0007 },
{ 0x000e, 0x1842, 0x0000, 0x0008 },
{ 0x000e, 0x1842, 0x0000, 0x0009 },
{ 0x0018, 0x5842, 0x0000, 0x0002 },
{ 0x0018, 0x5842, 0x0000, 0x0003 },
{ 0x0018, 0x5842, 0x0000, 0x0004 },
{ 0x0018, 0x5842, 0x0000, 0x0005 },
{ 0x0018, 0x5842, 0x0000, 0x0006 },
{ 0x0018, 0x5842, 0x0000, 0x0007 },
{ 0x0018, 0x5842, 0x0000, 0x0008 },
{ 0x0018, 0x5842, 0x0000, 0x0009 },
{ 0x0002, 0x000a, 0x0005, 0x0046 },
{ 0x0002, 0x000a, 0x0005, 0x0066 },
{ 0x0002, 0x000a, 0x0006, 0x0086 },
{ 0x0002, 0x000a, 0x0007, 0x00c6 },
{ 0x0002, 0x000a, 0x0008, 0x0146 },
{ 0x0002, 0x000a, 0x0009, 0x0246 },
{ 0x0002, 0x000a, 0x000a, 0x0446 },
{ 0x0002, 0x000a, 0x0018, 0x0846 },
{ 0x0002, 0x000e, 0x0005, 0x0046 },
{ 0x0002, 0x000e, 0x0005, 0x0066 },
{ 0x0002, 0x000e, 0x0006, 0x0086 },
{ 0x0002, 0x000e, 0x0007, 0x00c6 },
{ 0x0002, 0x000e, 0x0008, 0x0146 },
{ 0x0002, 0x000e, 0x0009, 0x0246 },
{ 0x0002, 0x000e, 0x000a, 0x0446 },
{ 0x0002, 0x000e, 0x0018, 0x0846 },
{ 0x0003, 0x0012, 0x0005, 0x0046 },
{ 0x0003, 0x0012, 0x0005, 0x0066 },
{ 0x0003, 0x0012, 0x0006, 0x0086 },
{ 0x0003, 0x0012, 0x0007, 0x00c6 },
{ 0x0003, 0x0012, 0x0008, 0x0146 },
{ 0x0003, 0x0012, 0x0009, 0x0246 },
{ 0x0003, 0x0012, 0x000a, 0x0446 },
{ 0x0003, 0x0012, 0x0018, 0x0846 },
{ 0x0003, 0x001a, 0x0005, 0x0046 },
{ 0x0003, 0x001a, 0x0005, 0x0066 },
{ 0x0003, 0x001a, 0x0006, 0x0086 },
{ 0x0003, 0x001a, 0x0007, 0x00c6 },
{ 0x0003, 0x001a, 0x0008, 0x0146 },
{ 0x0003, 0x001a, 0x0009, 0x0246 },
{ 0x0003, 0x001a, 0x000a, 0x0446 },
{ 0x0003, 0x001a, 0x0018, 0x0846 },
{ 0x0004, 0x0022, 0x0005, 0x0046 },
{ 0x0004, 0x0022, 0x0005, 0x0066 },
{ 0x0004, 0x0022, 0x0006, 0x0086 },
{ 0x0004, 0x0022, 0x0007, 0x00c6 },
{ 0x0004, 0x0022, 0x0008, 0x0146 },
{ 0x0004, 0x0022, 0x0009, 0x0246 },
{ 0x0004, 0x0022, 0x000a, 0x0446 },
{ 0x0004, 0x0022, 0x0018, 0x0846 },
{ 0x0004, 0x0032, 0x0005, 0x0046 },
{ 0x0004, 0x0032, 0x0005, 0x0066 },
{ 0x0004, 0x0032, 0x0006, 0x0086 },
{ 0x0004, 0x0032, 0x0007, 0x00c6 },
{ 0x0004, 0x0032, 0x0008, 0x0146 },
{ 0x0004, 0x0032, 0x0009, 0x0246 },
{ 0x0004, 0x0032, 0x000a, 0x0446 },
{ 0x0004, 0x0032, 0x0018, 0x0846 },
{ 0x0005, 0x0042, 0x0005, 0x0046 },
{ 0x0005, 0x0042, 0x0005, 0x0066 },
{ 0x0005, 0x0042, 0x0006, 0x0086 },
{ 0x0005, 0x0042, 0x0007, 0x00c6 },
{ 0x0005, 0x0042, 0x0008, 0x0146 },
{ 0x0005, 0x0042, 0x0009, 0x0246 },
{ 0x0005, 0x0042, 0x000a, 0x0446 },
{ 0x0005, 0x0042, 0x0018, 0x0846 },
{ 0x0005, 0x0062, 0x0005, 0x0046 },
{ 0x0005, 0x0062, 0x0005, 0x0066 },
{ 0x0005, 0x0062, 0x0006, 0x0086 },
{ 0x0005, 0x0062, 0x0007, 0x00c6 },
{ 0x0005, 0x0062, 0x0008, 0x0146 },
{ 0x0005, 0x0062, 0x0009, 0x0246 },
{ 0x0005, 0x0062, 0x000a, 0x0446 },
{ 0x0005, 0x0062, 0x0018, 0x0846 },
{ 0x0006, 0x0082, 0x0001, 0x000a },
{ 0x0006, 0x0082, 0x0001, 0x000c },
{ 0x0006, 0x0082, 0x0002, 0x000e },
{ 0x0006, 0x0082, 0x0002, 0x0012 },
{ 0x0006, 0x0082, 0x0003, 0x0016 },
{ 0x0006, 0x0082, 0x0003, 0x001e },
{ 0x0006, 0x0082, 0x0004, 0x0026 },
{ 0x0006, 0x0082, 0x0004, 0x0036 },
{ 0x0007, 0x00c2, 0x0001, 0x000a },
{ 0x0007, 0x00c2, 0x0001, 0x000c },
{ 0x0007, 0x00c2, 0x0002, 0x000e },
{ 0x0007, 0x00c2, 0x0002, 0x0012 },
{ 0x0007, 0x00c2, 0x0003, 0x0016 },
{ 0x0007, 0x00c2, 0x0003, 0x001e },
{ 0x0007, 0x00c2, 0x0004, 0x0026 },
{ 0x0007, 0x00c2, 0x0004, 0x0036 },
{ 0x0008, 0x0142, 0x0001, 0x000a },
{ 0x0008, 0x0142, 0x0001, 0x000c },
{ 0x0008, 0x0142, 0x0002, 0x000e },
{ 0x0008, 0x0142, 0x0002, 0x0012 },
{ 0x0008, 0x0142, 0x0003, 0x0016 },
{ 0x0008, 0x0142, 0x0003, 0x001e },
{ 0x0008, 0x0142, 0x0004, 0x0026 },
{ 0x0008, 0x0142, 0x0004, 0x0036 },
{ 0x0009, 0x0242, 0x0001, 0x000a },
{ 0x0009, 0x0242, 0x0001, 0x000c },
{ 0x0009, 0x0242, 0x0002, 0x000e },
{ 0x0009, 0x0242, 0x0002, 0x0012 },
{ 0x0009, 0x0242, 0x0003, 0x0016 },
{ 0x0009, 0x0242, 0x0003, 0x001e },
{ 0x0009, 0x0242, 0x0004, 0x0026 },
{ 0x0009, 0x0242, 0x0004, 0x0036 },
{ 0x000a, 0x0442, 0x0001, 0x000a },
{ 0x000a, 0x0442, 0x0001, 0x000c },
{ 0x000a, 0x0442, 0x0002, 0x000e },
{ 0x000a, 0x0442, 0x0002, 0x0012 },
{ 0x000a, 0x0442, 0x0003, 0x0016 },
{ 0x000a, 0x0442, 0x0003, 0x001e },
{ 0x000a, 0x0442, 0x0004, 0x0026 },
{ 0x000a, 0x0442, 0x0004, 0x0036 },
{ 0x000c, 0x0842, 0x0001, 0x000a },
{ 0x000c, 0x0842, 0x0001, 0x000c },
{ 0x000c, 0x0842, 0x0002, 0x000e },
{ 0x000c, 0x0842, 0x0002, 0x0012 },
{ 0x000c, 0x0842, 0x0003, 0x0016 },
{ 0x000c, 0x0842, 0x0003, 0x001e },
{ 0x000c, 0x0842, 0x0004, 0x0026 },
{ 0x000c, 0x0842, 0x0004, 0x0036 },
{ 0x000e, 0x1842, 0x0001, 0x000a },
{ 0x000e, 0x1842, 0x0001, 0x000c },
{ 0x000e, 0x1842, 0x0002, 0x000e },
{ 0x000e, 0x1842, 0x0002, 0x0012 },
{ 0x000e, 0x1842, 0x0003, 0x0016 },
{ 0x000e, 0x1842, 0x0003, 0x001e },
{ 0x000e, 0x1842, 0x0004, 0x0026 },
{ 0x000e, 0x1842, 0x0004, 0x0036 },
{ 0x0018, 0x5842, 0x0001, 0x000a },
{ 0x0018, 0x5842, 0x0001, 0x000c },
{ 0x0018, 0x5842, 0x0002, 0x000e },
{ 0x0018, 0x5842, 0x0002, 0x0012 },
{ 0x0018, 0x5842, 0x0003, 0x0016 },
{ 0x0018, 0x5842, 0x0003, 0x001e },
{ 0x0018, 0x5842, 0x0004, 0x0026 },
{ 0x0018, 0x5842, 0x0004, 0x0036 },
{ 0x0006, 0x0082, 0x0005, 0x0046 },
{ 0x0006, 0x0082, 0x0005, 0x0066 },
{ 0x0006, 0x0082, 0x0006, 0x0086 },
{ 0x0006, 0x0082, 0x0007, 0x00c6 },
{ 0x0006, 0x0082, 0x0008, 0x0146 },
{ 0x0006, 0x0082, 0x0009, 0x0246 },
{ 0x0006, 0x0082, 0x000a, 0x0446 },
{ 0x0006, 0x0082, 0x0018, 0x0846 },
{ 0x0007, 0x00c2, 0x0005, 0x0046 },
{ 0x0007, 0x00c2, 0x0005, 0x0066 },
{ 0x0007, 0x00c2, 0x0006, 0x0086 },
{ 0x0007, 0x00c2, 0x0007, 0x00c6 },
{ 0x0007, 0x00c2, 0x0008, 0x0146 },
{ 0x0007, 0x00c2, 0x0009, 0x0246 },
{ 0x0007, 0x00c2, 0x000a, 0x0446 },
{ 0x0007, 0x00c2, 0x0018, 0x0846 },
{ 0x0008, 0x0142, 0x0005, 0x0046 },
{ 0x0008, 0x0142, 0x0005, 0x0066 },
{ 0x0008, 0x0142, 0x0006, 0x0086 },
{ 0x0008, 0x0142, 0x0007, 0x00c6 },
{ 0x0008, 0x0142, 0x0008, 0x0146 },
{ 0x0008, 0x0142, 0x0009, 0x0246 },
{ 0x0008, 0x0142, 0x000a, 0x0446 },
{ 0x0008, 0x0142, 0x0018, 0x0846 },
{ 0x0009, 0x0242, 0x0005, 0x0046 },
{ 0x0009, 0x0242, 0x0005, 0x0066 },
{ 0x0009, 0x0242, 0x0006, 0x0086 },
{ 0x0009, 0x0242, 0x0007, 0x00c6 },
{ 0x0009, 0x0242, 0x0008, 0x0146 },
{ 0x0009, 0x0242, 0x0009, 0x0246 },
{ 0x0009, 0x0242, 0x000a, 0x0446 },
{ 0x0009, 0x0242, 0x0018, 0x0846 },
{ 0x000a, 0x0442, 0x0005, 0x0046 },
{ 0x000a, 0x0442, 0x0005, 0x0066 },
{ 0x000a, 0x0442, 0x0006, 0x0086 },
{ 0x000a, 0x0442, 0x0007, 0x00c6 },
{ 0x000a, 0x0442, 0x0008, 0x0146 },
{ 0x000a, 0x0442, 0x0009, 0x0246 },
{ 0x000a, 0x0442, 0x000a, 0x0446 },
{ 0x000a, 0x0442, 0x0018, 0x0846 },
{ 0x000c, 0x0842, 0x0005, 0x0046 },
{ 0x000c, 0x0842, 0x0005, 0x0066 },
{ 0x000c, 0x0842, 0x0006, 0x0086 },
{ 0x000c, 0x0842, 0x0007, 0x00c6 },
{ 0x000c, 0x0842, 0x0008, 0x0146 },
{ 0x000c, 0x0842, 0x0009, 0x0246 },
{ 0x000c, 0x0842, 0x000a, 0x0446 },
{ 0x000c, 0x0842, 0x0018, 0x0846 },
{ 0x000e, 0x1842, 0x0005, 0x0046 },
{ 0x000e, 0x1842, 0x0005, 0x0066 },
{ 0x000e, 0x1842, 0x0006, 0x0086 },
{ 0x000e, 0x1842, 0x0007, 0x00c6 },
{ 0x000e, 0x1842, 0x0008, 0x0146 },
{ 0x000e, 0x1842, 0x0009, 0x0246 },
{ 0x000e, 0x1842, 0x000a, 0x0446 },
{ 0x000e, 0x1842, 0x0018, 0x0846 },
{ 0x0018, 0x5842, 0x0005, 0x0046 },
{ 0x0018, 0x5842, 0x0005, 0x0066 },
{ 0x0018, 0x5842, 0x0006, 0x0086 },
{ 0x0018, 0x5842, 0x0007, 0x00c6 },
{ 0x0018, 0x5842, 0x0008, 0x0146 },
{ 0x0018, 0x5842, 0x0009, 0x0246 },
{ 0x0018, 0x5842, 0x000a, 0x0446 },
{ 0x0018, 0x5842, 0x0018, 0x0846 },
};
#endif /* BROTLI_DEC_PREFIX_H_ */

View File

@ -1,46 +0,0 @@
/* Copyright 2013 Google Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/* Size-checked memory allocation. */
#include <stdlib.h>
#include "./port.h"
#include "./safe_malloc.h"
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
/* Returns 0 in case of overflow of nmemb * size. */
static int CheckSizeArgumentsOverflow(uint64_t nmemb, size_t size) {
const uint64_t total_size = nmemb * size;
if (nmemb == 0) return 1;
if ((nmemb | size) >> 31) {
return 0;
}
if (((size * nmemb) >> BROTLI_MAX_ALLOCABLE_MEMORY_BITS) != 0) return 0;
if (total_size != (size_t)total_size) return 0;
return 1;
}
void* BrotliSafeMalloc(uint64_t nmemb, size_t size) {
if (!CheckSizeArgumentsOverflow(nmemb, size)) return NULL;
BROTLI_DCHECK(nmemb * size > 0);
return malloc((size_t)(nmemb * size));
}
#if defined(__cplusplus) || defined(c_plusplus)
} /* extern "C" */
#endif

View File

@ -1,43 +0,0 @@
/* Copyright 2013 Google Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/* Size-checked memory allocation. */
#ifndef BROTLI_DEC_SAFE_MALLOC_H_
#define BROTLI_DEC_SAFE_MALLOC_H_
#include "./types.h"
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
/* This is the maximum memory amount that we will ever try to allocate. */
#define BROTLI_MAX_ALLOCABLE_MEMORY_BITS 30
/* size-checking safe malloc/calloc: verify that the requested size is not too
large, or return NULL. You don't need to call these for constructs like
malloc(sizeof(foo)), but only if there's font-dependent size involved
somewhere (like: malloc(decoded_size * sizeof(*something))). That's why this
safe malloc() borrows the signature from calloc(), pointing at the dangerous
underlying multiply involved.
*/
void* BrotliSafeMalloc(uint64_t nmemb, size_t size);
#if defined(__cplusplus) || defined(c_plusplus)
} /* extern "C" */
#endif
#endif /* BROTLI_DEC_SAFE_MALLOC_H_ */

View File

@ -148,9 +148,6 @@ void BrotliStateCleanup(BrotliState* s) {
if (s->block_type_trees != 0) {
free(s->block_type_trees);
}
if (s->block_len_trees != 0) {
free(s->block_len_trees);
}
}
#if defined(__cplusplus) || defined(c_plusplus)

View File

@ -131,8 +131,6 @@ typedef struct {
const uint8_t* context_lookup2;
HuffmanCode* htree_command;
int insert_code;
int copy_code;
int copy_length;
int distance_code;
int distance;

View File

@ -107,7 +107,6 @@ brotli = Extension("brotli",
"dec/bit_reader.c",
"dec/decode.c",
"dec/huffman.c",
"dec/safe_malloc.c",
"dec/streams.c",
"dec/state.c",
],
@ -144,7 +143,6 @@ brotli = Extension("brotli",
"dec/huffman.h",
"dec/prefix.h",
"dec/port.h",
"dec/safe_malloc.h",
"dec/streams.h",
"dec/transform.h",
"dec/types.h",