]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #1687 in SNORT/snort3 from ~MIREDDEN/snort3:huffman_rebased to...
authorMike Stepanek (mstepane) <mstepane@cisco.com>
Fri, 26 Jul 2019 20:14:27 +0000 (16:14 -0400)
committerMike Stepanek (mstepane) <mstepane@cisco.com>
Fri, 26 Jul 2019 20:14:27 +0000 (16:14 -0400)
Squashed commit of the following:

commit 4a07fd650fbe3cbd5f67c93af793653270704e79
Author: mdagon <mdagon@cisco.com>
Date:   Wed Jul 10 08:51:33 2019 -0400

    http2: huffman string decode

    lookup table, first level only

src/service_inspectors/http2_inspect/CMakeLists.txt
src/service_inspectors/http2_inspect/http2_enum.h
src/service_inspectors/http2_inspect/http2_hpack_string_decode.cc
src/service_inspectors/http2_inspect/http2_hpack_string_decode.h
src/service_inspectors/http2_inspect/http2_huffman_state_machine.cc [new file with mode: 0644]
src/service_inspectors/http2_inspect/http2_huffman_state_machine.h [new file with mode: 0644]
src/service_inspectors/http2_inspect/test/CMakeLists.txt
src/service_inspectors/http2_inspect/test/http2_hpack_string_decode_test.cc

index b9406e6342bb1f7e4b9100a1e7edce6f1b6f4c47..4c54912d78992c824f9e3bc0e9017395c663d639 100644 (file)
@@ -8,7 +8,9 @@ set (FILE_LIST
     http2_hpack_int_decode.cc
     http2_hpack_int_decode.h
     http2_hpack_string_decode.cc
-    http2_hpack_string_decode.h    
+    http2_hpack_string_decode.h
+    http2_huffman_state_machine.cc
+    http2_huffman_state_machine.h
     http2_inspect.cc
     http2_inspect_impl.cc
     http2_inspect.h
index 63a2557325a9b7ab5cf58efff2982bd3fbee03f0..3ce94d8ed6e5d57df983f574885a3c34bb966ef8 100644 (file)
@@ -66,6 +66,9 @@ enum Infraction
     INF_STRING_EMPTY_BUFF = 4,
     INF_STRING_MISSING_BYTES = 5,
     INF_OUT_BUFF_OUT_OF_SPACE = 6,
+    INF_HUFFMAN_BAD_PADDING = 7,
+    INF_HUFFMAN_DECODED_EOS = 8,
+    INF_HUFFMAN_INCOMPLETE_CODE_PADDING = 9,
     INF__MAX_VALUE
 };    
  
index 2c24afc6c7b50bebb20801046f197fbae4d16fd5..5d9ea2ded1cc5c3fd9ed85e73a7609a37bcb1cdb 100644 (file)
 #include "http2_hpack_string_decode.h"
 
 #include "http2_enum.h"
+#include "http2_huffman_state_machine.h"
+
+#include <math.h>
 
 using namespace Http2Enums;
 
 static const uint8_t HUFFMAN_FLAG = 0x80;
 
+// Minimum bit length for each lookup table
+static const uint8_t min_decode_len[HUFFMAN_LOOKUP_MAX + 1] =
+    {5, 2, 2, 3, 5, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4};
+
 Http2HpackStringDecode::Http2HpackStringDecode(Http2EventGen* events,
     Http2Infractions* infractions) : decode7(new Http2HpackIntDecode(7, events, infractions)),
     events(events), infractions(infractions)
@@ -93,6 +100,145 @@ bool Http2HpackStringDecode::get_string(const uint8_t* in_buff, const uint32_t e
     return true;
 }
 
-bool Http2HpackStringDecode::get_huffman_string(const uint8_t*, const uint32_t, uint32_t&,
-    uint8_t*, const uint32_t, uint32_t&) { return false; }
+// return is tail/padding
+bool Http2HpackStringDecode::get_next_byte(const uint8_t* in_buff, const uint32_t last_byte,
+    uint32_t& bytes_consumed, uint8_t& cur_bit, uint8_t match_len, uint8_t& byte,
+    bool& another_search)
+{
+    another_search = true;
+    cur_bit += match_len;
+
+    if (cur_bit >= 8) // done with current bit
+    {
+        bytes_consumed++;
+        cur_bit -= 8;
+    }
+
+    bool tail = false;
+    uint8_t msb, lsb = 0xff;
+    if (bytes_consumed == last_byte)
+    {
+        // bytes consumed must be bigger than 1 - int length is at least 1
+        msb = in_buff[bytes_consumed-1];
+        another_search = false;
+        tail = true;
+    }
+    else if ((bytes_consumed + 1) == last_byte)
+    {
+        if (cur_bit != 0)
+        {
+            msb = in_buff[bytes_consumed++];
+            tail = true;
+        }
+        else
+        {
+            byte = in_buff[bytes_consumed];
+            return false;
+        }
+    }
+    else
+    {
+        msb = in_buff[bytes_consumed];
+        lsb = in_buff[bytes_consumed+1];
+    }
+
+    const uint16_t tmp = (uint16_t)(msb << 8) | lsb;
+    byte = (tmp & (0xff00 >> cur_bit)) >> (8 - cur_bit);
+    return tail;
+}
+
+bool Http2HpackStringDecode::get_huffman_string(const uint8_t* in_buff, const uint32_t encoded_len,
+    uint32_t& bytes_consumed, uint8_t* out_buff, const uint32_t out_len, uint32_t& bytes_written)
+{
+    const uint32_t last_encoded_byte = bytes_consumed + encoded_len;
+    uint8_t byte;
+    uint8_t cur_bit = 0;
+    HuffmanEntry result = { 0, 0, HUFFMAN_LOOKUP_1 };
+    bool another_search = false;
+    HuffmanState state = HUFFMAN_LOOKUP_1;
+
+    // Check length
+    const uint32_t max_length = floor(encoded_len * 8.0/5.0);
+    if (max_length > out_len)
+    {
+        *infractions += INF_OUT_BUFF_OUT_OF_SPACE;
+        events->create_event(EVENT_STRING_DECODE_FAILURE);
+        return false;
+    }
+
+    while (!get_next_byte(in_buff, last_encoded_byte, bytes_consumed, cur_bit, result.len, byte,
+        another_search))
+    {
+        result = huffman_decode[state][byte];
+
+        switch (result.state) {
+
+        case HUFFMAN_MATCH:
+            out_buff[bytes_written++] = result.symbol;
+            state = HUFFMAN_LOOKUP_1;
+            break;
+
+        case HUFFMAN_LOOKUP_2:
+        case HUFFMAN_LOOKUP_3:
+        case HUFFMAN_LOOKUP_4:
+        case HUFFMAN_LOOKUP_5:
+        case HUFFMAN_LOOKUP_6:
+        case HUFFMAN_LOOKUP_7:
+        case HUFFMAN_LOOKUP_8:
+        case HUFFMAN_LOOKUP_9:
+        case HUFFMAN_LOOKUP_10:
+        case HUFFMAN_LOOKUP_11:
+        case HUFFMAN_LOOKUP_12:
+        case HUFFMAN_LOOKUP_13:
+        case HUFFMAN_LOOKUP_14:
+        case HUFFMAN_LOOKUP_15:
+            state = result.state;
+            break;
+
+        case HUFFMAN_FAILURE:
+            *infractions += INF_HUFFMAN_DECODED_EOS;
+            events->create_event(EVENT_STRING_DECODE_FAILURE);
+            return false;
+            break;
+
+        default:
+            break;         
+        }
+    }
+
+    // Tail needs 1 last lookup in case the leftover is big enough for a match.
+    // Make sure match length <= available length
+    uint8_t leftover_len = 8 - cur_bit;
+    uint8_t old_result = result.len;
+    if (another_search && (leftover_len >= min_decode_len[state]))
+    {
+        result = huffman_decode[state][byte];
+        if ((result.state == HUFFMAN_MATCH) && (result.len <= leftover_len))
+        {
+            out_buff[bytes_written++] = result.symbol;
+            byte = (byte << result.len) | (((uint16_t)1 << result.len) - 1);
+        }
+        else
+            result.len = old_result;
+    }
+
+    // Padding check
+    if (result.len < 8)
+    {
+        if (byte != 0xff)
+        {
+            *infractions += INF_HUFFMAN_BAD_PADDING;
+            events->create_event(EVENT_STRING_DECODE_FAILURE);
+            return false;
+        }
+    }
+    else if (result.state != HUFFMAN_MATCH)
+    {
+        *infractions += INF_HUFFMAN_INCOMPLETE_CODE_PADDING;
+        events->create_event(EVENT_STRING_DECODE_FAILURE);
+        return false;
+    }
+
+    return true;
+}
 
index 172d768310aa61712e1a62d8695de688ed2ba940..464bf6ba6b5171c60afc1664864aa5d95672d1e4 100644 (file)
@@ -40,7 +40,9 @@ private:
         uint8_t* out_buff, const uint32_t out_len, uint32_t& bytes_written);
     bool get_huffman_string(const uint8_t* in_buff, const uint32_t encoded_len,
         uint32_t& bytes_consumed, uint8_t* out_buff, const uint32_t out_len, uint32_t& bytes_written);
-
+    bool get_next_byte(const uint8_t* in_buff, const uint32_t last_byte,
+                      uint32_t& bytes_consumed, uint8_t& cur_bit, uint8_t match_len, uint8_t& byte, bool& another_search);
+  
     Http2HpackIntDecode* const decode7;
     Http2EventGen* const events;
     Http2Infractions* const infractions;
diff --git a/src/service_inspectors/http2_inspect/http2_huffman_state_machine.cc b/src/service_inspectors/http2_inspect/http2_huffman_state_machine.cc
new file mode 100644 (file)
index 0000000..36a74db
--- /dev/null
@@ -0,0 +1,1851 @@
+//--------------------------------------------------------------------------
+// Copyright (C) 2019-2019 Cisco and/or its affiliates. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License Version 2 as published
+// by the Free Software Foundation.  You may not use, modify or distribute
+// this program under any other version of the GNU General Public License.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+//--------------------------------------------------------------------------
+// http2_huffman_state_machine.cc author Maya Dagon <mdagon@cisco.com>
+
+#include "http2_huffman_state_machine.h"
+
+const HuffmanEntry huffman_decode[HUFFMAN_LOOKUP_MAX+1] [UINT8_MAX+1] =
+{
+    { // HUFFMAN_LOOKUP_1
+        {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH},
+        {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH},
+        {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH},
+        {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH},
+        {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH},
+        {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH},
+        {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH},
+        {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH},
+        {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH},
+        {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH},
+        {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH},
+        {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH},
+        {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH},
+        {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH},
+        {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH},
+        {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH},
+        {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH},
+        {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH},
+        {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH},
+        {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH},
+        {6, ' ', HUFFMAN_MATCH}, {6, ' ', HUFFMAN_MATCH}, {6, ' ', HUFFMAN_MATCH}, {6, ' ', HUFFMAN_MATCH},
+        {6, '%', HUFFMAN_MATCH}, {6, '%', HUFFMAN_MATCH}, {6, '%', HUFFMAN_MATCH}, {6, '%', HUFFMAN_MATCH},
+        {6, '-', HUFFMAN_MATCH}, {6, '-', HUFFMAN_MATCH}, {6, '-', HUFFMAN_MATCH}, {6, '-', HUFFMAN_MATCH},
+        {6, '.', HUFFMAN_MATCH}, {6, '.', HUFFMAN_MATCH}, {6, '.', HUFFMAN_MATCH}, {6, '.', HUFFMAN_MATCH},
+        {6, '/', HUFFMAN_MATCH}, {6, '/', HUFFMAN_MATCH}, {6, '/', HUFFMAN_MATCH}, {6, '/', HUFFMAN_MATCH},
+        {6, '3', HUFFMAN_MATCH}, {6, '3', HUFFMAN_MATCH}, {6, '3', HUFFMAN_MATCH}, {6, '3', HUFFMAN_MATCH},
+        {6, '4', HUFFMAN_MATCH}, {6, '4', HUFFMAN_MATCH}, {6, '4', HUFFMAN_MATCH}, {6, '4', HUFFMAN_MATCH},
+        {6, '5', HUFFMAN_MATCH}, {6, '5', HUFFMAN_MATCH}, {6, '5', HUFFMAN_MATCH}, {6, '5', HUFFMAN_MATCH},
+        {6, '6', HUFFMAN_MATCH}, {6, '6', HUFFMAN_MATCH}, {6, '6', HUFFMAN_MATCH}, {6, '6', HUFFMAN_MATCH},
+        {6, '7', HUFFMAN_MATCH}, {6, '7', HUFFMAN_MATCH}, {6, '7', HUFFMAN_MATCH}, {6, '7', HUFFMAN_MATCH},
+        {6, '8', HUFFMAN_MATCH}, {6, '8', HUFFMAN_MATCH}, {6, '8', HUFFMAN_MATCH}, {6, '8', HUFFMAN_MATCH},
+        {6, '9', HUFFMAN_MATCH}, {6, '9', HUFFMAN_MATCH}, {6, '9', HUFFMAN_MATCH}, {6, '9', HUFFMAN_MATCH},
+        {6, '=', HUFFMAN_MATCH}, {6, '=', HUFFMAN_MATCH}, {6, '=', HUFFMAN_MATCH}, {6, '=', HUFFMAN_MATCH},
+        {6, 'A', HUFFMAN_MATCH}, {6, 'A', HUFFMAN_MATCH}, {6, 'A', HUFFMAN_MATCH}, {6, 'A', HUFFMAN_MATCH},
+        {6, '_', HUFFMAN_MATCH}, {6, '_', HUFFMAN_MATCH}, {6, '_', HUFFMAN_MATCH}, {6, '_', HUFFMAN_MATCH},
+        {6, 'b', HUFFMAN_MATCH}, {6, 'b', HUFFMAN_MATCH}, {6, 'b', HUFFMAN_MATCH}, {6, 'b', HUFFMAN_MATCH},
+        {6, 'd', HUFFMAN_MATCH}, {6, 'd', HUFFMAN_MATCH}, {6, 'd', HUFFMAN_MATCH}, {6, 'd', HUFFMAN_MATCH},
+        {6, 'f', HUFFMAN_MATCH}, {6, 'f', HUFFMAN_MATCH}, {6, 'f', HUFFMAN_MATCH}, {6, 'f', HUFFMAN_MATCH},
+        {6, 'g', HUFFMAN_MATCH}, {6, 'g', HUFFMAN_MATCH}, {6, 'g', HUFFMAN_MATCH}, {6, 'g', HUFFMAN_MATCH},
+        {6, 'h', HUFFMAN_MATCH}, {6, 'h', HUFFMAN_MATCH}, {6, 'h', HUFFMAN_MATCH}, {6, 'h', HUFFMAN_MATCH},
+        {6, 'l', HUFFMAN_MATCH}, {6, 'l', HUFFMAN_MATCH}, {6, 'l', HUFFMAN_MATCH}, {6, 'l', HUFFMAN_MATCH},
+        {6, 'm', HUFFMAN_MATCH}, {6, 'm', HUFFMAN_MATCH}, {6, 'm', HUFFMAN_MATCH}, {6, 'm', HUFFMAN_MATCH},
+        {6, 'n', HUFFMAN_MATCH}, {6, 'n', HUFFMAN_MATCH}, {6, 'n', HUFFMAN_MATCH}, {6, 'n', HUFFMAN_MATCH},
+        {6, 'p', HUFFMAN_MATCH}, {6, 'p', HUFFMAN_MATCH}, {6, 'p', HUFFMAN_MATCH}, {6, 'p', HUFFMAN_MATCH},
+        {6, 'r', HUFFMAN_MATCH}, {6, 'r', HUFFMAN_MATCH}, {6, 'r', HUFFMAN_MATCH}, {6, 'r', HUFFMAN_MATCH},
+        {6, 'u', HUFFMAN_MATCH}, {6, 'u', HUFFMAN_MATCH}, {6, 'u', HUFFMAN_MATCH}, {6, 'u', HUFFMAN_MATCH},
+        {7, ':', HUFFMAN_MATCH}, {7, ':', HUFFMAN_MATCH}, {7, 'B', HUFFMAN_MATCH}, {7, 'B', HUFFMAN_MATCH},
+        {7, 'C', HUFFMAN_MATCH}, {7, 'C', HUFFMAN_MATCH}, {7, 'D', HUFFMAN_MATCH}, {7, 'D', HUFFMAN_MATCH},
+        {7, 'E', HUFFMAN_MATCH}, {7, 'E', HUFFMAN_MATCH}, {7, 'F', HUFFMAN_MATCH}, {7, 'F', HUFFMAN_MATCH},
+        {7, 'G', HUFFMAN_MATCH}, {7, 'G', HUFFMAN_MATCH}, {7, 'H', HUFFMAN_MATCH}, {7, 'H', HUFFMAN_MATCH},
+        {7, 'I', HUFFMAN_MATCH}, {7, 'I', HUFFMAN_MATCH}, {7, 'J', HUFFMAN_MATCH}, {7, 'J', HUFFMAN_MATCH},
+        {7, 'K', HUFFMAN_MATCH}, {7, 'K', HUFFMAN_MATCH}, {7, 'L', HUFFMAN_MATCH}, {7, 'L', HUFFMAN_MATCH},
+        {7, 'M', HUFFMAN_MATCH}, {7, 'M', HUFFMAN_MATCH}, {7, 'N', HUFFMAN_MATCH}, {7, 'N', HUFFMAN_MATCH},
+        {7, 'O', HUFFMAN_MATCH}, {7, 'O', HUFFMAN_MATCH}, {7, 'P', HUFFMAN_MATCH}, {7, 'P', HUFFMAN_MATCH},
+        {7, 'Q', HUFFMAN_MATCH}, {7, 'Q', HUFFMAN_MATCH}, {7, 'R', HUFFMAN_MATCH}, {7, 'R', HUFFMAN_MATCH},
+        {7, 'S', HUFFMAN_MATCH}, {7, 'S', HUFFMAN_MATCH}, {7, 'T', HUFFMAN_MATCH}, {7, 'T', HUFFMAN_MATCH},
+        {7, 'U', HUFFMAN_MATCH}, {7, 'U', HUFFMAN_MATCH}, {7, 'V', HUFFMAN_MATCH}, {7, 'V', HUFFMAN_MATCH},
+        {7, 'W', HUFFMAN_MATCH}, {7, 'W', HUFFMAN_MATCH}, {7, 'Y', HUFFMAN_MATCH}, {7, 'Y', HUFFMAN_MATCH},
+        {7, 'j', HUFFMAN_MATCH}, {7, 'j', HUFFMAN_MATCH}, {7, 'k', HUFFMAN_MATCH}, {7, 'k', HUFFMAN_MATCH},
+        {7, 'q', HUFFMAN_MATCH}, {7, 'q', HUFFMAN_MATCH}, {7, 'v', HUFFMAN_MATCH}, {7, 'v', HUFFMAN_MATCH},
+        {7, 'w', HUFFMAN_MATCH}, {7, 'w', HUFFMAN_MATCH}, {7, 'x', HUFFMAN_MATCH}, {7, 'x', HUFFMAN_MATCH},
+        {7, 'y', HUFFMAN_MATCH}, {7, 'y', HUFFMAN_MATCH}, {7, 'z', HUFFMAN_MATCH}, {7, 'z', HUFFMAN_MATCH},
+        {8, '&', HUFFMAN_MATCH}, {8, '*', HUFFMAN_MATCH}, {8, ',', HUFFMAN_MATCH}, {8, ';', HUFFMAN_MATCH},
+        {8, 'X', HUFFMAN_MATCH}, {8, 'Z', HUFFMAN_MATCH}, {8, 0, HUFFMAN_LOOKUP_2}, {8, 0, HUFFMAN_LOOKUP_3}
+    },
+    { // HUFFMAN_LOOKUP_2
+      // 00
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH},
+        // 01
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH},
+        // 10
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH},
+        // 11
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH},
+        {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}
+    },
+    { // HUFFMAN_LOOKUP_3
+      // 00
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH},
+        // 010
+        {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH},
+        {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH},
+        {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH},
+        {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH},
+        {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH},
+        {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH},
+        {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH},
+        {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH},
+        // 011
+        {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH},
+        {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH},
+        {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH},
+        {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH},
+        {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH},
+        {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH},
+        {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH},
+        {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH},
+        // 100
+        {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH},
+        {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH},
+        {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH},
+        {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH},
+        {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH},
+        {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH},
+        {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH},
+        {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH},
+        // 1010
+        {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH},
+        {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH},
+        {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH},
+        {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH},
+        // 1011
+        {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH},
+        {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH},
+        {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH},
+        {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH},
+        // 11000
+        {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH},
+        {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH},
+        // 11001
+        {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH},
+        {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH},
+        // 11010
+        {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH},
+        {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH},
+        // 11011
+        {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH},
+        {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH},
+        // 11100
+        {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH},
+        {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH},
+        // 11101
+        {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH},
+        {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH},
+        // 111100
+        {6, '^', HUFFMAN_MATCH}, {6, '^', HUFFMAN_MATCH}, {6, '^', HUFFMAN_MATCH}, {6, '^', HUFFMAN_MATCH},
+        // 111101
+        {6, '}', HUFFMAN_MATCH}, {6, '}', HUFFMAN_MATCH}, {6, '}', HUFFMAN_MATCH}, {6, '}', HUFFMAN_MATCH},
+        // 1111100
+        {7, '<', HUFFMAN_MATCH}, {7, '<', HUFFMAN_MATCH},
+        // 1111101
+        {7, '`', HUFFMAN_MATCH}, {7, '`', HUFFMAN_MATCH},
+        // 1111110
+        {7, '{', HUFFMAN_MATCH}, {7, '{', HUFFMAN_MATCH},
+        // 11111110
+        {8, 0, HUFFMAN_LOOKUP_4},
+        // 11111111
+        {8, 0, HUFFMAN_LOOKUP_5}
+    },
+    { // HUFFMAN_LOOKUP_4
+        // 000
+        {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH},
+        {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH},
+        {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH},
+        {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH},
+        {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH},
+        {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH},
+        {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH},
+        {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH},
+        // 001
+        {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH},
+        {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH},
+        {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH},
+        {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH},
+        {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH},
+        {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH},
+        {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH},
+        {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH},
+        // 010
+        {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH},
+        {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH},
+        {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH},
+        {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH},
+        {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH},
+        {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH},
+        {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH},
+        {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH},
+        // 0110
+        {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH},
+        {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH},
+        {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH},
+        {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH},
+        // 0111
+        {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH},
+        {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH},
+        {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH},
+        {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH},
+        // 1000
+        {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH},
+        {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH},
+        {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH},
+        {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH},
+        // 1001
+        {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH},
+        {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH},
+        {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH},
+        {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH},
+        // 1010
+        {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH},
+        {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH},
+        {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH},
+        {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH},
+        // 1011
+        {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH},
+        {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH},
+        {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH},
+        {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH},
+        // 1100
+        {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH},
+        {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH},
+        {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH},
+        {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH},
+        // 1101
+        {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH},
+        {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH},
+        {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH},
+        {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH},
+        // 11100
+        {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH},
+        {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH},
+        // 11101
+        {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH},
+        {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH},
+        // 11110
+        {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH},
+        {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH},
+        // 11111
+        {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH},
+        {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}
+    },
+    { // HUFFMAN_LOOKUP_5
+        // 00000
+        {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH},
+        {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH},
+        // 00001 
+        {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH},
+        {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH},
+        // 00010
+        {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH},
+        {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH},
+        // 00011
+        {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH},
+        {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH},
+        // 00100
+        {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH},
+        {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH},
+        // 00101
+        {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH},
+        {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH},
+        // 00110
+        {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH},
+        {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH},
+        // 00111
+        {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH},
+        {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH},
+        // 01000
+        {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH},
+        {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH},
+        // 010010
+        {6, (char)129, HUFFMAN_MATCH}, {6, (char)129, HUFFMAN_MATCH}, {6, (char)129, HUFFMAN_MATCH}, {6, (char)129, HUFFMAN_MATCH},
+        // 010011
+        {6, (char)132, HUFFMAN_MATCH}, {6, (char)132, HUFFMAN_MATCH}, {6, (char)132, HUFFMAN_MATCH}, {6, (char)132, HUFFMAN_MATCH},
+        // 010100
+        {6, (char)133, HUFFMAN_MATCH}, {6, (char)133, HUFFMAN_MATCH}, {6, (char)133, HUFFMAN_MATCH}, {6, (char)133, HUFFMAN_MATCH},
+        // 010101
+        {6, (char)134, HUFFMAN_MATCH}, {6, (char)134, HUFFMAN_MATCH}, {6, (char)134, HUFFMAN_MATCH}, {6, (char)134, HUFFMAN_MATCH},
+        // 010110
+        {6, (char)136, HUFFMAN_MATCH}, {6, (char)136, HUFFMAN_MATCH}, {6, (char)136, HUFFMAN_MATCH}, {6, (char)136, HUFFMAN_MATCH},
+        // 010111
+        {6, (char)146, HUFFMAN_MATCH}, {6, (char)146, HUFFMAN_MATCH}, {6, (char)146, HUFFMAN_MATCH}, {6, (char)146, HUFFMAN_MATCH},
+        // 011000
+        {6, (char)154, HUFFMAN_MATCH}, {6, (char)154, HUFFMAN_MATCH}, {6, (char)154, HUFFMAN_MATCH}, {6, (char)154, HUFFMAN_MATCH},
+        // 011001
+        {6, (char)156, HUFFMAN_MATCH}, {6, (char)156, HUFFMAN_MATCH}, {6, (char)156, HUFFMAN_MATCH}, {6, (char)156, HUFFMAN_MATCH},
+        // 011010
+        {6, (char)160, HUFFMAN_MATCH}, {6, (char)160, HUFFMAN_MATCH}, {6, (char)160, HUFFMAN_MATCH}, {6, (char)160, HUFFMAN_MATCH},
+        // 011011
+        {6, (char)163, HUFFMAN_MATCH}, {6, (char)163, HUFFMAN_MATCH}, {6, (char)163, HUFFMAN_MATCH}, {6, (char)163, HUFFMAN_MATCH},
+        // 011100
+        {6, (char)164, HUFFMAN_MATCH}, {6, (char)164, HUFFMAN_MATCH}, {6, (char)164, HUFFMAN_MATCH}, {6, (char)164, HUFFMAN_MATCH},
+        // 011101
+        {6, (char)169, HUFFMAN_MATCH}, {6, (char)169, HUFFMAN_MATCH}, {6, (char)169, HUFFMAN_MATCH}, {6, (char)169, HUFFMAN_MATCH},
+        // 011110
+        {6, (char)170, HUFFMAN_MATCH}, {6, (char)170, HUFFMAN_MATCH}, {6, (char)170, HUFFMAN_MATCH}, {6, (char)170, HUFFMAN_MATCH},
+        // 011111
+        {6, (char)173, HUFFMAN_MATCH}, {6, (char)173, HUFFMAN_MATCH}, {6, (char)173, HUFFMAN_MATCH}, {6, (char)173, HUFFMAN_MATCH},
+        // 100000
+        {6, (char)178, HUFFMAN_MATCH}, {6, (char)178, HUFFMAN_MATCH}, {6, (char)178, HUFFMAN_MATCH}, {6, (char)178, HUFFMAN_MATCH},
+        // 100001
+        {6, (char)181, HUFFMAN_MATCH}, {6, (char)181, HUFFMAN_MATCH}, {6, (char)181, HUFFMAN_MATCH}, {6, (char)181, HUFFMAN_MATCH},
+        // 100010
+        {6, (char)185, HUFFMAN_MATCH}, {6, (char)185, HUFFMAN_MATCH}, {6, (char)185, HUFFMAN_MATCH}, {6, (char)185, HUFFMAN_MATCH},
+        // 100011
+        {6, (char)186, HUFFMAN_MATCH}, {6, (char)186, HUFFMAN_MATCH}, {6, (char)186, HUFFMAN_MATCH}, {6, (char)186, HUFFMAN_MATCH},
+        // 100100
+        {6, (char)187, HUFFMAN_MATCH}, {6, (char)187, HUFFMAN_MATCH}, {6, (char)187, HUFFMAN_MATCH}, {6, (char)187, HUFFMAN_MATCH},
+        // 100101
+        {6, (char)189, HUFFMAN_MATCH}, {6, (char)189, HUFFMAN_MATCH}, {6, (char)189, HUFFMAN_MATCH}, {6, (char)189, HUFFMAN_MATCH},
+        // 100110
+        {6, (char)190, HUFFMAN_MATCH}, {6, (char)190, HUFFMAN_MATCH}, {6, (char)190, HUFFMAN_MATCH}, {6, (char)190, HUFFMAN_MATCH},
+        // 100111
+        {6, (char)196, HUFFMAN_MATCH}, {6, (char)196, HUFFMAN_MATCH}, {6, (char)196, HUFFMAN_MATCH}, {6, (char)196, HUFFMAN_MATCH},
+        // 101000
+        {6, (char)198, HUFFMAN_MATCH}, {6, (char)198, HUFFMAN_MATCH}, {6, (char)198, HUFFMAN_MATCH}, {6, (char)198, HUFFMAN_MATCH},
+        // 101001
+        {6, (char)228, HUFFMAN_MATCH}, {6, (char)228, HUFFMAN_MATCH}, {6, (char)228, HUFFMAN_MATCH}, {6, (char)228, HUFFMAN_MATCH},
+        // 101010
+        {6, (char)232, HUFFMAN_MATCH}, {6, (char)232, HUFFMAN_MATCH}, {6, (char)232, HUFFMAN_MATCH}, {6, (char)232, HUFFMAN_MATCH},
+        // 101011
+        {6, (char)233, HUFFMAN_MATCH}, {6, (char)233, HUFFMAN_MATCH}, {6, (char)233, HUFFMAN_MATCH}, {6, (char)233, HUFFMAN_MATCH},
+        // 1011000
+        {7, (char)1, HUFFMAN_MATCH}, {7, (char)1, HUFFMAN_MATCH},
+        // 1011001
+        {7, (char)135, HUFFMAN_MATCH}, {7, (char)135, HUFFMAN_MATCH},
+        // 1011010
+        {7, (char)137, HUFFMAN_MATCH}, {7, (char)137, HUFFMAN_MATCH},
+        // 1011011
+        {7, (char)138, HUFFMAN_MATCH}, {7, (char)138, HUFFMAN_MATCH},
+        // 1011100
+        {7, (char)139, HUFFMAN_MATCH}, {7, (char)139, HUFFMAN_MATCH},
+        // 1011101
+        {7, (char)140, HUFFMAN_MATCH}, {7, (char)140, HUFFMAN_MATCH},
+        // 1011110
+        {7, (char)141, HUFFMAN_MATCH}, {7, (char)141, HUFFMAN_MATCH},
+        // 1011111
+        {7, (char)143, HUFFMAN_MATCH}, {7, (char)143, HUFFMAN_MATCH},
+        // 1100000
+        {7, (char)147, HUFFMAN_MATCH}, {7, (char)147, HUFFMAN_MATCH},
+        // 1100001
+        {7, (char)149, HUFFMAN_MATCH}, {7, (char)149, HUFFMAN_MATCH},
+        // 1100010
+        {7, (char)150, HUFFMAN_MATCH}, {7, (char)150, HUFFMAN_MATCH},
+        // 1100011
+        {7, (char)151, HUFFMAN_MATCH}, {7, (char)151, HUFFMAN_MATCH},
+        // 1100100
+        {7, (char)152, HUFFMAN_MATCH}, {7, (char)152, HUFFMAN_MATCH},
+        // 1100101
+        {7, (char)155, HUFFMAN_MATCH}, {7, (char)155, HUFFMAN_MATCH},
+        // 1100110
+        {7, (char)157, HUFFMAN_MATCH}, {7, (char)157, HUFFMAN_MATCH},
+        // 1100111
+        {7, (char)158, HUFFMAN_MATCH}, {7, (char)158, HUFFMAN_MATCH},
+        // 1101000
+        {7, (char)165, HUFFMAN_MATCH}, {7, (char)165, HUFFMAN_MATCH},
+        // 1101001
+        {7, (char)166, HUFFMAN_MATCH}, {7, (char)166, HUFFMAN_MATCH},
+        // 1101010
+        {7, (char)168, HUFFMAN_MATCH}, {7, (char)168, HUFFMAN_MATCH},
+        // 1101011
+        {7, (char)174, HUFFMAN_MATCH}, {7, (char)174, HUFFMAN_MATCH},
+        // 1101100
+        {7, (char)175, HUFFMAN_MATCH}, {7, (char)175, HUFFMAN_MATCH},
+        // 1101101
+        {7, (char)180, HUFFMAN_MATCH}, {7, (char)180, HUFFMAN_MATCH},
+        // 1101110
+        {7, (char)182, HUFFMAN_MATCH}, {7, (char)182, HUFFMAN_MATCH},
+        // 1101111
+        {7, (char)183, HUFFMAN_MATCH}, {7, (char)183, HUFFMAN_MATCH},
+        // 1110000
+        {7, (char)188, HUFFMAN_MATCH}, {7, (char)188, HUFFMAN_MATCH},
+        // 1110001
+        {7, (char)191, HUFFMAN_MATCH}, {7, (char)191, HUFFMAN_MATCH},
+        // 1110010
+        {7, (char)197, HUFFMAN_MATCH}, {7, (char)197, HUFFMAN_MATCH},
+        // 1100111
+        {7, (char)231, HUFFMAN_MATCH}, {7, (char)231, HUFFMAN_MATCH},
+        // 1110100
+        {7, (char)239, HUFFMAN_MATCH}, {7, (char)239, HUFFMAN_MATCH},
+        // 11101010
+        {8, (char)9, HUFFMAN_MATCH}, {8, (char)142, HUFFMAN_MATCH},
+        {8, (char)144, HUFFMAN_MATCH}, {8, (char)145, HUFFMAN_MATCH},
+        {8, (char)148, HUFFMAN_MATCH}, {8, (char)159, HUFFMAN_MATCH},
+        {8, (char)171, HUFFMAN_MATCH}, {8, (char)206, HUFFMAN_MATCH},
+        {8, (char)215, HUFFMAN_MATCH}, {8, (char)225, HUFFMAN_MATCH},
+        {8, (char)236, HUFFMAN_MATCH}, {8, (char)237, HUFFMAN_MATCH},
+        {8, 0, HUFFMAN_LOOKUP_6}, {8, 0, HUFFMAN_LOOKUP_7},
+        {8, 0, HUFFMAN_LOOKUP_8}, {8, 0, HUFFMAN_LOOKUP_9},
+       {8, 0, HUFFMAN_LOOKUP_10}, {8, 0, HUFFMAN_LOOKUP_11},
+        {8, 0, HUFFMAN_LOOKUP_12}, {8, 0, HUFFMAN_LOOKUP_13},
+       {8, 0, HUFFMAN_LOOKUP_14}, {8, 0, HUFFMAN_LOOKUP_15}
+    },
+    { // HUFFMAN_LOOKUP_6
+        // 0
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH},
+        // 1
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+        {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_7
+        // 0
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH},
+        // 1
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+        {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_8
+        // 00
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH},
+        // 01
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH},
+        // 10
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH},
+        // 11  
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+        {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_9
+        // 00
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH},
+        // 01
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH},
+        // 10
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH},
+        // 11  
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+        {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_10
+        // 00
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH},
+        // 01
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH},
+        // 10
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH},
+        // 11  
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+        {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_11
+        // 00
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH},
+        // 01
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH},
+        // 10
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH},
+        // 110
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH},
+        //111
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+        {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_12
+        // 000
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH},
+        // 001
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH},
+        // 010
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH},
+        // 011
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH},
+        // 100
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH},
+        // 101
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH},
+        // 110
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH},
+        // 111
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+        {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_13
+        // 000
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH},
+        // 001
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH},
+        // 010
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH},
+        // 011
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH},
+        // 100
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH},
+        // 101
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH},
+        // 110
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH},
+        // 111
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+        {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_14
+        // 000
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH},
+        // 0010
+        {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH},
+        {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH},
+        {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH},
+        {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH},
+        {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH},
+        {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH},
+        {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH},
+        {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH},
+        // 0011
+        {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH},
+        {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH},
+        {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH},
+        {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH},
+        {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH},
+        {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH},
+        {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH},
+        {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH},
+        // 0100
+        {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH},
+        {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH},
+        {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH},
+        {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH},
+        {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH},
+        {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH},
+        {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH},
+        {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH},
+        // 0101
+        {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH},
+        {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH},
+        {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH},
+        {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH},
+        {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH},
+        {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH},
+        {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH},
+        {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH},
+        // 0110
+        {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH},
+        {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH},
+        {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH},
+        {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH},
+        {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH},
+        {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH},
+        {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH},
+        {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH},
+        // 0111
+        {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH},
+        {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH},
+        {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH},
+        {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH},
+        {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH},
+        {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH},
+        {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH},
+        {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH},
+        // 1000
+        {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH},
+        {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH},
+        {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH},
+        {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH},
+        {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH},
+        {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH},
+        {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH},
+        {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH},
+        // 1001
+        {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH},
+        {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH},
+        {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH},
+        {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH},
+        {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH},
+        {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH},
+        {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH},
+        {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH},
+        // 1010
+        {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH},
+        {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH},
+        {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH},
+        {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH},
+        {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH},
+        {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH},
+        {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH},
+        {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH},
+        // 1011
+        {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH},
+        {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH},
+        {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH},
+        {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH},
+        {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH},
+        {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH},
+        {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH},
+        {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH},
+        // 1100
+        {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH},
+        {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH},
+        {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH},
+        {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH},
+        {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH},
+        {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH},
+        {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH},
+        {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH},
+        // 1101
+        {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH},
+        {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH},
+        {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH},
+        {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH},
+        {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH},
+        {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH},
+        {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH},
+        {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH},
+        // 1110
+        {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH},
+        {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH},
+        {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH},
+        {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH},
+        {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH},
+        {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH},
+        {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH},
+        {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH},
+        // 1111
+        {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH},
+        {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH},
+        {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH},
+        {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH},
+        {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH},
+        {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH},
+        {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH},
+        {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH},
+    },
+    { // HUFFMAN_LOOKUP_15
+        // 0000
+        {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH},
+        {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH},
+        {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH},
+        {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH},
+        {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH},
+        {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH},
+        {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH},
+        {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH},
+        // 0001
+        {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH},
+        {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH},
+        {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH},
+        {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH},
+        {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH},
+        {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH},
+        {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH},
+        {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH},
+        // 0010
+        {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH},
+        {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH},
+        {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH},
+        {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH},
+        {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH},
+        {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH},
+        {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH},
+        {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH},
+        // 0011
+        {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH},
+        {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH},
+        {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH},
+        {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH},
+        {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH},
+        {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH},
+        {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH},
+        {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH},
+        // 0100
+        {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH},
+        {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH},
+        {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH},
+        {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH},
+        {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH},
+        {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH},
+        {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH},
+        {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH},
+        // 0101
+        {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH},
+        {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH},
+        {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH},
+        {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH},
+        {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH},
+        {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH},
+        {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH},
+        {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH},
+        // 0110
+        {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH},
+        {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH},
+        {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH},
+        {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH},
+        {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH},
+        {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH},
+        {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH},
+        {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH},
+        // 0111
+        {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH},
+        {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH},
+        {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH},
+        {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH},
+        {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH},
+        {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH},
+        {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH},
+        {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH},
+        // 1000
+        {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH},
+        {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH},
+        {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH},
+        {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH},
+        {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH},
+        {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH},
+        {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH},
+        {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH},
+        // 1001
+        {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH},
+        {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH},
+        {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH},
+        {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH},
+        {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH},
+        {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH},
+        {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH},
+        {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH},
+        // 1010
+        {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH},
+        {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH},
+        {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH},
+        {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH},
+        {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH},
+        {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH},
+        {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH},
+        {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH},
+        // 1011
+        {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH},
+        {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH},
+        {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH},
+        {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH},
+        {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH},
+        {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH},
+        {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH},
+        {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH},
+        // 1100
+        {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH},
+        {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH},
+        {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH},
+        {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH},
+        {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH},
+        {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH},
+        {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH},
+        {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH},
+        // 1101
+        {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH},
+        {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH},
+        {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH},
+        {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH},
+        {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH},
+        {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH},
+        {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH},
+        {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH},
+        // 1110
+        {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH},
+        {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH},
+        {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH},
+        {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH},
+        {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH},
+        {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH},
+        {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH},
+        {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH},
+        // 111100
+        {6, (char)10, HUFFMAN_MATCH}, {6, (char)10, HUFFMAN_MATCH},
+        {6, (char)10, HUFFMAN_MATCH}, {6, (char)10, HUFFMAN_MATCH},
+        // 111101
+        {6, (char)13, HUFFMAN_MATCH}, {6, (char)13, HUFFMAN_MATCH},
+        {6, (char)13, HUFFMAN_MATCH}, {6, (char)13, HUFFMAN_MATCH},
+        // 111110
+        {6, (char)22, HUFFMAN_MATCH}, {6, (char)22, HUFFMAN_MATCH},
+        {6, (char)22, HUFFMAN_MATCH}, {6, (char)22, HUFFMAN_MATCH},
+        // 111111
+        {6, (char)0, HUFFMAN_FAILURE}, {6, (char)0, HUFFMAN_FAILURE},
+        {6, (char)0, HUFFMAN_FAILURE}, {6, (char)0, HUFFMAN_FAILURE},
+    },
+};
diff --git a/src/service_inspectors/http2_inspect/http2_huffman_state_machine.h b/src/service_inspectors/http2_inspect/http2_huffman_state_machine.h
new file mode 100644 (file)
index 0000000..869be65
--- /dev/null
@@ -0,0 +1,57 @@
+//--------------------------------------------------------------------------
+// Copyright (C) 2019-2019 Cisco and/or its affiliates. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License Version 2 as published
+// by the Free Software Foundation.  You may not use, modify or distribute
+// this program under any other version of the GNU General Public License.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+//--------------------------------------------------------------------------
+// http2_huffman_state_machine.h author Maya Dagon <mdagon@cisco.com>
+
+#ifndef HTTP2_HUFFMAN_STATE_MACHINE_H
+#define HTTP2_HUFFMAN_STATE_MACHINE_H
+
+#include "main/snort_types.h"
+
+enum HuffmanState
+{
+    HUFFMAN_LOOKUP_1 = 0,
+    HUFFMAN_LOOKUP_2 = 1,
+    HUFFMAN_LOOKUP_3 = 2,
+    HUFFMAN_LOOKUP_4 = 3,
+    HUFFMAN_LOOKUP_5 = 4,
+    HUFFMAN_LOOKUP_6 = 5,
+    HUFFMAN_LOOKUP_7 = 6,
+    HUFFMAN_LOOKUP_8 = 7,
+    HUFFMAN_LOOKUP_9 = 8,
+    HUFFMAN_LOOKUP_10 = 9,
+    HUFFMAN_LOOKUP_11 = 10,
+    HUFFMAN_LOOKUP_12 = 11,
+    HUFFMAN_LOOKUP_13 = 12,
+    HUFFMAN_LOOKUP_14 = 13,
+    HUFFMAN_LOOKUP_15 = 14,
+    HUFFMAN_LOOKUP_MAX = HUFFMAN_LOOKUP_15,
+    HUFFMAN_MATCH = HUFFMAN_LOOKUP_MAX + 1,
+    HUFFMAN_FAILURE = HUFFMAN_MATCH + 1
+};
+
+struct HuffmanEntry
+{
+    uint8_t len;
+    char symbol;
+    HuffmanState state;
+};
+
+extern const HuffmanEntry huffman_decode[][UINT8_MAX+1];
+
+#endif
+
index 37e0ed03861a8adfb759807b2f95dbebf73ae0aa..81320eea25004e46a17112eaee84868fe87b5d67 100644 (file)
@@ -19,7 +19,8 @@ add_cpputest( http2_hpack_int_decode_test
         ../http2_hpack_int_decode.cc
 )
 add_cpputest( http2_hpack_string_decode_test
-    SOURCES
+  SOURCES
+        ../http2_huffman_state_machine.cc
         ../http2_hpack_int_decode.cc
         ../http2_hpack_string_decode.cc
 )
index 478fef0ac4cd6de15317b0cbd8c428fc41c9b693..1cb648e643179b8e3351c0bda49fb6f08588c46b 100644 (file)
@@ -23,6 +23,7 @@
 #endif
 
 #include "../http2_enum.h"
+#include "../http2_huffman_state_machine.h"
 #include "../http2_hpack_string_decode.h"
 #include "../../http_inspect/http_enum.h"
 
@@ -154,6 +155,403 @@ TEST(http2_hpack_string_decode_success, max_field_length)
     CHECK(memcmp(res, &buf[4], bytes_written) == 0);
 }
 
+TEST(http2_hpack_string_decode_success, huffman_1_byte)
+{
+    // prepare buf to decode - Huffman '%'
+    uint8_t buf[2] = {0x81, 0x57};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[1];
+    bool success = decode->translate(buf, 2, bytes_processed, res, 1, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 2);
+    CHECK(bytes_written == 1);
+    CHECK(res[0] == '%');
+}
+
+TEST(http2_hpack_string_decode_success, huffman_1_byte_star)
+{
+    // prepare buf to decode - Huffman '*'
+    uint8_t buf[2] = {0x81, 0xf9};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[1];
+    bool success = decode->translate(buf, 2, bytes_processed, res, 1, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 2);
+    CHECK(bytes_written == 1);
+    CHECK(res[0] == '*');
+}
+
+TEST(http2_hpack_string_decode_success, huffman_2_bytes_aligned)
+{
+    // prepare buf to decode - Huffman "&&" 
+    uint8_t buf[3] = {0x82, 0xf8, 0xf8};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[3];
+    bool success = decode->translate(buf, 3, bytes_processed, res, 3, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 3);
+    CHECK(bytes_written == 2);
+    CHECK(memcmp(res, "&&", 2) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_2_bytes_unaligned)
+{
+    // prepare buf to decode - Huffman "%%" 
+    uint8_t buf[3] = {0x82, 0x55, 0x5f};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[3];
+    bool success = decode->translate(buf, 3, bytes_processed, res, 3, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 3);
+    CHECK(bytes_written == 2);
+    CHECK(memcmp(res, "%%", 2) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_rfc_example1)
+{
+    // prepare buf to decode - Huffman "www.example.com" , RFC c.4.1 
+    uint8_t buf[13] = {0x8c, 0xf1, 0xe3, 0xc2, 0xe5, 0xf2, 0x3a, 0x6b, 0xa0, 0xab, 0x90, 0xf4, 0xff};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[19];
+    bool success = decode->translate(buf, 13, bytes_processed, res, 19, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 13);
+    CHECK(bytes_written == 15);
+    CHECK(memcmp(res, "www.example.com", 15) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_rfc_example2)
+{
+    // prepare buf to decode - Huffman "no-cache" , RFC c.4.2
+    uint8_t buf[7] = {0x86, 0xa8, 0xeb, 0x10, 0x64, 0x9c, 0xbf};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[9];
+    bool success = decode->translate(buf, 7, bytes_processed, res, 9, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 7);
+    CHECK(bytes_written == 8);
+    CHECK(memcmp(res, "no-cache", 8) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_rfc_example3)
+{
+    // prepare buf to decode - Huffman "custom-key" , RFC c.4.3
+    uint8_t buf[9] = {0x88, 0x25, 0xa8, 0x49, 0xe9, 0x5b, 0xa9, 0x7d, 0x7f};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[12];
+    bool success = decode->translate(buf, 9, bytes_processed, res, 12, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 9);
+    CHECK(bytes_written == 10);
+    CHECK(memcmp(res, "custom-key", 10) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_rfc_example4)
+{
+    // prepare buf to decode - Huffman "custom-value" , RFC c.4.3
+    uint8_t buf[10] = {0x89, 0x25, 0xa8, 0x49, 0xe9, 0x5b, 0xb8, 0xe8, 0xb4, 0xbf};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[14];
+    bool success = decode->translate(buf, 10, bytes_processed, res, 14, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 10);
+    CHECK(bytes_written == 12);
+    CHECK(memcmp(res, "custom-value", 12) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_rfc_example5)
+{
+    // prepare buf to decode - Huffman "Mon, 21 Oct 2013 20:13:21 GMT" , RFC c.6.1
+    uint8_t buf[23] = {0x96, 0xd0, 0x7a, 0xbe, 0x94, 0x10, 0x54, 0xd4, 0x44, 0xa8, 0x20,
+                    0x05, 0x95, 0x04, 0x0b, 0x81, 0x66, 0xe0, 0x82, 0xa6, 0x2d, 0x1b, 0xff};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[35];
+    bool success = decode->translate(buf, 23, bytes_processed, res, 35, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 23);
+    CHECK(bytes_written == 29);
+    CHECK(memcmp(res, "Mon, 21 Oct 2013 20:13:21 GMT", 29) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_rfc_example6)
+{
+    // prepare buf to decode - Huffman "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1" , RFC c.6.3
+    uint8_t buf[46] = {0xad, 0x94, 0xe7, 0x82, 0x1d, 0xd7, 0xf2, 0xe6, 0xc7, 0xb3, 0x35, 0xdf,
+                    0xdf, 0xcd, 0x5b, 0x39, 0x60, 0xd5, 0xaf, 0x27, 0x08, 0x7f, 0x36, 0x72,
+                    0xc1, 0xab, 0x27, 0x0f, 0xb5, 0x29, 0x1f, 0x95, 0x87, 0x31, 0x60, 0x65,
+                    0xc0, 0x03, 0xed, 0x4e, 0xe5, 0xb1, 0x06, 0x3d, 0x50, 0x07};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[73];
+    bool success = decode->translate(buf, 46, bytes_processed, res, 73, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 46);
+    CHECK(bytes_written == 56);
+    CHECK(memcmp(res, "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", 56) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_unaligned_then_aligned)
+{
+    // prepare buf to decode - Huffman first 4 symbols are 6 bit each, followed by 8 bit
+    uint8_t buf[5] = {0x84, 0x59, 0x76, 0x19, 0xfa};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[6];
+    bool success = decode->translate(buf, 5, bytes_processed, res, 6, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 5);
+    CHECK(bytes_written == 5);
+    CHECK(memcmp(res, "-./3,", 5) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_1)
+{
+    // prepare buf to decode - "abcdefghijklmnopqrstuvwxyz"
+    uint8_t buf[21] = {0x94, 0x1c, 0x64, 0x90, 0xb2, 0xcd, 0x39, 0xba, 0x75, 0xa2, 0x9a, 0x8f, 0x5f, 0x6b,
+            0x10, 0x9b, 0x7b, 0xf8, 0xf3, 0xeb, 0xdf};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[32];
+    bool success = decode->translate(buf, 21, bytes_processed, res, 32, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 21);
+    CHECK(bytes_written == 26);
+    CHECK(memcmp(res, "abcdefghijklmnopqrstuvwxyz", 26) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_2)
+{
+    // prepare buf to decode - "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+    uint8_t buf[24] = {0x97, 0x86, 0xed, 0xeb, 0xf8, 0x30, 0xe2, 0xc7, 0x93, 0x2e, 0x6c, 0xfa, 0x34, 0xea,
+              0xd7, 0xb3, 0x6e, 0xed, 0xfc, 0x38, 0xf2, 0xfc, 0xe7, 0xfb};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[36];
+    bool success = decode->translate(buf, 24, bytes_processed, res, 36, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 24);
+    CHECK(bytes_written == 26);
+    CHECK(memcmp(res, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_3)
+{
+    // prepare buf to decode - "0123456789"
+    uint8_t buf[9] = {0x88, 0x00, 0x44, 0xcb, 0x4d, 0xb8, 0xeb, 0xcf, 0xff};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[12];
+    bool success = decode->translate(buf, 9, bytes_processed, res, 12, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 9);
+    CHECK(bytes_written == 10);
+    CHECK(memcmp(res, "0123456789", 10) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_4)
+{
+    // prepare buf to decode - ' !"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'
+  uint8_t buf[45] = {0xAC, 0x53, 0xF8, 0xFE, 0x7F, 0xEB, 0xFF, 0x2A, 0xFC, 0X7F, 0xAF, 0xEB, 0xFB, 0xF9, 0xFF, 0x7F, 0x4B, 0x2E, 0xC5, 0xCF, 0xBF, 0xFF, 0x90, 0x7F, 0xDF, 0xF9, 0xFF, 0xAF, 0xFD, 0xFF, 0xFF, 0x0F, 0xFE, 0x7F, 0xF9, 0x17, 0xFF, 0xDF, 0xFF, 0xDF, 0xF3, 0xFF, 0xDF, 0xFE, 0xFF};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[70];
+    bool success = decode->translate(buf, 45, bytes_processed, res, 70, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 45);
+    CHECK(bytes_written == 33);
+    CHECK(memcmp(res, " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", 33) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_00_0F)
+{
+    // prepare buf to decode - encoded 0x00-0x0F
+  uint8_t buf[55] = {0xB6, 0xFF, 0xC7, 0xFF, 0xFD, 0x8F, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xE4, 0xFF, 0xFF, 0xFE, 0x5F, 0xFF, 0xFF, 0xE6, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xEA, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFA, 0x7F, 0xFF, 0xFF, 0xAB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFE, 0xCF};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[88];
+    uint8_t expected[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
+    bool success = decode->translate(buf, 55, bytes_processed, res, 88, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 55);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_10_1F)
+{
+    // prepare buf to decode - encoded 0x10-0x1F
+  uint8_t buf[58] = {0xB9, 0xFF, 0xFF, 0xFE, 0xDF, 0xFF, 0xFF, 0xEE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xD3, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xDB, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFE, 0xFF};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[93];
+    uint8_t expected[16] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
+    bool success = decode->translate(buf, 58, bytes_processed, res, 93, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 58);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_7F_8F)
+{
+    // prepare buf to decode - encoded 0x7F-0x8F
+  uint8_t buf[49] = {0xB0, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xE6, 0xFF, 0xFF, 0x4B, 0xFF, 0xF9, 0xFF, 0xFF, 0xA3, 0xFF, 0xFD, 0x3F, 0xFF, 0xF5, 0x3F, 0xFF, 0xD5, 0xFF, 0xFF, 0xB3, 0xFF, 0xFE, 0xB7, 0xFF, 0xFD, 0xAF, 0xFF, 0xFB, 0x7F, 0xFF, 0xF7, 0x3F, 0xFF, 0xEE, 0xFF, 0xFF, 0xDE, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xBF};
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[79];
+    uint8_t expected[17] = {0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F};
+    bool success = decode->translate(buf, 49, bytes_processed, res, 79, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 49);
+    CHECK(bytes_written == 17);
+    CHECK(memcmp(res, expected, 17) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_90_9F)
+{
+    // prepare buf to decode - encoded 0x90-0x9F
+  uint8_t buf[47] = {0xAE, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xED, 0xFF, 0xFF, 0x5F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x77, 0xFF, 0xFE, 0x1F, 0xFF, 0xFC, 0x5F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF2, 0x7F, 0xFF, 0x73, 0xFF, 0xFD, 0x8F, 0xFF, 0xFC, 0xBF, 0xFF, 0xEC, 0xFF, 0xFF, 0xE6, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xDF};
+
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[76];
+    uint8_t expected[16] = {0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F};
+    bool success = decode->translate(buf, 47, bytes_processed, res, 76, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 47);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_A0_AF)
+{
+    // prepare buf to decode - encoded 0xA0-0xAF
+  uint8_t buf[46] = {0xAD, 0xFF, 0xFF, 0x6B, 0xFF, 0xFB, 0xBF, 0xFF, 0xD3, 0xFF, 0xFE, 0xDF, 0xFF, 0xFB, 0x9F, 0xFF, 0xFA, 0x3F, 0xFF, 0xF4, 0xFF, 0xFF, 0x7B, 0xFF, 0xFF, 0x57, 0xFF, 0xFB, 0xBF, 0xFF, 0xEF, 0x7F, 0xFF, 0xF8, 0x7F, 0xFF, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFB, 0x3F};
+
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[74];
+    uint8_t expected[16] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF};
+    bool success = decode->translate(buf, 46, bytes_processed, res, 74, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 46);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_B0_BF)
+{
+    // prepare buf to decode - encoded 0xB0-0xBF
+  uint8_t buf[45] = {0xAC, 0xFF, 0xFF, 0x07, 0xFF, 0xF8, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0x17, 0xFF, 0xFE, 0xDF, 0xFF, 0xF8, 0x7F, 0xFF, 0xF7, 0x7F, 0xFF, 0xEF, 0xFF, 0xFE, 0xAF, 0xFF, 0xF8, 0xBF, 0xFF, 0xE3, 0xFF, 0xFF, 0x93, 0xFF, 0xFF, 0x87, 0xFF, 0xFC, 0xBF, 0xFF, 0xF3, 0x7F, 0xFF, 0xF1};
+
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[73];
+    uint8_t expected[16] = {0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF};
+    bool success = decode->translate(buf, 45, bytes_processed, res, 73, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 45);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_C0_CF)
+{
+    // prepare buf to decode - encoded 0xC0-0xCF
+  uint8_t buf[50] = {0xB1, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0xEB, 0xFF, 0xFE, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0xF2, 0xFF, 0xFF, 0xA3, 0xFF, 0xFF, 0xD9, 0xFF, 0xFF, 0xF1, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0x27, 0xFF, 0xFF, 0xDE, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xB7};
+
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[80];
+    uint8_t expected[16] = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF};
+    bool success = decode->translate(buf, 50, bytes_processed, res, 80, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 50);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_D0_DF)
+{
+    // prepare buf to decode - encoded 0xD0-0xDF
+  uint8_t buf[51] = {0xB2, 0xFF, 0xFE, 0x5F, 0xFF, 0xE3, 0xFF, 0xFF, 0xF9, 0xBF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0x97, 0xFF, 0xF9, 0x3F, 0xFF, 0xCB, 0xFF, 0xFF, 0xF4, 0x7F, 0xFF, 0xFD, 0x3F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x27, 0xFF, 0xFF, 0xE5};
+
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[82];
+    uint8_t expected[16] = {0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF};
+    bool success = decode->translate(buf, 51, bytes_processed, res, 82, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 51);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_E0_EF)
+{
+    // prepare buf to decode - encoded 0xE0-0xEF
+  uint8_t buf[47] = {0xAE, 0xFF, 0xFE, 0xCF, 0xFF, 0xFF, 0x3F, 0xFF, 0xED, 0xFF, 0xFF, 0x37, 0xFF, 0xFD, 0x3F, 0xFF, 0xE7, 0xFF, 0xFF, 0x47, 0xFF, 0xFF, 0x3F, 0xFF, 0xFA, 0xBF, 0xFF, 0xEB, 0xFF, 0xFF, 0xF7, 0x7F, 0xFF, 0xFB, 0xFF, 0xFF, 0xFD, 0x3F, 0xFF, 0xFD, 0x7F, 0xFF, 0xFE, 0xAF, 0xFF, 0xFE, 0x9F};
+
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[76];
+    uint8_t expected[16] = {0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF};
+    bool success = decode->translate(buf, 47, bytes_processed, res, 76, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 47);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+
+TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_F0_FF)
+{
+    // prepare buf to decode - encoded 0xF0-0xFF
+  uint8_t buf[55] = {0xB6, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0xFF, 0xD9, 0xFF, 0xFF, 0xF6, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xD1, 0xFF, 0xFF, 0xFA, 0x7F, 0xFF, 0xFF, 0x57, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xD9, 0xFF, 0xFF, 0xFB, 0x7F, 0xFF, 0xFF, 0x77, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x77};
+
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[88];
+    uint8_t expected[16] = {0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF};
+    bool success = decode->translate(buf, 55, bytes_processed, res, 88, bytes_written);
+    // check results
+    CHECK(success == true);
+    CHECK(bytes_processed == 55);
+    CHECK(bytes_written == 16);
+    CHECK(memcmp(res, expected, 16) == 0);
+}
+
 //
 // The following tests should trigger infractions/events
 //
@@ -253,7 +651,7 @@ TEST(http2_hpack_string_decode_infractions, out_buf_out_of_space)
     Http2EventGen local_events;
     Http2Infractions local_inf;
     Http2HpackStringDecode local_decode(&local_events, &local_inf);
-    // prepare buf to decode 
+    // prepare buf to decode
     uint8_t buf[HttpEnums::MAX_OCTETS];
     buf[0] = 0x7F;
     buf[1] = 0xA1;
@@ -273,6 +671,168 @@ TEST(http2_hpack_string_decode_infractions, out_buf_out_of_space)
     CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
 }
 
+TEST(http2_hpack_string_decode_infractions, huffman_1_byte_bad_padding)
+{
+    // prepare decode object
+    Http2EventGen local_events;
+    Http2Infractions local_inf;
+    Http2HpackStringDecode local_decode(&local_events, &local_inf);
+    // prepare buf to decode - bad padding
+    uint8_t buf[2] = { 0x81, 0x54 };
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[2];
+    bool success = local_decode.translate(buf, 2, bytes_processed, res, 2, bytes_written);
+    // check results
+    CHECK(success == false);
+    CHECK(bytes_processed == 2);
+    CHECK(bytes_written == 1);
+    CHECK(local_inf.get_raw() == (1<<INF_HUFFMAN_BAD_PADDING));
+    CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
+}
+
+TEST(http2_hpack_string_decode_infractions, huffman_1_byte_incomplete_FF)
+{
+    // prepare decode object
+    Http2EventGen local_events;
+    Http2Infractions local_inf;
+    Http2HpackStringDecode local_decode(&local_events, &local_inf);
+    // prepare buf to decode - Incomplete code 0xFF
+    uint8_t buf[2] = { 0x81, 0xFF };
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[2];
+    bool success = local_decode.translate(buf, 2, bytes_processed, res, 2, bytes_written);
+    // check results
+    CHECK(success == false);
+    CHECK(bytes_processed == 2);
+    CHECK(bytes_written == 0);
+    CHECK(local_inf.get_raw() == (1<<INF_HUFFMAN_INCOMPLETE_CODE_PADDING));
+    CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
+}
+
+TEST(http2_hpack_string_decode_infractions, huffman_1_byte_incomplete_FE)
+{
+    // prepare decode object
+    Http2EventGen local_events;
+    Http2Infractions local_inf;
+    Http2HpackStringDecode local_decode(&local_events, &local_inf);
+    // prepare buf to decode - Incomplete code 0xFE
+    uint8_t buf[2] = { 0x81, 0xFE };
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[2];
+    bool success = local_decode.translate(buf, 2, bytes_processed, res, 2, bytes_written);
+    // check results
+    CHECK(success == false);
+    CHECK(bytes_processed == 2);
+    CHECK(bytes_written == 0);
+    CHECK(local_inf.get_raw() == (1<<INF_HUFFMAN_INCOMPLETE_CODE_PADDING));
+    CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
+}
+
+TEST(http2_hpack_string_decode_infractions, huffman_2_bytes_incomplete_FF_FE)
+{
+    // prepare decode object
+    Http2EventGen local_events;
+    Http2Infractions local_inf;
+    Http2HpackStringDecode local_decode(&local_events, &local_inf);
+    // prepare buf to decode - Incomplete code 0xFFFE
+    uint8_t buf[3] = { 0x82, 0xFF, 0xFE };
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[5];
+    bool success = local_decode.translate(buf, 3, bytes_processed, res, 5, bytes_written);
+    // check results
+    CHECK(success == false);
+    CHECK(bytes_processed == 3);
+    CHECK(bytes_written == 0);
+    CHECK(local_inf.get_raw() == (1<<INF_HUFFMAN_INCOMPLETE_CODE_PADDING));
+    CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
+}
+
+TEST(http2_hpack_string_decode_infractions, huffman_3_bytes_incomplete)
+{
+    // prepare decode object
+    Http2EventGen local_events;
+    Http2Infractions local_inf;
+    Http2HpackStringDecode local_decode(&local_events, &local_inf);
+    // prepare buf to decode - Incomplete code 0xFFFFFE
+    uint8_t buf[4] = { 0x83, 0xFF, 0xFF, 0xFE };
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[7];
+    bool success = local_decode.translate(buf, 4, bytes_processed, res, 7, bytes_written);
+    // check results
+    CHECK(success == false);
+    CHECK(bytes_processed == 4);
+    CHECK(bytes_written == 0);
+    CHECK(local_inf.get_raw() == (1<<INF_HUFFMAN_INCOMPLETE_CODE_PADDING));
+    CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
+}
+
+TEST(http2_hpack_string_decode_infractions, huffman_FB_incomplete_FF)
+{
+    // prepare decode object
+    Http2EventGen local_events;
+    Http2Infractions local_inf;
+    Http2HpackStringDecode local_decode(&local_events, &local_inf);
+    // prepare buf to decode - ';' (8 bits) and incomplete code 0xFF
+    uint8_t buf[3] = { 0x82, 0xFB, 0xFF };
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[5];
+    bool success = local_decode.translate(buf, 3, bytes_processed, res, 5, bytes_written);
+    // check results
+    CHECK(success == false);
+    CHECK(bytes_processed == 3);
+    CHECK(bytes_written == 1);
+    CHECK(local_inf.get_raw() == (1<<INF_HUFFMAN_INCOMPLETE_CODE_PADDING));
+    CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
+    CHECK(memcmp(res, ";", 1) == 0);
+}
+
+TEST(http2_hpack_string_decode_infractions, huffman_07_incomplete_FF)
+{
+    // prepare decode object
+    Http2EventGen local_events;
+    Http2Infractions local_inf;
+    Http2HpackStringDecode local_decode(&local_events, &local_inf);
+    // prepare buf to decode - '0' (5 bits) and incomplete code 0xFF with padding
+    uint8_t buf[3] = { 0x82, 0x07, 0xFF };
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[5];
+    bool success = local_decode.translate(buf, 3, bytes_processed, res, 5, bytes_written);
+    // check results
+    CHECK(success == false);
+    CHECK(bytes_processed == 3);
+    CHECK(bytes_written == 1);
+    CHECK(local_inf.get_raw() == (1<<INF_HUFFMAN_INCOMPLETE_CODE_PADDING));
+    CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
+    CHECK(memcmp(res, "0", 1) == 0);
+}
+
+TEST(http2_hpack_string_decode_infractions, huffman_decoded_eos)
+{
+    // prepare decode object
+    Http2EventGen local_events;
+    Http2Infractions local_inf;
+    Http2HpackStringDecode local_decode(&local_events, &local_inf);
+    // prepare buf to decode - bad padding
+    uint8_t buf[5] = { 0x84, 0xFF, 0xFF, 0xFF, 0xFF };
+    // decode
+    uint32_t bytes_processed = 0, bytes_written = 0;
+    uint8_t res[10];
+    bool success = local_decode.translate(buf, 5, bytes_processed, res, 10, bytes_written);
+    // check results
+    CHECK(success == false);
+    CHECK(bytes_processed == 4);
+    CHECK(bytes_written == 0);
+    CHECK(local_inf.get_raw() == (1<<INF_HUFFMAN_DECODED_EOS));
+    CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1)));
+}
+
 int main(int argc, char** argv)
 {
     return CommandLineTestRunner::RunAllTests(argc, argv);