tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

hb-ot-shaper-use-table.hh (54285B)


      1 /* == Start of generated table == */
      2 /*
      3 * The following table is generated by running:
      4 *
      5 *   ./gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt ArabicShaping.txt DerivedCoreProperties.txt UnicodeData.txt Blocks.txt Scripts.txt IndicSyllabicCategory-Additional.txt IndicPositionalCategory-Additional.txt
      6 *
      7 * on files with these headers:
      8 *
      9 * # IndicSyllabicCategory-17.0.0.txt
     10 * # Date: 2025-08-01, 04:02:23 GMT
     11 * # IndicPositionalCategory-17.0.0.txt
     12 * # Date: 2025-07-29, 13:35:52 GMT
     13 * # ArabicShaping-17.0.0.txt
     14 * # Date: 2025-08-14
     15 * # DerivedCoreProperties-17.0.0.txt
     16 * # Date: 2025-07-30, 23:55:08 GMT
     17 * # Blocks-17.0.0.txt
     18 * # Date: 2025-08-01
     19 * # Scripts-17.0.0.txt
     20 * # Date: 2025-07-24, 13:28:55 GMT
     21 * # Override values For Indic_Syllabic_Category
     22 * # Not derivable
     23 * # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17
     24 * # Updated for Unicode 10.0 by Andrew Glass 2017-07-25
     25 * # Updated for Unicode 12.1 by Andrew Glass 2019-05-24
     26 * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28
     27 * # Updated for Unicode 14.0 by Andrew Glass 2021-09-25
     28 * # Updated for Unicode 15.0 by Andrew Glass 2022-09-16
     29 * # Updated for Unicode 15.1 by Andrew Glass 2023-09-14
     30 * # Updated for Unicode 16.0 by Andrew Glass 2024-09-11
     31 * # Override values For Indic_Positional_Category
     32 * # Not derivable
     33 * # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17
     34 * # Updated for Unicode 10.0 by Andrew Glass 2017-07-25
     35 * # Ammended for Unicode 10.0 by Andrew Glass 2018-09-21
     36 * # Updated for L2/19-083    by Andrew Glass 2019-05-06
     37 * # Updated for Unicode 12.1 by Andrew Glass 2019-05-30
     38 * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28
     39 * # Updated for Unicode 14.0 by Andrew Glass 2021-09-28
     40 * # Updated for Unicode 15.0 by Andrew Glass 2022-09-16
     41 * # Updated for Unicode 15.1 by Andrew Glass 2023-09-14
     42 * # Updated for Unicode 16.0 by Andrew Glass 2024-09-11
     43 * UnicodeData.txt does not have a header.
     44 */
     45 
     46 #ifndef HB_OT_SHAPER_USE_TABLE_HH
     47 #define HB_OT_SHAPER_USE_TABLE_HH
     48 
     49 #include "hb.hh"
     50 
     51 #include "hb-ot-shaper-use-machine.hh"
     52 
     53 #pragma GCC diagnostic push
     54 #pragma GCC diagnostic ignored "-Wunused-macros"
     55 #define B	USE(B)	/* BASE */
     56 #define CGJ	USE(CGJ)	/* CGJ */
     57 #define CS	USE(CS)	/* CONS_WITH_STACKER */
     58 #define G	USE(G)	/* HIEROGLYPH */
     59 #define GB	USE(GB)	/* BASE_OTHER */
     60 #define H	USE(H)	/* HALANT */
     61 #define HM	USE(HM)	/* HIEROGLYPH_MOD */
     62 #define HN	USE(HN)	/* HALANT_NUM */
     63 #define HR	USE(HR)	/* HIEROGLYPH_MIRROR */
     64 #define HVM	USE(HVM)	/* HALANT_OR_VOWEL_MODIFIER */
     65 #define IS	USE(IS)	/* INVISIBLE_STACKER */
     66 #define J	USE(J)	/* HIEROGLYPH_JOINER */
     67 #define N	USE(N)	/* BASE_NUM */
     68 #define O	USE(O)	/* OTHER */
     69 #define R	USE(R)	/* REPHA */
     70 #define RK	USE(RK)	/* REORDERING_KILLER */
     71 #define SB	USE(SB)	/* HIEROGLYPH_SEGMENT_BEGIN */
     72 #define SE	USE(SE)	/* HIEROGLYPH_SEGMENT_END */
     73 #define SUB	USE(SUB)	/* CONS_SUB */
     74 #define Sk	USE(Sk)	/* SAKOT */
     75 #define WJ	USE(WJ)	/* Word_Joiner */
     76 #define ZWNJ	USE(ZWNJ)	/* ZWNJ */
     77 #define CMAbv	USE(CMAbv)
     78 #define CMBlw	USE(CMBlw)
     79 #define FAbv	USE(FAbv)
     80 #define FBlw	USE(FBlw)
     81 #define FPst	USE(FPst)
     82 #define FMAbv	USE(FMAbv)
     83 #define FMBlw	USE(FMBlw)
     84 #define FMPst	USE(FMPst)
     85 #define MAbv	USE(MAbv)
     86 #define MBlw	USE(MBlw)
     87 #define MPst	USE(MPst)
     88 #define MPre	USE(MPre)
     89 #define SMAbv	USE(SMAbv)
     90 #define SMBlw	USE(SMBlw)
     91 #define VAbv	USE(VAbv)
     92 #define VBlw	USE(VBlw)
     93 #define VPst	USE(VPst)
     94 #define VPre	USE(VPre)
     95 #define VMAbv	USE(VMAbv)
     96 #define VMBlw	USE(VMBlw)
     97 #define VMPst	USE(VMPst)
     98 #define VMPre	USE(VMPre)
     99 #pragma GCC diagnostic pop
    100 
    101 
    102 #ifndef HB_OPTIMIZE_SIZE
    103 
    104 #include <stdint.h>
    105 
    106 static const uint8_t hb_use_u8[3343]=
    107 {
    108     16,   50,   51,   51,   51,   52,   51,   83,  118,  131,   57,   58,   59,  195,  211,   62,
    109     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    110     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    111     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    112     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    113     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    114     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    115     15,    0,    1,    2,    2,    2,    2,    3,    2,    2,    2,    2,    2,    4,    2,    2,
    116      5,    6,    2,    7,    8,    9,   10,   11,   12,   13,   14,   15,   16,    2,    2,   17,
    117     18,   19,   20,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   21,
    118     22,   23,   24,   25,   26,   27,   28,   29,   30,   31,   32,    2,   33,    2,    2,    2,
    119      2,   34,   35,    2,    2,    2,    2,    2,    2,    2,    2,    2,   36,    2,    2,    2,
    120     37,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   38,    2,   39,    2,    2,
    121      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    122      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    123      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    124      2,   40,   41,   42,   43,   44,   45,    2,   46,    2,    2,    2,    2,    2,    2,    2,
    125      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    126      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   47,   48,    2,
    127     49,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   50,   51,    2,    2,    2,
    128      2,    2,    2,    2,    2,   52,   53,    2,   54,    2,    2,   55,   56,    2,   57,   58,
    129     59,   60,   61,   62,   63,   64,   65,   66,   67,   68,   69,    2,   70,   71,   72,   73,
    130      2,   74,    2,   75,   76,   77,   78,   79,    2,   80,   81,   82,   83,    2,   84,   85,
    131      2,   86,   86,   86,   86,   86,   86,   86,   86,   87,   86,   86,   86,   86,   86,   86,
    132     86,   86,   86,   86,   86,   86,   86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
    133     86,   86,   86,   86,   86,   86,   86,   86,   88,    2,    2,    2,    2,    2,    2,    2,
    134      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    135      2,    2,    2,   89,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    136      2,    2,    2,    2,    2,    2,   90,   91,    2,    2,    2,   92,    2,    2,    2,   93,
    137     94,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    138      2,    2,    2,    2,    2,    2,    2,   95,   95,   95,   96,    2,    2,    2,    2,    2,
    139      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    140      2,    2,    2,    2,    2,    2,    2,    2,    2,   97,   98,    2,    2,    2,    2,    2,
    141      2,    2,    2,   99,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    142      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    143      2,    2,    2,  100,    2,    2,  101,    2,    2,    2,  102,    2,  103,    2,    2,    2,
    144      2,    2,    2,  104,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
    145      2,  105,  105,  106,  107,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    146    105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    147    105,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,
    148      0,    2,    2,    2,    2,    2,    0,    0,    0,    0,    0,    0,    0,    0,    3,    4,
    149      0,    5,    0,    0,    0,    0,    0,    6,    0,    0,    7,    0,    0,    0,    0,    0,
    150      0,    0,    0,    0,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    151      8,    9,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    2,
    152      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   10,   11,
    153     11,   11,   11,    0,    0,    0,    9,   12,    0,    2,    2,    2,    2,   13,   14,    0,
    154      0,   11,   15,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   16,   17,
    155     18,   19,   20,   21,   22,   16,   23,   24,   25,   12,   26,   27,   20,    2,    2,    2,
    156      2,    2,   20,    0,    2,    2,    2,    2,    2,    0,    2,    2,    2,    2,    2,    2,
    157      2,   28,   29,   30,    2,    2,    2,    9,   30,    9,   30,    2,    2,    2,    2,    2,
    158      2,    2,    2,    2,    2,    9,    2,    2,    2,    9,    9,    0,    2,    2,    0,   17,
    159     18,   19,   20,   31,   32,   33,   32,   34,    0,    0,    0,    0,   35,    0,    0,    2,
    160     30,    2,    0,    0,    0,    0,    0,    9,   36,   12,   15,   30,    2,    2,    9,    0,
    161     30,    9,    2,   30,    9,    2,    0,   37,   18,   19,   31,    0,   27,   38,   27,   39,
    162      0,   40,    0,    0,    0,   30,    2,    9,    9,    0,    0,    0,    2,    2,    2,    2,
    163      2,   41,   42,   43,    0,    0,    0,    0,    0,   12,   15,   30,    2,    2,    2,    2,
    164     30,    2,   30,    2,    2,    2,    2,    2,    2,    9,    2,   30,    2,    2,    0,   17,
    165     18,   19,   20,   21,   27,   22,   35,   24,    0,    0,    0,    0,    0,   30,   41,   41,
    166     44,   12,   29,   30,    2,    2,    2,    9,   30,    9,    2,   30,    2,    2,    0,   17,
    167     45,    0,    0,   27,   22,    0,    0,    2,   30,   30,    0,    0,    0,    0,    0,    0,
    168      0,    0,   46,   30,    2,    2,    9,    0,    2,    9,    2,    2,    0,   30,    9,    9,
    169      2,    0,   30,    9,    0,    2,    9,    0,    2,    2,    2,    2,    2,    2,    0,    0,
    170     23,   16,   47,    0,   48,   33,   48,   34,    0,    0,    0,    0,   35,    0,    0,    0,
    171      0,   15,   29,   49,    2,    2,    2,    9,    2,    9,    2,    2,    2,    2,    2,    2,
    172      2,    2,    2,    2,    2,    2,    0,   17,   22,   16,   23,   47,   22,   38,   22,   39,
    173      0,    0,    0,   27,   31,    2,    9,    0,    0,   10,   29,   30,    2,    2,    2,    9,
    174      2,    2,    2,   30,    2,    2,    0,   17,   45,    0,    0,   35,   47,    0,    0,    0,
    175      9,   50,   51,    0,    0,    0,    0,    0,    0,   11,   29,    2,    2,    2,    2,    9,
    176      2,    2,    2,    2,    2,    2,   52,   53,   23,   19,   20,   31,   48,   33,   48,   34,
    177     54,    0,    0,    0,   35,    0,    0,    0,   30,   12,   29,   30,    2,    2,    2,    2,
    178      2,    2,    2,    2,    9,    0,    2,    2,    2,    2,   30,    2,    2,    2,    2,   30,
    179      0,    2,    2,    2,    9,    0,   55,    0,   35,   23,   22,   31,   31,   18,   48,   48,
    180     25,    0,   23,    0,    0,    0,    0,    0,    0,    2,    0,    2,    9,    0,    0,    0,
    181      0,    0,    0,    0,    0,   20,    0,    0,    0,    2,    2,   56,   56,   57,    0,    0,
    182     18,    2,    2,    2,    2,   30,    2,    2,    2,    2,    2,    2,    2,    2,    2,    9,
    183      0,   58,   21,   59,   22,   22,   20,   20,   46,   21,   11,   31,   11,    2,    2,   60,
    184     61,   61,   61,   61,   61,   62,   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
    185     61,   61,   61,   61,   61,   61,   61,   63,    0,    0,    0,    0,   64,    0,    0,    0,
    186      0,    2,    2,    2,    2,    2,   65,   45,   59,   66,   22,   22,   67,   68,   69,   70,
    187     71,    2,    2,    2,    2,    2,    1,    0,    5,    2,    2,    2,   23,   20,    2,    2,
    188     72,   71,   73,   74,   65,   73,   29,   29,    2,   52,   22,   53,    2,    2,    2,    2,
    189      2,    2,   75,   76,   77,   29,   29,   78,   79,    2,    2,    2,    2,    2,   29,   45,
    190      0,    2,   59,   80,    0,    0,    0,    0,   30,    2,   59,   47,    0,    0,    0,    0,
    191      0,    2,   59,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,    9,
    192      2,    9,   59,    0,    0,    0,    0,    0,    0,    2,    2,   81,   45,   22,   59,   20,
    193     48,   48,   48,   48,   15,   82,   83,   84,   85,   86,   87,    0,    0,    0,    0,   88,
    194      0,    9,    0,    0,   30,    0,   89,   81,   90,    2,    2,    2,    2,    9,    0,    0,
    195      0,   42,   42,   91,   92,    2,    2,    2,    2,    2,    2,    2,    2,   13,    9,    0,
    196      0,    2,    2,    2,    2,    2,    2,    2,    9,   22,   80,   45,   22,   93,   61,    0,
    197      0,   94,   95,   94,   94,   96,   97,    0,    0,    2,    2,    2,    2,    2,    2,    2,
    198      0,    2,    2,    9,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,    0,
    199      0,    2,    2,    2,    2,   29,    0,    0,    0,    2,    2,    2,    2,    2,    9,    0,
    200      0,    2,    2,    2,   52,   98,   45,    0,    0,    2,    2,   99,  100,  101,  102,   61,
    201     63,  103,   16,   45,   22,   59,   21,   80,   48,   48,   76,   11,   11,   11,  104,   46,
    202     40,   11,  105,   74,    2,    2,    2,    2,    2,    2,    2,  106,   22,   20,   20,   22,
    203     48,   48,   22,  107,    2,    2,    2,    9,    0,    0,    0,    0,    0,    0,  108,  109,
    204    109,  109,  109,    0,    0,    0,    0,    0,    0,  105,   74,    2,    2,    2,    2,    2,
    205      2,   60,   61,   59,   25,   22,  110,   61,    2,    2,    2,    2,  106,   22,   23,   45,
    206     45,  101,  111,    0,    0,    0,    0,    0,    0,    2,    2,   61,   18,   48,   23,  112,
    207    101,  101,  101,  113,  114,    0,    0,    0,    0,    2,    2,    2,    2,    2,    0,   30,
    208      2,   11,   46,  115,  115,  115,   11,  115,  115,   15,  115,  115,  115,   26,    0,   40,
    209      0,    0,    0,  116,   51,   11,    5,    0,    0,    0,    0,    0,    0,    0,  117,    0,
    210      0,    0,    0,    0,    0,    0,    6,  118,  119,   42,   42,    5,    0,    0,    0,    0,
    211      0,    0,    0,    0,    0,    0,  119,  119,  120,  119,  119,  119,  119,  119,  119,  119,
    212    119,    0,    0,  121,    0,    0,    0,    0,    0,    0,    7,  121,    0,    0,    0,    0,
    213      0,   46,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
    214      0,    0,    0,    0,  122,  122,    0,    0,    0,    2,    2,    2,    2,    0,    0,    0,
    215     30,    0,    0,    0,    0,    0,    0,    0,  123,    0,  122,  122,    0,    0,    0,    0,
    216      0,    2,   53,    2,  107,    2,   10,    2,    2,    2,   65,   19,   16,    0,    0,   31,
    217      0,    2,    2,    0,    0,    0,    0,    0,    0,   29,    2,    2,    2,    2,    2,    2,
    218      2,    2,    2,  124,   23,   23,   23,   23,   23,   23,   23,  125,    0,    0,    0,    0,
    219      0,   11,   11,   11,   11,   11,   11,   11,   11,   11,    2,    0,    0,    0,    0,    0,
    220     52,    2,    2,    2,   22,   22,  126,  115,    0,    2,    2,    2,  127,   20,   59,   20,
    221    112,  101,  128,    0,    0,    0,    0,    0,    0,   11,  129,    2,    2,    2,    2,    2,
    222      2,    2,  130,   23,   22,   20,   48,  131,  132,  133,    0,    0,    0,    0,    0,    0,
    223      0,    2,    2,   52,   30,    2,    2,    2,    2,    2,    2,    2,    2,   10,   22,   59,
    224     98,   76,  134,  135,  136,    0,    0,    0,    0,    2,  137,    2,    2,    2,    2,  138,
    225      0,   30,    2,   42,    5,    0,   79,   15,    2,  139,   20,   53,  127,  139,    2,    2,
    226    140,   10,    9,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,  141,   21,
    227     25,    0,    0,  142,  143,    0,    0,    0,    0,    2,   65,   45,   23,   80,   47,  144,
    228      0,   81,   81,   81,   81,   81,   81,   81,   81,    0,    0,    0,    0,    0,    0,    0,
    229      6,  119,  119,  119,  119,  120,    0,    0,    0,    2,    2,    2,    2,    2,    9,    2,
    230      2,    2,    9,    2,   30,    2,    2,    2,    2,    2,   30,    2,    2,    2,   30,    9,
    231      0,  127,   20,   27,   31,    0,    0,  145,  146,    2,    2,   30,    2,   30,    2,    2,
    232      2,    2,    2,    2,    0,   14,   37,    0,  147,    2,    2,   13,   37,    0,   30,    2,
    233      2,    2,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   30,    2,    2,
    234      9,    2,    2,   11,   41,    0,    0,    0,    0,    2,    2,    2,    0,   27,   22,   22,
    235     30,    2,    2,    2,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,   27,   38,
    236      0,    2,    2,    2,  115,  115,  115,  115,  115,  148,    2,    9,    0,    0,    0,    0,
    237      0,    2,   14,   14,    0,    0,    0,    0,    0,    9,    2,    2,    9,    2,    2,    2,
    238      2,   30,    2,    9,    0,   30,    2,    0,    0,  149,  150,  151,    2,    2,    2,    2,
    239      2,    2,    2,    2,    2,   22,   22,   20,   20,   20,   22,   22,  133,    0,    0,    0,
    240      0,    0,  152,  152,  152,  152,  152,  152,  152,  152,  152,  152,    2,    2,    2,    2,
    241      2,   53,   52,   53,    0,    0,    0,    0,  153,   11,   74,    2,    2,    2,    2,    2,
    242      2,   18,   19,   21,   16,   24,   37,    0,    0,    0,   31,    0,    0,    0,    0,    0,
    243      0,   11,   49,    2,    2,    2,    2,    2,    2,    2,    2,    2,  127,   20,   22,  154,
    244     22,   21,  155,  156,    2,    2,    2,    2,    2,    0,    0,   65,  157,    0,    0,    0,
    245      0,    2,   13,    0,    0,    0,    0,    0,    0,    2,   65,   25,   20,   20,   20,   22,
    246     22,  107,  158,    0,    0,   56,  159,   31,  160,   30,    2,    2,    2,    2,    2,    2,
    247      2,    2,    2,    2,    2,    2,    2,   23,   19,   22,   22,  161,   44,    0,    0,    0,
    248     49,  127,    0,    0,    0,    0,    0,    0,    0,    2,    2,    2,    9,    9,    2,    2,
    249     30,    2,    2,    2,    2,    2,    2,    2,   30,    2,    2,    2,    2,    2,    2,    2,
    250     10,   18,   19,   21,   22,  162,   31,    0,    0,   11,   11,   30,    2,    2,    2,    9,
    251     30,    9,    2,   30,    2,    2,   58,   17,   23,   16,   23,   47,   32,   33,   32,   34,
    252      0,    0,    0,    0,   35,    0,    0,    0,    2,    2,   23,    0,   11,   11,   11,   46,
    253      0,   11,   11,   46,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,   30,    0,
    254      9,    2,    2,    2,   30,   45,   59,   20,   20,   31,   33,   32,   32,   25,  163,   29,
    255    164,  165,   37,    0,    0,    0,    0,    0,    0,   12,   26,    0,    0,    0,    0,    0,
    256      0,    2,    2,   65,   25,   20,   20,   20,   22,   23,  125,   15,   17,    0,    0,    0,
    257      0,    2,    2,    2,    2,    2,    0,    0,  166,  167,    0,    0,    0,    0,    0,    0,
    258      0,   18,   19,   20,   20,   66,   98,   25,  160,   11,  168,    9,    0,    0,    0,    0,
    259      0,    2,    2,    2,    2,    2,    2,    2,   65,   25,   20,   20,    0,   48,   48,   11,
    260    169,   37,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    2,   20,
    261      0,   23,   19,   20,   20,   21,   16,   82,  169,   38,    0,    0,    0,    0,    0,    0,
    262      0,    2,    2,    2,    2,    2,   10,  170,   25,   20,   22,   22,  168,    9,    0,    0,
    263      0,    2,    2,    2,    2,    2,    9,   43,  135,   23,   22,   20,   76,   21,   22,    0,
    264      0,    2,    2,    2,    9,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,   18,
    265     19,   20,   21,   22,  104,  169,   37,    0,    0,    2,    2,    2,    9,   30,    0,    2,
    266      2,    2,    2,   30,    9,    2,    2,    2,    2,   23,   23,   18,   32,   33,   12,  171,
    267    165,  172,  173,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    0,    2,    2,
    268      2,   65,   25,   20,   20,    0,   22,   23,   29,  107,    0,   33,    0,    0,    0,    0,
    269      0,   52,   20,   22,   22,   22,  139,    2,    2,    2,  174,  140,   11,   15,  175,   61,
    270    176,    0,    0,    1,  147,    0,    0,    0,    0,   52,   20,   22,   16,   19,   20,    2,
    271      2,    2,    2,  158,  158,  158,  177,  177,  177,  177,  177,  177,   15,  178,    0,   30,
    272      0,   16,   20,   16,   16,    0,    0,    0,    0,   22,   20,   20,   31,   22,   22,   11,
    273    169,    0,   61,   61,   61,   61,   61,   61,   61,   66,   21,   82,   46,    0,    0,    0,
    274      0,    2,    2,    2,    9,    2,   30,    2,    2,   52,   22,   22,   31,    0,   38,   22,
    275     27,   11,  159,  179,  180,    0,    0,    0,    0,    2,    2,    2,   30,    9,    2,    2,
    276      2,    2,    2,    2,    2,    2,   23,   23,   47,   22,   35,   82,   68,    0,    0,    0,
    277      0,    2,  181,   66,   47,    0,    0,    0,    0,   11,  182,    2,    2,    2,    2,    2,
    278      2,    2,    2,   23,   22,   20,   31,    0,   48,   16,  143,    0,    0,    0,    0,    0,
    279      0,    2,    2,    2,    2,    2,  156,    0,    0,  183,  183,  183,  183,  183,  183,  183,
    280    183,  184,  184,  184,  185,  186,  184,  183,  183,  187,  183,  183,  188,  189,  189,  189,
    281    189,  189,  189,  189,    0,    0,    0,    0,    0,  183,  183,  183,  183,  183,  190,    0,
    282      0,    2,    2,    2,    2,    2,    2,    2,   22,   22,   22,   22,   22,   22,  191,  192,
    283    193,   11,   11,   11,   46,    0,    0,    0,    0,   29,   74,    2,    2,    2,    2,    2,
    284      2,    2,    2,    2,    2,    2,   65,   47,    0,    2,    2,    2,    2,    2,    9,    0,
    285     58,  194,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
    286     20,   20,   20,   20,   20,    0,    0,    0,   40,  115,   26,    0,    0,    0,    0,    0,
    287      0,    0,    0,    9,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    288     30,    2,    2,    2,    2,    2,    0,   58,   37,    0,    6,  119,  119,  119,  120,    0,
    289      0,   11,   11,   11,   49,    2,    2,    2,    0,    2,    2,    2,    2,    2,    0,    0,
    290      2,    2,    2,    2,    2,    2,    2,    2,   46,    2,    2,    2,    2,    2,    2,   11,
    291     11,    2,    2,    2,    2,    2,    2,   22,   22,    2,    2,    2,    2,    2,    2,    2,
    292     20,    2,    2,   44,   44,   44,   92,    0,    0,    O,    O,    O,   GB,    B,    B,    O,
    293     SB,    O,   SE,   GB,    O,    O,   WJ,FMPst,FMPst,    O,  CGJ,    B,    O,    B,VMAbv,VMAbv,
    294  VMAbv,    O,VMAbv,    B,CMBlw,CMBlw,CMBlw,VMAbv,VMPst, VAbv, VPst,CMBlw,    B, VPst, VPre, VPst,
    295   VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VPst, VPst, VPst,    H, VPre, VPst,VMBlw,    O,    O,
    296   VAbv,   GB,VMAbv,VMPst,VMPst,    O,    B, VBlw,    O,    O, VPre, VPre,    O, VPre,    H,    O,
    297   VPst,FMAbv,    O,CMBlw,    O, VAbv,    O, VAbv,    H,    O,VMBlw,VMAbv,CMAbv,   GB,   GB,    O,
    298   MBlw,CMAbv,CMAbv, VPst, VAbv,VMAbv,    O, VPst,    O, VPre, VPre,VMAbv,    B,    O,   CS,   CS,
    299  VMPst,    B, VAbv, VAbv,    B,    R,    O,  HVM,    O,    O,FMBlw,    O,CMAbv,    O,CMBlw, VAbv,
    300   VBlw,    B,  SUB,  SUB,  SUB,    O,  SUB,  SUB,    O,FMBlw,    O,    B, VPst, VBlw, VPre,VMAbv,
    301  VMBlw,VMPst,   IS, VAbv, MPst, MPre, MBlw, MBlw,    B, MBlw, MBlw, VPst,VMPst,VMPst,    B, MBlw,
    302   VPst, VPre, VAbv, VAbv,VMPst,VMPst,VMBlw,    B,VMPst, VBlw, VPst,  CGJ,  CGJ, VPst,VMAbv,VMAbv,
    303  FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv,   IS,FMAbv,    B,FMAbv,    B,  CGJ,   WJ,  CGJ,   GB,
    304  CMAbv,CMAbv,    B, VAbv,  SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre,    B,
    305   MPre, MBlw,  SUB, FAbv, FAbv, MAbv,  SUB,   Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst,    H,
    306      B,    O,SMAbv,SMAbv,SMAbv, VPst,   IS,   RK,   RK, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,
    307  VMBlw,VMAbv,   CS,    O,FMAbv, ZWNJ,  CGJ,   WJ,   WJ,   WJ,    O,FMPst,    O,   SB,   SE,    O,
    308      H, MPst, VPst,    H,VMAbv, VAbv,VMBlw,    B, VBlw, FPst, VPst, FAbv,VMPst,    B,CMAbv, VAbv,
    309   MBlw, MPst, MBlw,    H,    O, VBlw, MPst, MPre, MAbv, MBlw,    O,    B, FAbv, FAbv, FPst, VBlw,
    310      B, VBlw,VMAbv,    B, VPre,    O,VMPst,   IS,    O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv,    O,
    311     IS,VMBlw,    B,VMPst,VMAbv,VMPst,   CS,   CS,    B,    N,    N,    O,   HN, VPre, VBlw, VAbv,
    312     IS,CMAbv,    O, VPst,    B,    R,    R,CMBlw, VAbv, VPre,VMAbv,VMAbv,    H, VAbv,CMBlw,VMPst,
    313      O,VMAbv,CMBlw,   IS,    R,FMAbv,    B,   CS,   CS,    H,CMBlw,VMPst,    H,VMPst, VAbv,VMAbv,
    314   VPst, MPst,    R, MPst,CMBlw,    B,FMBlw,   CS,  SUB,  SUB,   GB, FBlw, FBlw,CMAbv,   IS, VBlw,
    315     IS,    R, MBlw,   GB, VAbv,    R,VMPst,    G,    G,    J,    J,    J,   SB,   SE,    J,   HR,
    316      G,    G,   HM,   HM,   HM,    G,    O, MPre, MPre, MPst,VMAbv, MBlw, VBlw,    O, VBlw,
    317 };
    318 static const uint16_t hb_use_u16[864]=
    319 {
    320    0,  0,  1,  2,  0,  3,  0,  3,  0,  0,  4,  5,  0,  6,  0,  0,
    321    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,  0,  0,  0,
    322    0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  9, 10, 11, 12,
    323    0,  0,  0,  0, 10, 13,  0,  0, 14, 10, 10, 15, 16, 17, 18, 19,
    324   20, 21, 22, 23, 24, 25, 18, 26, 27, 21, 22, 28, 29, 30, 31, 32,
    325   33, 34, 22, 35, 36,  0, 18, 37, 38, 21, 22, 39, 24, 40, 18, 41,
    326   42, 43, 44, 45, 46, 47, 31,  0, 48, 49, 22, 50, 51, 52, 18,  0,
    327   53, 49, 22, 54, 51, 55, 18, 56, 57, 49, 10, 58, 59, 60, 18,  0,
    328   61, 62, 10, 63, 64, 65, 31, 66, 67, 68, 10, 69, 70, 10, 71, 72,
    329   73, 74, 75, 76, 77,  0,  0,  0, 10, 10, 78, 79, 80, 81, 82, 83,
    330   84, 85,  0,  0,  0,  0,  0,  0, 10, 86, 10, 87, 10, 88, 89, 90,
    331   10, 10, 10, 91, 92, 93,  2,  0, 94,  0, 10, 10, 10, 10, 10, 95,
    332   96, 10, 97,  0,  0,  0,  0,  0, 10, 98, 99,100, 31, 10,101,102,
    333   10, 10,103, 10,104,105,  0,  0, 10,106, 10, 10, 10,107,108,109,
    334    2,  2,  0,  0,  0,  0,  0,  0,110, 10, 10,111,112,  2,113,114,
    335  115, 10,116, 10, 10, 10,117,118, 10, 10,119,120,121,  0,  0,  0,
    336    0,  0,  0,  0,  0,122,123,124,  0,  0,  0,  0,  0,  0,  0,125,
    337  126,127,128,  0,  0,  0,129,130,131,  0,  0,  0,  0,  0,  0,132,
    338    0,  0,  0,  0,133,  0,  0,  0,  0,  0,  0,  0,  0,  0,134,  0,
    339    0,  0,  0, 10, 10, 10,135,136,  0,  0,137,  0,  0,  0,  0,  0,
    340  138, 10,139,  0, 10, 10, 10,140,141, 10, 10,142,143,  2,144,145,
    341   10, 10,146, 10,147,148,  0,  0,149, 10, 10,150,151,  2,152, 98,
    342   10, 10,153,154,155,  2, 10,156, 10, 10, 10,157,158,  0,159,160,
    343    0,  0,  0,  0, 10, 10,161,  2,162,  0,  0,  0,  0,  0,  0,  0,
    344    0,  0,  0,  0,  0,  0,  0,163,  0,  0,  0,  0,  0,  0,  0,164,
    345    0,  0,  0,  0,  0,  0,  0,165,165,166, 34,167,  0,  0,  0,  0,
    346  168,169, 10,170, 95,  0,  0,  0,  0,  0,  0,  0, 70, 10,171,  0,
    347   10,172,173,  0,  0,  0,  0,  0, 10, 10,174,  2,  9, 10,175, 10,
    348  176,  0,  0,  0,  0,  0,  0,  0, 10, 10,177,172,  0,  0,  0,  0,
    349    0,  0,  0, 10,178,179,  0, 10,180,  0,  0,181,182,  0,  0,  0,
    350  183, 10, 10,184,185,186,187,188,189, 10, 10,190,191,  0,  0,  0,
    351  192, 10,193,194,195, 10, 10,196,189, 10, 10,197,198,105,199,102,
    352   10, 34,200,201,202,  0,  0,  0,203,204, 95, 10, 10,205,206,  2,
    353  207, 21, 22,208,209,210,211,212,213, 10, 10,214,215,216,217,  0,
    354   10, 10, 10,218,219,220,221,  0,199, 10, 10,222,223,  2,  0,  0,
    355   10, 10,224,225,226,227,  0,  0, 10, 10, 10,228,229,  2,  0,  0,
    356   10, 10,230,231,  2, 10,140,  0, 10,232,233,103,234,  0,  0,  0,
    357   10, 10,235,236,  0,  0,  0,  0,237,238, 10,239,240,  2,  0,  0,
    358    0,  0,241, 10, 10,242,243,  0,244, 10, 10,245,246,247, 10, 10,
    359  248,249,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,250,  0,
    360   22, 10,224,251,  8, 10, 71, 19, 10,252, 74,253,  0,  0,  0,  0,
    361  254, 10, 10,255,256,  2,257, 10,258,259,  2,  0,  0,  0,  0,  0,
    362    0,  0,  0,  0,  0,  0, 10,260,261, 49, 10,262,263,264,  0,  0,
    363  265,265,265,265,265,265,265,265,265,265,265,266,267,268,265,265,
    364  265,265,265,265,265,265,265,269, 10,270,271,  2,  0,  0,  0,  0,
    365    0,  0,  0,  0,  2,  0,  0,  0, 10, 10, 10,272,  0,  0,  0,  0,
    366    0,  0,  0,  0,273, 10,274,  2, 10, 10, 10, 10,275,276,277,277,
    367  278,279,  0,  0,  0,  0,280,  0, 10, 10, 10, 10, 10, 10, 10, 10,
    368   10, 10, 10, 10, 10,176,  0,281, 10, 10, 10, 10, 10, 10,105, 71,
    369   95,282,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,283,
    370   10, 10, 71,284,285,  0,  0,  0,  0, 10,286,  0, 10, 10,287,  2,
    371    0,  0,  0,  0,  0, 10,288,  2,  0,  0,  0,  0,  0, 10,289,105,
    372   10, 10, 10, 10,290,  2,  0,  0,129,129,129,129,129,129,129,129,
    373  162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,129,
    374 };
    375 
    376 static inline uint8_t hb_use_b4 (const uint8_t* a, unsigned i)
    377 {
    378  return (a[i>>1]>>((i&1)<<2))&15;
    379 }
    380 static inline uint8_t hb_use_get_category (unsigned u)
    381 {
    382  return u<921600 ? hb_use_u8[2953u+((hb_use_u8[625u+((hb_use_u16[((hb_use_u8[113u+((hb_use_b4(hb_use_u8,((((((((u)>>1))>>3))>>3))>>5)))<<5)+((((((((u)>>1))>>3))>>3))&31)])<<3)+((((((u)>>1))>>3))&7)])<<3)+((((u)>>1))&7)])<<1)+((u)&1)] : O;
    383 }
    384 
    385 
    386 #else
    387 
    388 #include <stdint.h>
    389 
    390 static const uint8_t hb_use_u8[3663]=
    391 {
    392     16,   50,   51,   51,   51,   52,   51,   83,  118,  131,   57,   58,   59,  195,  211,   62,
    393     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    394     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    395     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    396     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    397     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    398     51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
    399     15,    0,    1,    1,    2,    1,    1,    3,    4,    5,    6,    7,    8,    9,   10,    1,
    400     11,   12,    1,    1,    1,    1,    1,    1,   13,   14,   15,   16,   17,   18,   19,    1,
    401      1,   20,    1,    1,    1,    1,   21,    1,   22,    1,    1,    1,    1,    1,   23,   24,
    402      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    403      1,    1,    1,    1,    1,    1,    1,    1,    1,   25,   26,   27,   28,    1,    1,    1,
    404      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,   29,
    405     30,    1,    1,    1,    1,    1,   31,    1,    1,    1,    1,   32,   33,    1,   34,   35,
    406     36,   37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,   51,
    407     52,   53,   53,   53,   53,   54,   53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
    408     53,   53,   53,   53,   55,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    409      1,    1,   56,    1,    1,    1,    1,    1,    1,    1,    1,   57,   58,    1,   59,    1,
    410     60,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,   61,   62,    1,    1,
    411      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,   63,    1,    1,
    412      1,    1,   64,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    413      1,    1,   65,   66,    1,   67,   68,    1,    1,    1,   69,    1,    1,    1,    1,    1,
    414      1,   70,   71,   70,   70,   70,   70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
    415     70,    0,    1,    2,    2,    0,    3,    4,    0,    0,    0,    0,    0,    0,    0,    0,
    416      0,    0,    0,    5,    0,    0,    0,    0,    0,    0,    0,    6,    0,    0,    0,    0,
    417      0,    0,    0,    0,    0,    0,    0,    7,    8,    0,    0,    9,    0,    0,    0,    0,
    418      0,   10,   11,   12,   13,   14,   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
    419     25,   26,   27,   28,   29,   30,   31,   32,   33,   34,   35,   36,   37,   38,   39,   40,
    420     41,   42,   43,   44,   37,   45,   46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
    421      0,   56,   57,   58,   59,   60,    0,    0,    0,   61,   62,   63,   64,   56,   65,   66,
    422     67,   68,   56,   56,   69,   70,   71,    0,    0,   72,   73,   74,   75,   56,   76,   77,
    423      0,   78,   56,   79,   80,   81,    0,    0,    0,   82,   83,   84,   85,   86,   87,   56,
    424     88,   56,   89,   90,    0,    0,    0,   91,   92,    0,    0,    0,    0,    0,    0,    0,
    425     93,   94,   95,    0,   96,   97,    0,    0,   98,    0,    0,    0,    0,    0,    0,   99,
    426      0,    0,    0,    0,    0,    0,    0,    0,  100,    0,  101,   56,  102,    0,    0,    0,
    427      0,    0,  103,    0,    0,    0,    0,    0,    0,  104,  105,   56,  106,  107,  108,  109,
    428    110,   56,  111,  112,    0,  113,  114,  115,  116,   56,  117,  118,  119,   56,  120,  121,
    429    122,    0,    0,    0,    0,    0,    0,   56,  123,  124,    0,    0,    0,    0,    0,    0,
    430    125,    0,    0,    0,    0,    0,    0,    0,  126,    0,    0,    0,  127,  128,  129,    0,
    431      0,  130,  131,  132,    0,    0,    0,   51,  133,    0,    0,    0,    0,  134,  135,    0,
    432      0,   56,  136,    7,  137,  138,    0,    0,    0,    0,    0,    0,    0,   56,  139,    0,
    433      0,    0,  101,  140,  101,  141,  142,  143,    0,  144,  145,  146,  147,  148,  149,  150,
    434      0,  151,  152,  153,  154,  148,  155,  156,  157,  158,  159,  160,    0,  161,  162,  163,
    435    164,  165,  166,  167,  168,  169,  170,  171,  172,   56,  173,  174,  175,  176,  177,  178,
    436      0,    0,    0,    0,    0,   56,  179,  180,    0,   56,  181,  182,    0,   56,  183,  184,
    437    185,  186,  187,  188,    0,    0,    0,    0,    0,   56,  189,    0,    0,    0,    0,    0,
    438      0,  190,  191,  192,    0,    0,  193,  194,  195,  196,  197,  198,   56,  199,    0,    0,
    439      0,    0,    0,    0,  200,    0,    0,    0,    0,  201,  202,  203,  204,  205,  206,    0,
    440      0,  207,  208,  209,  210,  211,   67,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    441    212,  213,  214,  215,    0,    0,    0,    0,    0,  216,  216,  216,  216,  216,  216,  216,
    442    216,  216,  217,  218,  216,  216,  216,  216,  216,  216,  216,  216,  216,  216,  216,  216,
    443    219,  220,  221,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   67,
    444      0,   56,  222,    0,    0,    0,    0,    0,    0,    0,    0,  223,  224,    0,    0,    0,
    445      0,   56,   56,  225,  226,  227,    0,    0,  228,   56,   56,   56,   56,   56,   56,   56,
    446     56,   56,   56,   56,   56,   56,   56,  229,  230,   56,   56,   56,  231,  232,    0,    0,
    447      0,    0,    0,    0,  233,    0,    0,    0,    0,   56,  234,  235,    0,    0,    0,    0,
    448      0,    0,    0,    0,    0,  101,  236,   56,  237,    0,    0,    0,    0,    0,    0,  101,
    449    238,    0,    0,    0,    0,    0,    0,  101,  239,   56,   56,  240,    0,    0,    0,    0,
    450      0,  241,  241,  241,  241,  241,  241,  241,  241,  242,  242,  242,  242,  242,  242,  242,
    451    243,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,
    452      0,    2,    2,    2,    2,    2,    0,    0,    0,    0,    0,    0,    0,    0,    3,    4,
    453      0,    5,    0,    0,    0,    0,    0,    6,    0,    0,    7,    0,    0,    0,    0,    0,
    454      0,    0,    0,    0,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    455      8,    9,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    2,
    456      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   10,   11,
    457     11,   11,   11,    0,    0,    0,    9,   12,    0,    2,    2,    2,    2,   13,   14,    0,
    458      0,   11,   15,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   16,   17,
    459     18,   19,   20,   21,   22,   16,   23,   24,   25,   12,   26,   27,   20,    2,    2,    2,
    460      2,    2,   20,    0,    2,    2,    2,    2,    2,    0,    2,    2,    2,    2,    2,    2,
    461      2,   28,   29,   30,    2,    2,    2,    9,   30,    9,   30,    2,    2,    2,    2,    2,
    462      2,    2,    2,    2,    2,    9,    2,    2,    2,    9,    9,    0,    2,    2,    0,   17,
    463     18,   19,   20,   31,   32,   33,   32,   34,    0,    0,    0,    0,   35,    0,    0,    2,
    464     30,    2,    0,    0,    0,    0,    0,    9,   36,   12,   15,   30,    2,    2,    9,    0,
    465     30,    9,    2,   30,    9,    2,    0,   37,   18,   19,   31,    0,   27,   38,   27,   39,
    466      0,   40,    0,    0,    0,   30,    2,    9,    9,    0,    0,    0,    2,    2,    2,    2,
    467      2,   41,   42,   43,    0,    0,    0,    0,    0,   12,   15,   30,    2,    2,    2,    2,
    468     30,    2,   30,    2,    2,    2,    2,    2,    2,    9,    2,   30,    2,    2,    0,   17,
    469     18,   19,   20,   21,   27,   22,   35,   24,    0,    0,    0,    0,    0,   30,   41,   41,
    470     44,   12,   29,   30,    2,    2,    2,    9,   30,    9,    2,   30,    2,    2,    0,   17,
    471     45,    0,    0,   27,   22,    0,    0,    2,   30,   30,    0,    0,    0,    0,    0,    0,
    472      0,    0,   46,   30,    2,    2,    9,    0,    2,    9,    2,    2,    0,   30,    9,    9,
    473      2,    0,   30,    9,    0,    2,    9,    0,    2,    2,    2,    2,    2,    2,    0,    0,
    474     23,   16,   47,    0,   48,   33,   48,   34,    0,    0,    0,    0,   35,    0,    0,    0,
    475      0,   15,   29,   49,    2,    2,    2,    9,    2,    9,    2,    2,    2,    2,    2,    2,
    476      2,    2,    2,    2,    2,    2,    0,   17,   22,   16,   23,   47,   22,   38,   22,   39,
    477      0,    0,    0,   27,   31,    2,    9,    0,    0,   10,   29,   30,    2,    2,    2,    9,
    478      2,    2,    2,   30,    2,    2,    0,   17,   45,    0,    0,   35,   47,    0,    0,    0,
    479      9,   50,   51,    0,    0,    0,    0,    0,    0,   11,   29,    2,    2,    2,    2,    9,
    480      2,    2,    2,    2,    2,    2,   52,   53,   23,   19,   20,   31,   48,   33,   48,   34,
    481     54,    0,    0,    0,   35,    0,    0,    0,   30,   12,   29,   30,    2,    2,    2,    2,
    482      2,    2,    2,    2,    9,    0,    2,    2,    2,    2,   30,    2,    2,    2,    2,   30,
    483      0,    2,    2,    2,    9,    0,   55,    0,   35,   23,   22,   31,   31,   18,   48,   48,
    484     25,    0,   23,    0,    0,    0,    0,    0,    0,    2,    0,    2,    9,    0,    0,    0,
    485      0,    0,    0,    0,    0,   20,    0,    0,    0,    2,    2,   56,   56,   57,    0,    0,
    486     18,    2,    2,    2,    2,   30,    2,    2,    2,    2,    2,    2,    2,    2,    2,    9,
    487      0,   58,   21,   59,   22,   22,   20,   20,   46,   21,   11,   31,   11,    2,    2,   60,
    488     61,   61,   61,   61,   61,   62,   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
    489     61,   61,   61,   61,   61,   61,   61,   63,    0,    0,    0,    0,   64,    0,    0,    0,
    490      0,    2,    2,    2,    2,    2,   65,   45,   59,   66,   22,   22,   67,   68,   69,   70,
    491     71,    2,    2,    2,    2,    2,    1,    0,    5,    2,    2,    2,   23,   20,    2,    2,
    492     72,   71,   73,   74,   65,   73,   29,   29,    2,   52,   22,   53,    2,    2,    2,    2,
    493      2,    2,   75,   76,   77,   29,   29,   78,   79,    2,    2,    2,    2,    2,   29,   45,
    494      0,    2,   59,   80,    0,    0,    0,    0,   30,    2,   59,   47,    0,    0,    0,    0,
    495      0,    2,   59,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,    9,
    496      2,    9,   59,    0,    0,    0,    0,    0,    0,    2,    2,   81,   45,   22,   59,   20,
    497     48,   48,   48,   48,   15,   82,   83,   84,   85,   86,   87,    0,    0,    0,    0,   88,
    498      0,    9,    0,    0,   30,    0,   89,   81,   90,    2,    2,    2,    2,    9,    0,    0,
    499      0,   42,   42,   91,   92,    2,    2,    2,    2,    2,    2,    2,    2,   13,    9,    0,
    500      0,    2,    2,    2,    2,    2,    2,    2,    9,   22,   80,   45,   22,   93,   61,    0,
    501      0,   94,   95,   94,   94,   96,   97,    0,    0,    2,    2,    2,    2,    2,    2,    2,
    502      0,    2,    2,    9,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,    0,
    503      0,    2,    2,    2,    2,   29,    0,    0,    0,    2,    2,    2,    2,    2,    9,    0,
    504      0,    2,    2,    2,   52,   98,   45,    0,    0,    2,    2,   99,  100,  101,  102,   61,
    505     63,  103,   16,   45,   22,   59,   21,   80,   48,   48,   76,   11,   11,   11,  104,   46,
    506     40,   11,  105,   74,    2,    2,    2,    2,    2,    2,    2,  106,   22,   20,   20,   22,
    507     48,   48,   22,  107,    2,    2,    2,    9,    0,    0,    0,    0,    0,    0,  108,  109,
    508    109,  109,  109,    0,    0,    0,    0,    0,    0,  105,   74,    2,    2,    2,    2,    2,
    509      2,   60,   61,   59,   25,   22,  110,   61,    2,    2,    2,    2,  106,   22,   23,   45,
    510     45,  101,  111,    0,    0,    0,    0,    0,    0,    2,    2,   61,   18,   48,   23,  112,
    511    101,  101,  101,  113,  114,    0,    0,    0,    0,    2,    2,    2,    2,    2,    0,   30,
    512      2,   11,   46,  115,  115,  115,   11,  115,  115,   15,  115,  115,  115,   26,    0,   40,
    513      0,    0,    0,  116,   51,   11,    5,    0,    0,    0,    0,    0,    0,    0,  117,    0,
    514      0,    0,    0,    0,    0,    0,    6,  118,  119,   42,   42,    5,    0,    0,    0,    0,
    515      0,    0,    0,    0,    0,    0,  119,  119,  120,  119,  119,  119,  119,  119,  119,  119,
    516    119,    0,    0,  121,    0,    0,    0,    0,    0,    0,    7,  121,    0,    0,    0,    0,
    517      0,   46,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
    518      0,    0,    0,    0,  122,  122,    0,    0,    0,    2,    2,    2,    2,    0,    0,    0,
    519     30,    0,    0,    0,    0,    0,    0,    0,  123,    0,  122,  122,    0,    0,    0,    0,
    520      0,    2,   53,    2,  107,    2,   10,    2,    2,    2,   65,   19,   16,    0,    0,   31,
    521      0,    2,    2,    0,    0,    0,    0,    0,    0,   29,    2,    2,    2,    2,    2,    2,
    522      2,    2,    2,  124,   23,   23,   23,   23,   23,   23,   23,  125,    0,    0,    0,    0,
    523      0,   11,   11,   11,   11,   11,   11,   11,   11,   11,    2,    0,    0,    0,    0,    0,
    524     52,    2,    2,    2,   22,   22,  126,  115,    0,    2,    2,    2,  127,   20,   59,   20,
    525    112,  101,  128,    0,    0,    0,    0,    0,    0,   11,  129,    2,    2,    2,    2,    2,
    526      2,    2,  130,   23,   22,   20,   48,  131,  132,  133,    0,    0,    0,    0,    0,    0,
    527      0,    2,    2,   52,   30,    2,    2,    2,    2,    2,    2,    2,    2,   10,   22,   59,
    528     98,   76,  134,  135,  136,    0,    0,    0,    0,    2,  137,    2,    2,    2,    2,  138,
    529      0,   30,    2,   42,    5,    0,   79,   15,    2,  139,   20,   53,  127,  139,    2,    2,
    530    140,   10,    9,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,  141,   21,
    531     25,    0,    0,  142,  143,    0,    0,    0,    0,    2,   65,   45,   23,   80,   47,  144,
    532      0,   81,   81,   81,   81,   81,   81,   81,   81,    0,    0,    0,    0,    0,    0,    0,
    533      6,  119,  119,  119,  119,  120,    0,    0,    0,    2,    2,    2,    2,    2,    9,    2,
    534      2,    2,    9,    2,   30,    2,    2,    2,    2,    2,   30,    2,    2,    2,   30,    9,
    535      0,  127,   20,   27,   31,    0,    0,  145,  146,    2,    2,   30,    2,   30,    2,    2,
    536      2,    2,    2,    2,    0,   14,   37,    0,  147,    2,    2,   13,   37,    0,   30,    2,
    537      2,    2,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   30,    2,    2,
    538      9,    2,    2,   11,   41,    0,    0,    0,    0,    2,    2,    2,    0,   27,   22,   22,
    539     30,    2,    2,    2,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,   27,   38,
    540      0,    2,    2,    2,  115,  115,  115,  115,  115,  148,    2,    9,    0,    0,    0,    0,
    541      0,    2,   14,   14,    0,    0,    0,    0,    0,    9,    2,    2,    9,    2,    2,    2,
    542      2,   30,    2,    9,    0,   30,    2,    0,    0,  149,  150,  151,    2,    2,    2,    2,
    543      2,    2,    2,    2,    2,   22,   22,   20,   20,   20,   22,   22,  133,    0,    0,    0,
    544      0,    0,  152,  152,  152,  152,  152,  152,  152,  152,  152,  152,    2,    2,    2,    2,
    545      2,   53,   52,   53,    0,    0,    0,    0,  153,   11,   74,    2,    2,    2,    2,    2,
    546      2,   18,   19,   21,   16,   24,   37,    0,    0,    0,   31,    0,    0,    0,    0,    0,
    547      0,   11,   49,    2,    2,    2,    2,    2,    2,    2,    2,    2,  127,   20,   22,  154,
    548     22,   21,  155,  156,    2,    2,    2,    2,    2,    0,    0,   65,  157,    0,    0,    0,
    549      0,    2,   13,    0,    0,    0,    0,    0,    0,    2,   65,   25,   20,   20,   20,   22,
    550     22,  107,  158,    0,    0,   56,  159,   31,  160,   30,    2,    2,    2,    2,    2,    2,
    551      2,    2,    2,    2,    2,    2,    2,   23,   19,   22,   22,  161,   44,    0,    0,    0,
    552     49,  127,    0,    0,    0,    0,    0,    0,    0,    2,    2,    2,    9,    9,    2,    2,
    553     30,    2,    2,    2,    2,    2,    2,    2,   30,    2,    2,    2,    2,    2,    2,    2,
    554     10,   18,   19,   21,   22,  162,   31,    0,    0,   11,   11,   30,    2,    2,    2,    9,
    555     30,    9,    2,   30,    2,    2,   58,   17,   23,   16,   23,   47,   32,   33,   32,   34,
    556      0,    0,    0,    0,   35,    0,    0,    0,    2,    2,   23,    0,   11,   11,   11,   46,
    557      0,   11,   11,   46,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,   30,    0,
    558      9,    2,    2,    2,   30,   45,   59,   20,   20,   31,   33,   32,   32,   25,  163,   29,
    559    164,  165,   37,    0,    0,    0,    0,    0,    0,   12,   26,    0,    0,    0,    0,    0,
    560      0,    2,    2,   65,   25,   20,   20,   20,   22,   23,  125,   15,   17,    0,    0,    0,
    561      0,    2,    2,    2,    2,    2,    0,    0,  166,  167,    0,    0,    0,    0,    0,    0,
    562      0,   18,   19,   20,   20,   66,   98,   25,  160,   11,  168,    9,    0,    0,    0,    0,
    563      0,    2,    2,    2,    2,    2,    2,    2,   65,   25,   20,   20,    0,   48,   48,   11,
    564    169,   37,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    2,   20,
    565      0,   23,   19,   20,   20,   21,   16,   82,  169,   38,    0,    0,    0,    0,    0,    0,
    566      0,    2,    2,    2,    2,    2,   10,  170,   25,   20,   22,   22,  168,    9,    0,    0,
    567      0,    2,    2,    2,    2,    2,    9,   43,  135,   23,   22,   20,   76,   21,   22,    0,
    568      0,    2,    2,    2,    9,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,   18,
    569     19,   20,   21,   22,  104,  169,   37,    0,    0,    2,    2,    2,    9,   30,    0,    2,
    570      2,    2,    2,   30,    9,    2,    2,    2,    2,   23,   23,   18,   32,   33,   12,  171,
    571    165,  172,  173,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    0,    2,    2,
    572      2,   65,   25,   20,   20,    0,   22,   23,   29,  107,    0,   33,    0,    0,    0,    0,
    573      0,   52,   20,   22,   22,   22,  139,    2,    2,    2,  174,  140,   11,   15,  175,   61,
    574    176,    0,    0,    1,  147,    0,    0,    0,    0,   52,   20,   22,   16,   19,   20,    2,
    575      2,    2,    2,  158,  158,  158,  177,  177,  177,  177,  177,  177,   15,  178,    0,   30,
    576      0,   16,   20,   16,   16,    0,    0,    0,    0,   22,   20,   20,   31,   22,   22,   11,
    577    169,    0,   61,   61,   61,   61,   61,   61,   61,   66,   21,   82,   46,    0,    0,    0,
    578      0,    2,    2,    2,    9,    2,   30,    2,    2,   52,   22,   22,   31,    0,   38,   22,
    579     27,   11,  159,  179,  180,    0,    0,    0,    0,    2,    2,    2,   30,    9,    2,    2,
    580      2,    2,    2,    2,    2,    2,   23,   23,   47,   22,   35,   82,   68,    0,    0,    0,
    581      0,    2,  181,   66,   47,    0,    0,    0,    0,   11,  182,    2,    2,    2,    2,    2,
    582      2,    2,    2,   23,   22,   20,   31,    0,   48,   16,  143,    0,    0,    0,    0,    0,
    583      0,    2,    2,    2,    2,    2,  156,    0,    0,  183,  183,  183,  183,  183,  183,  183,
    584    183,  184,  184,  184,  185,  186,  184,  183,  183,  187,  183,  183,  188,  189,  189,  189,
    585    189,  189,  189,  189,    0,    0,    0,    0,    0,  183,  183,  183,  183,  183,  190,    0,
    586      0,    2,    2,    2,    2,    2,    2,    2,   22,   22,   22,   22,   22,   22,  191,  192,
    587    193,   11,   11,   11,   46,    0,    0,    0,    0,   29,   74,    2,    2,    2,    2,    2,
    588      2,    2,    2,    2,    2,    2,   65,   47,    0,    2,    2,    2,    2,    2,    9,    0,
    589     58,  194,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
    590     20,   20,   20,   20,   20,    0,    0,    0,   40,  115,   26,    0,    0,    0,    0,    0,
    591      0,    0,    0,    9,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    592     30,    2,    2,    2,    2,    2,    0,   58,   37,    0,    6,  119,  119,  119,  120,    0,
    593      0,   11,   11,   11,   49,    2,    2,    2,    0,    2,    2,    2,    2,    2,    0,    0,
    594      2,    2,    2,    2,    2,    2,    2,    2,   46,    2,    2,    2,    2,    2,    2,   11,
    595     11,    2,    2,    2,    2,    2,    2,   22,   22,    2,    2,    2,    2,    2,    2,    2,
    596     20,    2,    2,   44,   44,   44,   92,    0,    0,    O,    O,    O,   GB,    B,    B,    O,
    597     SB,    O,   SE,   GB,    O,    O,   WJ,FMPst,FMPst,    O,  CGJ,    B,    O,    B,VMAbv,VMAbv,
    598  VMAbv,    O,VMAbv,    B,CMBlw,CMBlw,CMBlw,VMAbv,VMPst, VAbv, VPst,CMBlw,    B, VPst, VPre, VPst,
    599   VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VPst, VPst, VPst,    H, VPre, VPst,VMBlw,    O,    O,
    600   VAbv,   GB,VMAbv,VMPst,VMPst,    O,    B, VBlw,    O,    O, VPre, VPre,    O, VPre,    H,    O,
    601   VPst,FMAbv,    O,CMBlw,    O, VAbv,    O, VAbv,    H,    O,VMBlw,VMAbv,CMAbv,   GB,   GB,    O,
    602   MBlw,CMAbv,CMAbv, VPst, VAbv,VMAbv,    O, VPst,    O, VPre, VPre,VMAbv,    B,    O,   CS,   CS,
    603  VMPst,    B, VAbv, VAbv,    B,    R,    O,  HVM,    O,    O,FMBlw,    O,CMAbv,    O,CMBlw, VAbv,
    604   VBlw,    B,  SUB,  SUB,  SUB,    O,  SUB,  SUB,    O,FMBlw,    O,    B, VPst, VBlw, VPre,VMAbv,
    605  VMBlw,VMPst,   IS, VAbv, MPst, MPre, MBlw, MBlw,    B, MBlw, MBlw, VPst,VMPst,VMPst,    B, MBlw,
    606   VPst, VPre, VAbv, VAbv,VMPst,VMPst,VMBlw,    B,VMPst, VBlw, VPst,  CGJ,  CGJ, VPst,VMAbv,VMAbv,
    607  FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv,   IS,FMAbv,    B,FMAbv,    B,  CGJ,   WJ,  CGJ,   GB,
    608  CMAbv,CMAbv,    B, VAbv,  SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre,    B,
    609   MPre, MBlw,  SUB, FAbv, FAbv, MAbv,  SUB,   Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst,    H,
    610      B,    O,SMAbv,SMAbv,SMAbv, VPst,   IS,   RK,   RK, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,
    611  VMBlw,VMAbv,   CS,    O,FMAbv, ZWNJ,  CGJ,   WJ,   WJ,   WJ,    O,FMPst,    O,   SB,   SE,    O,
    612      H, MPst, VPst,    H,VMAbv, VAbv,VMBlw,    B, VBlw, FPst, VPst, FAbv,VMPst,    B,CMAbv, VAbv,
    613   MBlw, MPst, MBlw,    H,    O, VBlw, MPst, MPre, MAbv, MBlw,    O,    B, FAbv, FAbv, FPst, VBlw,
    614      B, VBlw,VMAbv,    B, VPre,    O,VMPst,   IS,    O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv,    O,
    615     IS,VMBlw,    B,VMPst,VMAbv,VMPst,   CS,   CS,    B,    N,    N,    O,   HN, VPre, VBlw, VAbv,
    616     IS,CMAbv,    O, VPst,    B,    R,    R,CMBlw, VAbv, VPre,VMAbv,VMAbv,    H, VAbv,CMBlw,VMPst,
    617      O,VMAbv,CMBlw,   IS,    R,FMAbv,    B,   CS,   CS,    H,CMBlw,VMPst,    H,VMPst, VAbv,VMAbv,
    618   VPst, MPst,    R, MPst,CMBlw,    B,FMBlw,   CS,  SUB,  SUB,   GB, FBlw, FBlw,CMAbv,   IS, VBlw,
    619     IS,    R, MBlw,   GB, VAbv,    R,VMPst,    G,    G,    J,    J,    J,   SB,   SE,    J,   HR,
    620      G,    G,   HM,   HM,   HM,    G,    O, MPre, MPre, MPst,VMAbv, MBlw, VBlw,    O, VBlw,
    621 };
    622 static const uint16_t hb_use_u16[488]=
    623 {
    624    0,  0,  1,  2,  0,  3,  4,  5,  0,  6,  7,  0,  8,  0,  9, 10,
    625   11, 12, 10, 13, 14, 10, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23,
    626   24, 25, 18, 26, 27, 21, 22, 28, 29, 30, 31, 32, 33, 34, 22, 35,
    627   36,  0, 18, 37, 38, 21, 22, 39, 24, 40, 18, 41, 42, 43, 44, 45,
    628   46, 47, 31,  0, 48, 49, 22, 50, 51, 52, 18,  0, 53, 49, 22, 54,
    629   51, 55, 18, 56, 57, 49, 10, 58, 59, 60, 61, 62, 10, 63, 64, 65,
    630   31, 66, 67, 68, 10, 69, 70, 10, 71, 72, 73, 74, 75, 76, 77,  0,
    631   10, 10, 78, 79, 80, 81, 82, 83, 84, 85, 10, 86, 10, 87, 10, 88,
    632   89, 90, 10, 91, 92, 93,  2,  0, 94,  0, 10, 95, 96, 10, 97,  0,
    633   10, 98, 99,100, 31, 10,101,102,103, 10,104,105, 10,106, 10,107,
    634  108,109,  2,  2,110, 10, 10,111,112,  2,113,114,115, 10,116, 10,
    635  117,118,119,120,121,  0,  0,122,123,124,  0,125,126,127,128,  0,
    636  129,130,131,  0,  0,132,133,  0,134,  0,  0, 10,135,136,137,  0,
    637  138, 10,139,  0, 10,140,141, 10, 10,142,143,  2,144,145,146, 10,
    638  147,148,149, 10, 10,150,151,  2,152, 98,153,154,155,  2, 10,156,
    639   10,157,158,  0,159,160,161,  2,162,  0,  0,163,  0,164,  0,165,
    640  165,166, 34,167,168,169, 10,170, 95,  0,171,  0, 10,172,173,  0,
    641  174,  2,175, 10,176,  0,177,172,178,179,180,  0,  0,181,182,  0,
    642  183, 10, 10,184,185,186,187,188,189, 10, 10,190,191,  0,192, 10,
    643  193,194,195, 10, 10,196, 10,197,198,105,199,102, 10, 34,200,201,
    644  202,  0,203,204, 95, 10, 10,205,206,  2,207, 21, 22,208,209,210,
    645  211,212,213, 10, 10,214,215,216,217,  0, 10,218,219,220,221,  0,
    646  199, 10, 10,222,223,  2,224,225,226,227, 10,228,229,  2,230,231,
    647    2, 10,140,  0, 10,232,233,103,234,  0,235,236,237,238, 10,239,
    648  240,  2,241, 10, 10,242,243,  0,244, 10, 10,245,246,247,248,249,
    649  250,  0, 22, 10,224,251,  8, 10, 71, 19, 10,252, 74,253,254, 10,
    650   10,255,256,  2,257, 10,258,259, 10,260,261, 49, 10,262,263,264,
    651  265,265,265,266,267,268,265,269, 10,270,271,  2, 10,272,273, 10,
    652  274,  2,275,276,277,277,278,279,280,  0, 10,176,  0,281,105, 71,
    653   95,282,  0,283, 71,284,285,  0,286,  0,287,  2,288,  2,289,105,
    654  290,  2,129,129,162,162,162,129,
    655 };
    656 
    657 static inline uint8_t hb_use_b4 (const uint8_t* a, unsigned i)
    658 {
    659  return (a[i>>1]>>((i&1)<<2))&15;
    660 }
    661 static inline uint8_t hb_use_get_category (unsigned u)
    662 {
    663  return u<921600 ? hb_use_u8[3273u+((hb_use_u8[945u+((hb_use_u16[((hb_use_u8[369u+((hb_use_u8[113u+((hb_use_b4(hb_use_u8,((((((((((u)>>1))>>3))>>1))>>3))>>4)))<<4)+((((((((((u)>>1))>>3))>>1))>>3))&15)])<<3)+((((((((u)>>1))>>3))>>1))&7)])<<1)+((((((u)>>1))>>3))&1)])<<3)+((((u)>>1))&7)])<<1)+((u)&1)] : O;
    664 }
    665 
    666 
    667 #endif
    668 
    669 
    670 #undef B
    671 #undef CGJ
    672 #undef CS
    673 #undef G
    674 #undef GB
    675 #undef H
    676 #undef HM
    677 #undef HN
    678 #undef HR
    679 #undef HVM
    680 #undef IS
    681 #undef J
    682 #undef N
    683 #undef O
    684 #undef R
    685 #undef RK
    686 #undef SB
    687 #undef SE
    688 #undef SUB
    689 #undef Sk
    690 #undef WJ
    691 #undef ZWNJ
    692 #undef CMAbv
    693 #undef CMBlw
    694 #undef FAbv
    695 #undef FBlw
    696 #undef FPst
    697 #undef FMAbv
    698 #undef FMBlw
    699 #undef FMPst
    700 #undef MAbv
    701 #undef MBlw
    702 #undef MPst
    703 #undef MPre
    704 #undef SMAbv
    705 #undef SMBlw
    706 #undef VAbv
    707 #undef VBlw
    708 #undef VPst
    709 #undef VPre
    710 #undef VMAbv
    711 #undef VMBlw
    712 #undef VMPst
    713 #undef VMPre
    714 
    715 
    716 #endif /* HB_OT_SHAPER_USE_TABLE_HH */
    717 /* == End of generated table == */