Coverage Report

Created: 2026-09-28 08:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/harfbuzz/src/hb-ot-shaper-use-table.hh
Line
Count
Source
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-18.0.0.txt
10
 * # Date: 2026-07-02, 18:58:37 GMT
11
 * # IndicPositionalCategory-18.0.0.txt
12
 * # Date: 2026-06-24, 13:39:21 GMT
13
 * # ArabicShaping-18.0.0.txt
14
 * # Date: 2026-08-18, 19:02:41 GMT
15
 * # DerivedCoreProperties-17.0.0.txt
16
 * # Date: 2025-07-30, 23:55:08 GMT
17
 * # Blocks-18.0.0.txt
18
 * # Date: 2026-07-08
19
 * # Scripts-18.0.0.txt
20
 * # Date: 2026-06-29, 15:25:26 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
 * # Updated for Unicode 17.0 by Andrew Glass 2025-09-15
32
 * # Updated for Unicode 18.0 by Andrew Glass 2026-09-04
33
 * # Override values For Indic_Positional_Category
34
 * # Not derivable
35
 * # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17
36
 * # Updated for Unicode 10.0 by Andrew Glass 2017-07-25
37
 * # Ammended for Unicode 10.0 by Andrew Glass 2018-09-21
38
 * # Updated for L2/19-083    by Andrew Glass 2019-05-06
39
 * # Updated for Unicode 12.1 by Andrew Glass 2019-05-30
40
 * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28
41
 * # Updated for Unicode 14.0 by Andrew Glass 2021-09-28
42
 * # Updated for Unicode 15.0 by Andrew Glass 2022-09-16
43
 * # Updated for Unicode 15.1 by Andrew Glass 2023-09-14
44
 * # Updated for Unicode 16.0 by Andrew Glass 2024-09-11
45
 * # Updated for Unicode 17.0 by Andrew Glass 2025-09-15
46
 * # Updated for Unicode 18.0 by Andrew Glass 2026-09-04
47
 * UnicodeData.txt does not have a header.
48
 */
49
50
#ifndef HB_OT_SHAPER_USE_TABLE_HH
51
#define HB_OT_SHAPER_USE_TABLE_HH
52
53
#include "hb.hh"
54
55
#include "hb-ot-shaper-use-machine.hh"
56
57
#pragma GCC diagnostic push
58
#pragma GCC diagnostic ignored "-Wunused-macros"
59
#define B USE(B)  /* BASE */
60
#define CGJ USE(CGJ)  /* CGJ */
61
#define CS  USE(CS) /* CONS_WITH_STACKER */
62
#define G USE(G)  /* HIEROGLYPH */
63
#define GB  USE(GB) /* BASE_OTHER */
64
#define H USE(H)  /* HALANT */
65
#define HM  USE(HM) /* HIEROGLYPH_MOD */
66
#define HN  USE(HN) /* HALANT_NUM */
67
#define HR  USE(HR) /* HIEROGLYPH_MIRROR */
68
#define HVM USE(HVM)  /* HALANT_OR_VOWEL_MODIFIER */
69
#define IS  USE(IS) /* INVISIBLE_STACKER */
70
#define J USE(J)  /* HIEROGLYPH_JOINER */
71
#define N USE(N)  /* BASE_NUM */
72
0
#define O USE(O)  /* OTHER */
73
#define R USE(R)  /* REPHA */
74
#define RK  USE(RK) /* REORDERING_KILLER */
75
#define SB  USE(SB) /* HIEROGLYPH_SEGMENT_BEGIN */
76
#define SE  USE(SE) /* HIEROGLYPH_SEGMENT_END */
77
#define SUB USE(SUB)  /* CONS_SUB */
78
#define Sk  USE(Sk) /* SAKOT */
79
#define WJ  USE(WJ) /* Word_Joiner */
80
#define ZWNJ  USE(ZWNJ) /* ZWNJ */
81
#define CMAbv USE(CMAbv)
82
#define CMBlw USE(CMBlw)
83
#define FAbv  USE(FAbv)
84
#define FBlw  USE(FBlw)
85
#define FPst  USE(FPst)
86
#define FMAbv USE(FMAbv)
87
#define FMBlw USE(FMBlw)
88
#define FMPst USE(FMPst)
89
#define MAbv  USE(MAbv)
90
#define MBlw  USE(MBlw)
91
#define MPst  USE(MPst)
92
#define MPre  USE(MPre)
93
#define SMAbv USE(SMAbv)
94
#define SMBlw USE(SMBlw)
95
#define VAbv  USE(VAbv)
96
#define VBlw  USE(VBlw)
97
#define VPst  USE(VPst)
98
#define VPre  USE(VPre)
99
#define VMAbv USE(VMAbv)
100
#define VMBlw USE(VMBlw)
101
#define VMPst USE(VMPst)
102
#define VMPre USE(VMPre)
103
#pragma GCC diagnostic pop
104
105
106
#ifndef HB_OPTIMIZE_SIZE
107
108
#include <stdint.h>
109
110
static const uint8_t hb_use_u8[3359]=
111
{
112
     33,    3,    0,    0,    0,    4,    0,   80,  118,  128,    9,   10,   11,  192,  208,   14,
113
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
114
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
115
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
116
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
117
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
118
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
119
     15,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
120
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
121
      0,    4,    5,    0,    0,    0,    0,    6,    0,    0,    0,    0,    0,    7,    0,    0,
122
      8,    9,    0,   10,   11,   12,   13,   14,   15,   16,   17,   18,   19,    0,    0,   20,
123
     21,   22,   23,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   24,
124
     25,   26,   27,   28,   29,   30,   31,   32,   33,   34,   35,    0,   36,    0,    0,    0,
125
      0,   37,   38,    0,    0,    0,    0,    0,    0,    0,    0,    0,   39,    0,    0,    0,
126
     40,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   41,    0,   42,    0,    0,
127
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
128
      0,   43,   44,   45,   46,   47,   48,    0,   49,    0,    0,    0,    0,    0,    0,    0,
129
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
130
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   50,   51,    0,
131
     52,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   53,   54,    0,    0,    0,
132
      0,    0,    0,    0,    0,   55,   56,    0,   57,    0,    0,   58,   59,    0,   60,   61,
133
     62,   63,   64,   65,   66,   67,   68,   69,   70,   71,   72,    0,   73,   74,   75,   76,
134
      0,   77,    0,   78,   79,   80,   81,   82,    0,   83,   84,   85,   86,    0,   87,   88,
135
      0,    1,    1,    1,    1,    1,    1,    1,    1,   89,    1,    1,    1,    1,    1,    1,
136
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
137
      1,    1,    1,    1,    1,    1,    1,    1,   90,    0,    0,    0,    0,    0,    0,    0,
138
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
139
      0,    0,    0,   91,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
140
      0,    0,    0,    0,    0,    0,   92,   93,    0,    0,    0,   94,    0,    0,    0,   95,
141
     96,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
142
      0,    0,    0,    0,    0,    0,    0,    3,    3,    3,   97,    0,    0,    0,    0,    0,
143
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
144
      0,    0,    0,    0,    0,    0,    0,    0,    0,   98,   99,    0,    0,    0,    0,    0,
145
      0,    0,    0,  100,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
146
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
147
      0,    0,    0,  101,    0,    0,  102,    0,    0,    0,  103,    0,  104,    0,    0,    0,
148
      0,    0,    0,  105,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
149
      0,    2,    2,  106,  107,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
150
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
151
      2,    0,    0,    0,    0,    0,    0,    0,    0,    1,    1,    1,    1,    1,    1,    1,
152
      1,    3,    3,    3,    3,    3,    3,    3,    3,    2,    2,    2,    2,    2,    2,    2,
153
      2,    2,    2,    2,    2,    2,    0,    0,    0,    4,    4,    4,    4,    4,    4,    4,
154
      4,    2,    2,    2,    2,    5,    2,    2,    2,    2,    6,    0,    2,    2,    2,    2,
155
      2,    5,    8,    2,    2,    2,    2,    2,    2,    0,    0,    0,    2,    2,    2,    2,
156
      2,    5,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    5,
157
      0,    2,    2,    2,    2,    5,    0,    0,    0,    2,    2,    2,    2,    2,    5,    0,
158
      0,    2,    8,    2,    2,    2,    2,    2,    2,    0,    0,    0,    0,    0,   74,   75,
159
      0,    5,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    2,
160
      2,    0,    2,    2,    2,    2,    2,    2,    2,   17,    6,   13,   29,   33,   29,   45,
161
      0,   15,   11,   27,    7,   38,    7,   68,    0,    2,    2,    2,    2,    8,    2,    2,
162
      2,   10,   10,   10,   10,   80,   10,   10,   10,    2,    2,    2,    2,    2,    2,    2,
163
      5,    2,    2,    5,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,    0,
164
      0,    2,    2,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    5,    2,
165
      2,    2,    0,    0,    0,    0,    0,    0,    0,    2,    2,    2,    0,    0,    0,    0,
166
      0,    9,   41,    2,    2,    2,    2,    2,    2,    8,    2,    2,    2,    2,    2,    2,
167
      2,    2,    2,    2,    2,    2,    2,    2,   23,    6,    6,    6,    6,    6,    6,    6,
168
      6,    0,    0,    0,    0,    0,    0,   49,    0,   44,    0,    0,    0,    0,    0,   50,
169
      0,    0,   76,    0,    0,    0,    0,    0,    0,    0,    0,    0,   49,    0,    0,    0,
170
      0,    0,    0,    0,    0,    0,    0,    0,  103,    2,    2,    2,    2,    2,   36,    9,
171
      9,    9,    9,    0,    0,    0,    5,   31,    0,    2,    2,    2,    2,   51,   52,    0,
172
      0,    9,   24,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   15,   32,
173
     19,   17,    6,   18,    7,   15,   11,   67,   22,   31,   53,   25,    6,    2,    2,    2,
174
      2,  104,   14,    8,    2,    2,    2,    5,    8,    5,    5,    0,    2,    2,    0,   32,
175
     19,    0,    0,    0,   34,    0,    0,    2,    8,    2,    0,    0,    0,    0,    0,    5,
176
    105,   31,   24,    8,    2,    2,    5,    0,    8,    5,    2,    8,    5,    2,    0,   35,
177
     19,   17,   13,    0,   25,   38,   25,   68,    0,   54,    0,    0,    0,    8,    2,    5,
178
      5,   55,   39,   77,    0,    0,    0,    0,    0,   31,   24,    8,    2,    2,    2,    2,
179
      8,    5,    2,    8,    2,    2,    0,   32,   19,   17,    6,   18,   25,    7,   34,   67,
180
      0,    0,    0,    0,    0,    8,   55,   55,   46,   31,   14,    8,    2,    2,    2,    5,
181
      8,    5,    2,    8,    2,    2,    0,   32,   20,    0,   25,    7,    7,    0,    0,    2,
182
      8,    8,    0,    0,    0,    0,    0,    0,    0,    0,   26,    8,    2,    2,    5,    0,
183
      2,    5,    2,    2,    0,    8,    5,    5,    2,    0,    8,    5,    0,    2,    5,    0,
184
      2,    2,    2,    2,    2,    2,    0,    0,   11,   15,   27,    0,   12,   33,   12,   45,
185
      0,    0,    0,    0,   34,    0,    0,    0,    0,   24,   14,   47,    2,    2,    2,    5,
186
      2,    2,    2,    2,    2,    2,    0,   32,    7,    0,    0,   25,   13,    2,    5,    0,
187
      0,   36,   14,    8,    2,    2,    2,    5,    2,    2,    2,    8,    2,    2,    0,   32,
188
     20,    0,    0,   34,   27,    0,    0,    0,    5,  106,   78,    0,    0,    0,    0,    0,
189
      0,    9,   14,    2,    2,    2,    2,    5,    2,    2,    2,    2,    2,    2,   30,   40,
190
     11,   17,    6,   13,   12,   33,   12,   45,  107,    0,    0,    0,   34,    0,    0,    0,
191
      8,   31,   14,    8,    2,    2,    2,    2,    2,    2,    2,    2,    5,    0,    2,    2,
192
      2,    2,    8,    2,    2,    2,    2,    8,    0,    2,    2,    2,    5,    0,  108,    0,
193
     34,   11,    7,   13,   13,   19,   12,   12,   22,    0,   11,    0,    0,    0,    0,    0,
194
      0,    2,    0,    2,    5,    0,    0,    0,    0,    0,    0,    0,    0,    6,    0,    0,
195
      0,    2,    2,   69,   69,  109,    0,    0,   19,   56,   18,   21,    7,    7,    6,    6,
196
     26,   18,    9,   13,    9,    2,    2,   79,   10,   10,   10,   10,   10,   10,   10,   10,
197
     10,   10,   10,   10,   10,   10,   10,   81,    0,    0,    0,    0,  110,    0,    0,    0,
198
      0,    2,    2,    2,    2,    2,   23,   20,   21,   57,    7,    7,  111,   82,  112,  113,
199
     83,    2,    2,    2,    2,    2,   49,    0,   44,    2,    2,    2,   11,    6,    2,    2,
200
    114,   83,   84,   41,   23,   84,   14,   14,    2,   30,    7,   40,    2,    2,    2,    2,
201
      2,    2,  115,   58,  116,   14,   14,  117,   85,    2,    2,    2,    2,    2,   14,   20,
202
      0,    2,   21,   59,    0,    0,    0,    0,    8,    2,   21,   27,    0,    0,    0,    0,
203
      0,    2,   21,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,    5,
204
      2,    5,   21,    0,    0,    0,    0,    0,    0,    2,    2,    4,   20,    7,   21,    6,
205
     12,   12,   12,   12,   24,   60,  118,  119,  120,  121,  122,    0,    0,    0,    0,  123,
206
      0,    5,    0,    0,    8,    0,  124,    4,  125,   39,   39,  126,   86,    2,    2,    2,
207
      2,    2,    2,    2,    2,   51,    5,    0,    0,    7,   59,   20,    7,  127,   10,    0,
208
      0,   70,  128,   70,   70,  129,  130,    0,    0,    2,    2,    2,    2,    2,    2,    2,
209
      0,    2,    2,    2,    2,   14,    0,    0,    0,    2,    2,    2,   30,   71,   20,    0,
210
      0,    2,    2,  131,  132,   42,  133,   10,   81,  134,   15,   20,    7,   21,   18,   59,
211
     12,   12,   58,    9,    9,    9,   87,   26,   54,    9,   88,   41,    2,    2,    2,    2,
212
      2,    2,    2,   89,    7,    6,    6,    7,   12,   12,    7,   61,    2,    2,    2,    5,
213
      0,    0,    0,    0,    0,    0,  135,   62,   62,   62,   62,    0,    0,    0,    0,    0,
214
      0,   88,   41,    2,    2,    2,    2,    2,    2,   79,   10,   21,   22,    7,  136,   10,
215
      2,    2,    2,    2,   89,    7,   11,   20,   20,   42,  137,    0,    0,    0,    0,    0,
216
      0,    2,    2,   10,   19,   12,   11,   90,   42,   42,   42,  138,  139,    0,    0,    0,
217
      0,    2,    2,    2,    2,    2,    0,    8,    2,    9,   26,   16,   16,   16,    9,   16,
218
     16,   24,   16,   16,   16,   53,    0,   54,    0,    0,    0,  140,   78,    9,   44,    0,
219
      0,    0,    0,    0,    0,    0,  141,    0,    0,    0,    0,    0,    0,    0,   50,  142,
220
      3,   39,   39,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3,    3,
221
     72,    0,    0,   91,    0,    0,    0,    0,    0,    0,   76,   91,    0,    0,    0,    0,
222
      0,   26,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    5,
223
      0,    0,    0,    0,   63,   63,    0,    0,    0,    2,    2,    2,    2,    0,    0,    0,
224
      8,    0,    0,    0,    0,    0,    0,    0,  143,    0,   63,   63,    0,    0,    0,    0,
225
      0,    2,   40,    2,   61,    2,   36,    2,    2,    2,   23,   17,   15,    0,    0,   13,
226
      0,   14,    2,    2,    2,    2,    2,    2,    2,    2,    2,  144,   11,   11,   11,   11,
227
     11,   11,   11,   92,    0,    0,    0,    0,    0,    9,    9,    9,    9,    9,    9,    9,
228
      9,    9,    2,    0,    0,    0,    0,    0,   30,    2,    2,    2,    7,    7,  145,   16,
229
      0,    2,    2,    2,   48,    6,   21,    6,   90,   42,  146,    0,    0,    0,    0,    0,
230
      0,    9,  147,    2,    2,    2,    2,    2,    2,    2,  148,   11,    7,    6,   12,  149,
231
    150,   93,    0,    0,    0,    0,    0,    0,    0,    2,    2,   30,    8,    2,    2,    2,
232
      2,    2,    2,    2,    2,   36,    7,   21,   71,   58,  151,   94,  152,    0,    0,    0,
233
      0,    2,  153,    2,    2,    2,    2,  154,    0,    8,    2,   39,   44,    0,   85,   24,
234
      2,   73,    6,   40,   48,   73,    2,    2,   95,   36,    5,    0,    0,    0,    0,    0,
235
      0,    2,    2,    2,    2,    2,  155,   18,   22,    0,    0,  156,   96,    0,    0,    0,
236
      0,    2,   23,   20,   11,   59,   27,  157,    0,    0,    0,    0,    0,    0,    0,    0,
237
     50,    3,    3,    3,    3,   72,    0,    0,    0,    2,    5,    2,    8,    2,    2,    2,
238
      2,    2,    8,    2,    2,    2,    8,    5,    0,   48,    6,   25,   13,    0,    0,  158,
239
    159,    2,    2,    8,    2,    8,    2,    2,    2,    2,    2,    2,    0,   52,   35,    0,
240
     97,    2,    2,   51,   35,    0,    8,    2,    2,    0,    0,    0,    0,    8,    2,    2,
241
      5,    2,    2,    9,   55,    0,    0,    0,    0,    2,    2,    2,    0,   25,    7,    7,
242
      8,    2,    2,    2,    2,    2,   25,   38,    0,    2,    2,    2,   16,   16,   16,   16,
243
     16,  160,    2,    5,    0,    0,    0,    0,    0,    2,   52,   52,    0,    0,    0,    0,
244
      0,    5,    2,    2,    5,    2,    2,    2,    2,    8,    2,    5,    0,    8,    2,    0,
245
      0,  161,  162,  163,    2,    2,    2,    2,    2,    2,    2,    2,    2,    7,    7,    6,
246
      6,    6,    7,    7,   93,    0,    0,    0,    0,    0,   28,   28,   28,   28,   28,   28,
247
     28,   28,   28,   28,    2,    2,    2,    2,    2,   40,   30,   40,    0,    0,    0,    0,
248
    164,   19,   17,   18,   15,   67,   35,    0,    0,    0,   13,    0,    0,    0,    0,    0,
249
      0,    9,   47,    2,    2,    2,    2,    2,    2,    2,    2,    2,   48,    6,    7,  165,
250
      7,   18,  166,   98,    2,    2,    2,    2,    2,    0,    0,   23,  167,    0,    0,    0,
251
      0,    2,   51,    0,    0,    0,    0,    0,    0,    2,   23,   22,    6,    6,    6,    7,
252
      7,   61,   64,    0,    0,   69,   99,   13,  100,    2,    2,    2,    2,    2,    2,   11,
253
     17,    7,    7,  168,   46,    0,    0,    0,   47,   48,    0,    0,    0,    0,    0,    0,
254
      0,    2,    2,    2,    5,    5,    2,    2,    8,    2,    2,    2,    2,    2,    2,    2,
255
      8,    2,    2,    2,    2,    2,    2,    2,   36,   19,   17,   18,    7,  169,   13,    0,
256
      0,    9,    9,    8,    2,    2,    2,    5,    8,    5,    2,    8,    2,    2,   56,   32,
257
     11,   15,   11,   27,   29,   33,   29,   45,    0,    0,    0,    0,   34,    0,    0,    0,
258
      2,    2,   11,    0,    9,    9,    9,   26,    0,    9,    9,   26,    0,    0,    0,    0,
259
      0,    2,    2,    2,    2,    2,    8,    0,    5,    2,    2,    2,    8,   20,   21,    6,
260
      6,   13,   33,   29,   29,   22,  170,   14,  171,  101,   35,    0,    0,    0,    0,    0,
261
      0,   31,   53,    0,    0,    0,    0,    0,    0,    2,    2,   23,   22,    6,    6,    6,
262
      7,   11,   92,   24,   32,    0,    0,    0,    0,    2,    2,    2,    2,    2,    0,    0,
263
    172,  173,    0,    0,    0,    0,    0,    0,    0,   19,   17,    6,    6,   57,   71,   22,
264
    100,    9,  102,    5,    0,    0,    0,    0,    0,   22,    6,    6,    0,   12,   12,    9,
265
     65,   35,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    2,    6,
266
      0,   11,   17,    6,    6,   18,   15,   60,   65,   38,    0,    0,    0,    0,    0,    0,
267
      0,    2,    2,    2,    2,    2,   36,  174,   22,    6,    7,    7,  102,    5,    0,    0,
268
      0,    2,    2,    2,    2,    2,    5,   77,   94,   11,    7,    6,   58,   18,    7,    0,
269
      0,    2,    2,    2,    5,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,   19,
270
     17,    6,   18,    7,   87,   65,   35,    0,    0,    2,    2,    2,    5,    8,    0,    2,
271
      2,    2,    2,    8,    5,    2,    2,    2,    2,   11,   11,   19,   29,   33,   31,  175,
272
    101,  176,  177,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    0,    2,    2,
273
      2,   23,   22,    6,    6,    0,    7,   11,   14,   61,    0,   33,    0,    0,    0,    0,
274
      0,   30,    6,    7,    7,    7,   73,    2,    2,    2,  178,   95,    9,   24,  179,   10,
275
    180,    0,    0,   49,   97,    0,    0,    0,    0,   30,    6,    7,   15,   17,    6,    2,
276
      2,    2,    2,   64,   64,   64,   43,   43,   43,   43,   43,   43,   24,  181,    0,    8,
277
      0,    0,    0,    0,    0,    0,    5,    0,    0,   15,    6,   15,   15,    0,    0,    0,
278
      0,    7,    6,    6,   13,    7,    7,    9,   65,    0,   10,   10,   10,   10,   10,   10,
279
     10,   57,   18,   60,   26,    0,    0,    0,    0,    2,    2,    2,    5,    2,    8,    2,
280
      2,   30,    7,    7,   13,    0,   38,    7,   25,    9,   99,  182,  183,    0,    0,    0,
281
      0,    2,    2,    2,    8,    5,    2,    2,    2,    2,    2,    2,    2,    2,   11,   11,
282
     27,    7,   34,   60,   82,    0,    0,    0,    0,   47,    0,    0,    0,    0,    0,    0,
283
      0,    2,  184,   57,   27,    0,    0,    0,    0,    9,  185,    2,    2,    2,    2,    2,
284
      2,    2,    2,   11,    7,    6,   13,    0,   12,   15,   96,    0,    0,    0,    0,    0,
285
      0,    2,    2,    2,    2,    2,   98,    0,    0,   66,   66,   66,  186,  187,   66,    1,
286
      1,  188,    1,    1,  189,   37,   37,   37,   37,   37,   37,   37,    0,    0,    0,    0,
287
      0,    1,    1,    1,    1,    1,  190,    0,    0,    2,    2,    2,    2,    2,    2,    2,
288
      7,    7,    7,    7,    7,    7,  191,  192,  193,    9,    9,    9,   26,    0,    0,    0,
289
      0,   14,   41,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   23,   27,
290
      0,    2,    2,    2,    2,    2,    5,    0,   56,  194,    6,    6,    6,    6,    6,    6,
291
      6,    6,    6,    6,    6,    0,    0,    0,   54,   16,   53,    0,    0,    0,    0,    0,
292
      0,    0,    0,    5,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
293
      8,    2,    2,    2,    2,    2,    0,   56,   35,    0,   50,    3,    3,    3,   72,    0,
294
      0,    9,    9,    9,   47,    2,    2,    2,    0,    2,    2,    2,    2,    2,    0,    0,
295
      2,    2,    2,    2,    2,    2,    2,    2,   26,    2,    2,    2,    2,    2,    2,    9,
296
      9,    2,    2,    2,    2,    2,    2,    7,    7,    2,    2,    2,    2,    2,    2,    2,
297
      6,    2,    2,   46,   46,   46,   86,    0,    0,    O,    O,    G,    G,    B,    B,   WJ,
298
     WJ,  CGJ,  CGJ,    B,    O, VBlw, VBlw, VAbv, VAbv,    O,    B,VMAbv,VMAbv,  SUB,  SUB, VPst,
299
   VPst, VPre, VPre, VBlw,    O,VMPst,VMPst, VAbv, VPst,VMBlw,VMBlw, VPst, VBlw, VBlw, VAbv, VPst,
300
   VPre, VPst, VAbv, VAbv, VBlw, VPre, VPst,    B, VPst,VMAbv,VMPst,    O, VAbv,VMAbv,    O, VPst,
301
      O,    N,    N,    O, VPre,    B, VAbv,    O,VMAbv,CMBlw,    B, VPre,    O,    O, VPst,CMBlw,
302
      O,    B,VMAbv,   HM,   HM, VAbv,    O,   GB,   GB, VAbv,    B,VMPst,    B, FAbv, FAbv, FBlw,
303
   FBlw,   GB,    O, VPre,    H,CMAbv,CMAbv,VMAbv,    B,    B, VBlw,    O,   GB,    O,   WJ,    B,
304
  CMBlw,CMBlw,CMBlw,VMBlw,    O,    O,VMBlw,VMAbv,CMAbv,    O,CMBlw, VBlw, VPre, VPre, VAbv, VBlw,
305
   VPst, VPst,VMAbv,    H,    B,SMAbv,SMAbv,   SB,   SE,    R,    R,VMPst,    H,    J,    J, VPst,
306
      H, VAbv,    H,    O,FMBlw, FPst, FPst, VAbv, VPre,   WJ,    O, VBlw,    B,    O,   SB,    O,
307
     SE,FMPst,FMPst,    O, MBlw,   CS,VMPst,    B,  SUB,    O,  SUB,  SUB,    O,VMPst,   IS, MBlw,
308
      B, VPst,VMPst,    B,VMPst,CMAbv,    B, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, VBlw, FAbv,FMPst,
309
      O,    H,VMAbv,    H,    O, MPre, MAbv, VBlw,VMAbv,   IS,    O,    O,   IS,CMAbv,    O,CMBlw,
310
   VAbv, VPre,VMAbv,   IS,    R,    H,CMBlw,    O,  CGJ,   GB,VMAbv,FMAbv,    O,    O,   CS,    R,
311
      O,  HVM,    O,    O,CMAbv,FMBlw,    O,VMAbv,VMBlw, VAbv, MPst, MPre, MBlw, MBlw, MBlw, MBlw,
312
   VPst, VAbv,VMPst,VMPst,VMBlw,VMAbv,FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv,   IS,FMAbv,    B,
313
  FMAbv,    B,  CGJ,   WJ,  CGJ,   GB,CMAbv, VAbv,  SUB,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw,    B,
314
   MPre, MBlw,  SUB, MAbv,  SUB,   Sk, VPst,    O,SMAbv, VPst,   IS,   RK,   RK,VMPre,VMPre,FMAbv,
315
  CMBlw,VMAbv,   CS,    O,FMAbv, ZWNJ,  CGJ,    O,    H, MPst, VPst, VAbv,VMBlw, FPst, VPst, FAbv,
316
  VMPst,    B,CMAbv, VAbv, MBlw, MPst, MBlw, VBlw, MPst, MBlw,    O,    B, FAbv, FAbv, FPst,    B,
317
   VPre,    O,VMPst,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv,VMBlw,    B,VMPst,VMAbv,VMPst,   CS,   CS,
318
      B,    O,   HN, VPre, VBlw, VAbv,   IS, VPst,    B,VMAbv,    H, VAbv,CMBlw,VMPst,    O,VMAbv,
319
  CMBlw,FMAbv,    B,   CS,   CS,VMPst, VAbv,VMAbv, VPst, MPst,    R, MPst,CMBlw,    B,FMBlw,   CS,
320
    SUB,  SUB,   GB,CMAbv,   IS, VBlw,   IS,    R, MBlw,   GB, VAbv,    R,VMPst,    J,   SB,   SE,
321
      J,   HR,    G,    G,   HM,    G,    O, MPre, MPre, MPst,VMAbv, MBlw, VBlw,    O, VBlw,
322
};
323
static const uint16_t hb_use_u16[864]=
324
{
325
     0,   0,   0,   0,   0,   0,   0,   0,   8,   8,   8,   8,   8,   8,   8,   8,
326
    16,  16,  16,  16,  16,  16,  16,  16,  24,  24,  24,  24,  24,  24,  24,  24,
327
     0,   0, 272,  32,   0, 120,   0, 120,   0,   0, 280, 288,   0, 296,   0,   0,
328
     0,   0,   0,   0, 304,   0,   0,   0,   0,   0,   0,   0, 128,   0,   0,   0,
329
     0,   0,   0,   0, 136,  24, 312, 320,   0,   0,   0,   0,  24, 328,   0,   0,
330
   336,  24,  24, 344, 352, 360,  56, 144, 368,  64,  48, 376, 152, 384,  56, 392,
331
   400,  64,  48, 408, 416, 424,  72, 432, 440, 112,  48, 448, 456,   0,  56, 464,
332
   472,  64,  48, 480, 152, 488,  56, 496, 504, 512, 520, 528, 536, 544,  72,   0,
333
   552,  80,  48, 560, 160, 568,  56,   0, 576,  80,  48, 584, 160, 592,  56, 600,
334
   608,  80,  24, 616, 624, 632,  56,   0, 640, 648,  24, 656, 664, 672,  72, 680,
335
   688, 696,  24, 704, 168,  24,  88, 712, 720, 176, 728, 736, 744,   0,   0,   0,
336
    24,  24, 752, 760, 768, 776, 784, 792, 800, 808,   0,   0,   0,   0,   0,   0,
337
    24, 816,  24, 824,  24, 832, 840, 848,  24,  24,  24, 856, 864, 872,  32,   0,
338
   880,   0,  24,  24,  24,  24,  24,  96, 888,  24, 896,   0,   0,   0,   0,   0,
339
    24, 184, 904, 912,  72,  24, 920, 192,  24,  24, 200,  24, 928, 104,   0,   0,
340
    24, 936,  24,  24,  24, 944, 952, 960,  32,  32,   0,   0,   0,   0,   0,   0,
341
   968,  24,  24, 976, 984,  32, 992,1000,1008,  24,1016,  24,  24,  24,1024,1032,
342
    24,  24,1040,1048,1056,   0,   0,   0,   0,   0,   0,   0,   0,1064,1072,1080,
343
     0,   0,   0,   0,   0,   0,   0,1088,1096,1104,1112,   0,   0,   0,  16,1120,
344
  1128,   0,   0,   0,   0,   0,   0,1136,   0,   0,   0,   0,1144,   0,   0,   0,
345
     0,   0,   0,   0,   0,   0,1152,   0,   0,   0,   0,  24,  24,  24,1160,1168,
346
     0,   0,1176,   0,   0,   0,   0,   0,1184,  24,1192,   0,  24,  24,  24, 208,
347
  1200,  24,  24,1208,1216,  32,1224,1232,  24,  24,1240,  24,1248,1256,   0,   0,
348
  1264,  24,  24,1272,1280,  32,1288, 184,  24,  24,1296,1304,1312,  32,  24,1320,
349
    24,  24,  24,1328,1336,   0,1344,1352,   0,   0,   0,   0,  24,  24,1360,  32,
350
    40,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,1368,
351
     0,   0,   0,   0,   0,   0,   0,1376,   0,   0,   0,   0,   0,   0,   0, 216,
352
   216,1384, 112,1392,   0,   0,   0,   0,1400,1408,  24,1416,  96,   0,   0,   0,
353
     0,   0,   0,   0, 168,  24,1424,   0,  24, 224,1432,   0,   0,   0,   0,   0,
354
    24,  24,1440,  32, 136,  24,1448,  24, 232,   0,   0,   0,   0,   0,   0,   0,
355
    24,  24,1456, 224,   0,   0,   0,   0,   0,   0,   0,  24,1464,1472,   0,  24,
356
  1480,   0,   0,1488,1496,   0,   0,   0,1504,  24,  24,1512,1520,1528,1536,1544,
357
   240,  24,  24,1552,1560,   0,   0,   0,1568,  24,1576,1584,1592,  24,  24,1600,
358
   240,  24,  24,1608,1616, 104, 248, 192,  24, 112,1624,1632,1640,   0,   0,   0,
359
  1648,1656,  96,  24,  24,1664,1672,  32,1680,  64,  48,1688,1696,1704,1712,1720,
360
  1728,  24,  24,1736,1744,1752,1760,   0,  24,  24,  24,1768,1776,1784,1792,   0,
361
   248,  24,  24,1800,1808,  32,   0,   0,  24,  24, 256,1816,1824,1832,   0,   0,
362
    24,  24,  24,1840,1848,  32,   0,   0,  24,  24,1856,1864,  32,  24, 208,   0,
363
    24,1872,1880, 200,1888,   0,   0,   0,  24,  24,1896,1904,   0,   0,   0,   0,
364
  1912,1920,  24,1928,1936,  32,   0,   0,   0,   0,1944,  24,  24,1952,1960,   0,
365
  1968,  24,  24,1976,1984,1992,  24,  24,2000,2008,   0,   0,   0,   0,   0,   0,
366
  2016,   0,   0,   0,   0,   0,2024,   0,  48,  24, 256,2032, 128,  24,  88, 144,
367
    24,2040, 176,2048,   0,   0,   0,   0,2056,  24,  24,2064,2072,  32,2080,  24,
368
  2088,2096,  32,   0,   0,   0,   0,2104,   0,   0,   0,   0,   0,   0,  24,2112,
369
  2120,  80,  24,2128,2136,2144,   0,   0,   8,   8,   8,2152,2160,2168,   8,   8,
370
     8,   8,   8,   8,   8,   8,   8,2176,  24,2184,2192,  32,   0,   0,   0,   0,
371
     0,   0,   0,   0,  32,   0,   0,   0,  24,  24,  24,2200,   0,   0,   0,   0,
372
     0,   0,   0,   0,2208,  24,2216,  32,  24,  24,  24,  24,2224,2232, 264, 264,
373
  2240,2248,   0,   0,   0,   0,2256,   0,  24,  24,  24,  24,  24, 232,   0,2264,
374
    24,  24,  24,  24,  24,  24, 104,  88,  96,2272,   0,   0,   0,   0,   0,   0,
375
     0,   0,   0,   0,   0,   0,   0,2280,  24,  24,  88,2288,2296,   0,   0,   0,
376
     0,  24,2304,   0,  24,  24,2312,  32,   0,   0,   0,   0,   0,  24,2320,  32,
377
     0,   0,   0,   0,   0,  24,2328, 104,  24,  24,  24,  24,2336,  32,   0,   0,
378
    40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  16,
379
};
380
381
static inline uint8_t hb_use_b4 (const uint8_t* a, unsigned i)
382
0
{
383
0
  return (a[i>>1]>>((i&1)<<2))&15;
384
0
}
385
static inline uint8_t hb_use_get_category (unsigned u)
386
0
{
387
  /* packtab: [2^4,2^5,2^3,2^3,2^1] */
388
0
  return u<921600u ? (uint8_t)(hb_use_u8[2969u+((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)]+((((u)>>1))&7)])<<1)+((u)&1)]) : O;
389
0
}
390
391
392
#else
393
394
#include <stdint.h>
395
396
static const uint8_t hb_use_u8[3679]=
397
{
398
     33,    3,    0,    0,    0,    4,    0,   80,  118,  128,    9,   10,   11,  192,  208,   14,
399
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
400
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
401
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
402
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
403
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
404
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
405
     15,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
406
      0,    3,    0,    0,    4,    0,    0,    5,    6,    7,    8,    9,   10,   11,   12,    0,
407
     13,   14,    0,    0,    0,    0,    0,    0,   15,   16,   17,   18,   19,   20,   21,    0,
408
      0,   22,    0,    0,    0,    0,   23,    0,   24,    0,    0,    0,    0,    0,   25,   26,
409
      0,    0,    0,    0,    0,    0,    0,    0,    0,   27,   28,   29,   30,    0,    0,    0,
410
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   31,
411
     32,    0,    0,    0,    0,    0,   33,    0,    0,    0,    0,   34,   35,    0,   36,   37,
412
     38,   39,   40,   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
413
     54,    1,    1,    1,    1,   55,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
414
      1,    1,    1,    1,   56,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
415
      0,    0,   57,    0,    0,    0,    0,    0,    0,    0,    0,   58,   59,    0,   60,    0,
416
     61,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   62,   63,    0,    0,
417
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   64,    0,    0,
418
      0,    0,   65,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
419
      0,    0,   66,   67,    0,   68,   69,    0,    0,    0,   70,    0,    0,    0,    0,    0,
420
      0,    2,   71,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
421
      2,    0,    0,    0,    0,    0,    0,    0,    0,    1,    1,    1,    1,    1,    1,    1,
422
      1,    2,    2,    2,    2,    2,    2,    2,    2,    0,   12,    7,    7,    0,   13,   14,
423
      0,    0,    0,   15,    0,    0,    0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
424
      0,    0,    0,    0,    0,    0,    0,    8,   17,    0,    0,   18,    0,    0,    0,    0,
425
      0,   19,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,   31,   32,   33,
426
     34,   35,   36,   37,   38,   39,   40,   41,   42,   43,   44,   45,    9,   46,   47,   48,
427
     49,   50,   51,   52,    9,   53,   54,   55,   56,   57,   58,   10,   59,   60,   61,   62,
428
      0,    3,   63,   64,   65,   66,    0,    0,    0,   67,   68,   69,   70,    3,   71,   72,
429
      6,   73,    3,    3,   74,   75,   76,    0,    0,   77,   78,   79,   80,    3,   81,   82,
430
      0,   83,    3,   84,   85,   86,    0,    0,    0,   87,   88,   89,   90,   91,   92,    3,
431
     93,    3,   94,   95,    0,    0,    0,   96,   97,    0,    0,    0,    0,    0,    0,    0,
432
     98,   99,  100,    0,  101,  102,    0,    0,  103,    0,    0,    0,    0,    0,    0,  104,
433
      0,    0,    0,    0,    0,    0,    0,    0,  105,    0,    5,    3,  106,    0,    0,    0,
434
      0,    0,  107,    0,    0,    0,    0,    0,    0,  108,  109,    3,  110,  111,  112,  113,
435
    114,    3,  115,  116,    0,  117,  118,  119,  120,    3,  121,  122,  123,    3,  124,  125,
436
    126,    0,    0,    0,    0,    0,    0,    3,  127,  128,    0,    0,    0,    0,    0,    0,
437
    129,    0,    0,    0,    0,    0,    0,    0,  130,    0,    0,    0,  131,  132,  133,    0,
438
      0,  134,  135,  136,    0,    0,    0,   10,  137,    0,    0,    0,    0,  138,  139,    0,
439
      0,    3,  140,    8,  141,  142,    0,    0,    0,    0,    0,    0,    0,    3,  143,    0,
440
      0,    0,    5,  144,    5,  145,  146,  147,    0,  148,  149,  150,  151,   11,  152,  153,
441
      0,  154,  155,  156,  157,   11,  158,  159,  160,  161,  162,  163,    0,  164,  165,  166,
442
    167,  168,  169,  170,  171,  172,  173,  174,  175,    3,  176,  177,  178,  179,  180,  181,
443
      0,    0,    0,    0,    0,    3,  182,  183,    0,    3,  184,  185,    0,    3,  186,  187,
444
    188,  189,  190,  191,    0,    0,    0,    0,    0,    3,  192,    0,    0,    0,    0,    0,
445
      0,  193,  194,  195,    0,    0,  196,  197,  198,  199,  200,  201,    3,  202,    0,    0,
446
      0,  203,    0,    0,  204,    0,    0,    0,    0,  205,  206,  207,  208,  209,  210,    0,
447
      0,  211,  212,  213,  214,  215,    6,    0,  216,    0,    0,    0,    0,    0,    0,    0,
448
    217,  218,  219,  220,    0,    0,    0,    0,    0,    1,  221,  222,    1,    1,    1,    1,
449
      1,    1,    1,    1,    1,    1,    1,    1,  223,  224,  225,    0,    0,    0,    0,    0,
450
      0,    0,    0,    0,    0,    0,    0,    6,    0,    3,  226,    0,    0,    0,    0,    0,
451
      0,    0,    0,  227,  228,    0,    0,    0,    0,    3,    3,  229,  230,  231,    0,    0,
452
    232,    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,  233,
453
    234,    3,    3,    3,  235,  236,    0,    0,    0,    0,    0,    0,  237,    0,    0,    0,
454
      0,    3,  238,  239,    0,    0,    0,    0,    0,    0,    0,    0,    0,    5,  240,    3,
455
    241,    0,    0,    0,    0,    0,    0,    5,  242,    0,    0,    0,    0,    0,    0,    5,
456
    243,    3,    3,  244,    0,    0,    0,    0,    0,    4,    4,    4,    4,    4,    4,    4,
457
    245,    0,    0,    0,    0,    0,    0,    0,    0,    1,    1,    1,    1,    1,    1,    1,
458
      1,    3,    3,    3,    3,    3,    3,    3,    3,    2,    2,    2,    2,    2,    2,    2,
459
      2,    2,    2,    2,    2,    2,    0,    0,    0,    4,    4,    4,    4,    4,    4,    4,
460
      4,    2,    2,    2,    2,    5,    2,    2,    2,    2,    6,    0,    2,    2,    2,    2,
461
      2,    5,    8,    2,    2,    2,    2,    2,    2,    0,    0,    0,    2,    2,    2,    2,
462
      2,    5,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    5,
463
      0,    2,    2,    2,    2,    5,    0,    0,    0,    2,    2,    2,    2,    2,    5,    0,
464
      0,    2,    8,    2,    2,    2,    2,    2,    2,    0,    0,    0,    0,    0,   74,   75,
465
      0,    5,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    2,
466
      2,    0,    2,    2,    2,    2,    2,    2,    2,   17,    6,   13,   29,   33,   29,   45,
467
      0,   15,   11,   27,    7,   38,    7,   68,    0,    2,    2,    2,    2,    8,    2,    2,
468
      2,   10,   10,   10,   10,   80,   10,   10,   10,    2,    2,    2,    2,    2,    2,    2,
469
      5,    2,    2,    5,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,    0,
470
      0,    2,    2,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    5,    2,
471
      2,    2,    0,    0,    0,    0,    0,    0,    0,    2,    2,    2,    0,    0,    0,    0,
472
      0,    9,   41,    2,    2,    2,    2,    2,    2,    8,    2,    2,    2,    2,    2,    2,
473
      2,    2,    2,    2,    2,    2,    2,    2,   23,    6,    6,    6,    6,    6,    6,    6,
474
      6,    0,    0,    0,    0,    0,    0,   49,    0,   44,    0,    0,    0,    0,    0,   50,
475
      0,    0,   76,    0,    0,    0,    0,    0,    0,    0,    0,    0,   49,    0,    0,    0,
476
      0,    0,    0,    0,    0,    0,    0,    0,  103,    2,    2,    2,    2,    2,   36,    9,
477
      9,    9,    9,    0,    0,    0,    5,   31,    0,    2,    2,    2,    2,   51,   52,    0,
478
      0,    9,   24,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   15,   32,
479
     19,   17,    6,   18,    7,   15,   11,   67,   22,   31,   53,   25,    6,    2,    2,    2,
480
      2,  104,   14,    8,    2,    2,    2,    5,    8,    5,    5,    0,    2,    2,    0,   32,
481
     19,    0,    0,    0,   34,    0,    0,    2,    8,    2,    0,    0,    0,    0,    0,    5,
482
    105,   31,   24,    8,    2,    2,    5,    0,    8,    5,    2,    8,    5,    2,    0,   35,
483
     19,   17,   13,    0,   25,   38,   25,   68,    0,   54,    0,    0,    0,    8,    2,    5,
484
      5,   55,   39,   77,    0,    0,    0,    0,    0,   31,   24,    8,    2,    2,    2,    2,
485
      8,    5,    2,    8,    2,    2,    0,   32,   19,   17,    6,   18,   25,    7,   34,   67,
486
      0,    0,    0,    0,    0,    8,   55,   55,   46,   31,   14,    8,    2,    2,    2,    5,
487
      8,    5,    2,    8,    2,    2,    0,   32,   20,    0,   25,    7,    7,    0,    0,    2,
488
      8,    8,    0,    0,    0,    0,    0,    0,    0,    0,   26,    8,    2,    2,    5,    0,
489
      2,    5,    2,    2,    0,    8,    5,    5,    2,    0,    8,    5,    0,    2,    5,    0,
490
      2,    2,    2,    2,    2,    2,    0,    0,   11,   15,   27,    0,   12,   33,   12,   45,
491
      0,    0,    0,    0,   34,    0,    0,    0,    0,   24,   14,   47,    2,    2,    2,    5,
492
      2,    2,    2,    2,    2,    2,    0,   32,    7,    0,    0,   25,   13,    2,    5,    0,
493
      0,   36,   14,    8,    2,    2,    2,    5,    2,    2,    2,    8,    2,    2,    0,   32,
494
     20,    0,    0,   34,   27,    0,    0,    0,    5,  106,   78,    0,    0,    0,    0,    0,
495
      0,    9,   14,    2,    2,    2,    2,    5,    2,    2,    2,    2,    2,    2,   30,   40,
496
     11,   17,    6,   13,   12,   33,   12,   45,  107,    0,    0,    0,   34,    0,    0,    0,
497
      8,   31,   14,    8,    2,    2,    2,    2,    2,    2,    2,    2,    5,    0,    2,    2,
498
      2,    2,    8,    2,    2,    2,    2,    8,    0,    2,    2,    2,    5,    0,  108,    0,
499
     34,   11,    7,   13,   13,   19,   12,   12,   22,    0,   11,    0,    0,    0,    0,    0,
500
      0,    2,    0,    2,    5,    0,    0,    0,    0,    0,    0,    0,    0,    6,    0,    0,
501
      0,    2,    2,   69,   69,  109,    0,    0,   19,   56,   18,   21,    7,    7,    6,    6,
502
     26,   18,    9,   13,    9,    2,    2,   79,   10,   10,   10,   10,   10,   10,   10,   10,
503
     10,   10,   10,   10,   10,   10,   10,   81,    0,    0,    0,    0,  110,    0,    0,    0,
504
      0,    2,    2,    2,    2,    2,   23,   20,   21,   57,    7,    7,  111,   82,  112,  113,
505
     83,    2,    2,    2,    2,    2,   49,    0,   44,    2,    2,    2,   11,    6,    2,    2,
506
    114,   83,   84,   41,   23,   84,   14,   14,    2,   30,    7,   40,    2,    2,    2,    2,
507
      2,    2,  115,   58,  116,   14,   14,  117,   85,    2,    2,    2,    2,    2,   14,   20,
508
      0,    2,   21,   59,    0,    0,    0,    0,    8,    2,   21,   27,    0,    0,    0,    0,
509
      0,    2,   21,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,    5,
510
      2,    5,   21,    0,    0,    0,    0,    0,    0,    2,    2,    4,   20,    7,   21,    6,
511
     12,   12,   12,   12,   24,   60,  118,  119,  120,  121,  122,    0,    0,    0,    0,  123,
512
      0,    5,    0,    0,    8,    0,  124,    4,  125,   39,   39,  126,   86,    2,    2,    2,
513
      2,    2,    2,    2,    2,   51,    5,    0,    0,    7,   59,   20,    7,  127,   10,    0,
514
      0,   70,  128,   70,   70,  129,  130,    0,    0,    2,    2,    2,    2,    2,    2,    2,
515
      0,    2,    2,    2,    2,   14,    0,    0,    0,    2,    2,    2,   30,   71,   20,    0,
516
      0,    2,    2,  131,  132,   42,  133,   10,   81,  134,   15,   20,    7,   21,   18,   59,
517
     12,   12,   58,    9,    9,    9,   87,   26,   54,    9,   88,   41,    2,    2,    2,    2,
518
      2,    2,    2,   89,    7,    6,    6,    7,   12,   12,    7,   61,    2,    2,    2,    5,
519
      0,    0,    0,    0,    0,    0,  135,   62,   62,   62,   62,    0,    0,    0,    0,    0,
520
      0,   88,   41,    2,    2,    2,    2,    2,    2,   79,   10,   21,   22,    7,  136,   10,
521
      2,    2,    2,    2,   89,    7,   11,   20,   20,   42,  137,    0,    0,    0,    0,    0,
522
      0,    2,    2,   10,   19,   12,   11,   90,   42,   42,   42,  138,  139,    0,    0,    0,
523
      0,    2,    2,    2,    2,    2,    0,    8,    2,    9,   26,   16,   16,   16,    9,   16,
524
     16,   24,   16,   16,   16,   53,    0,   54,    0,    0,    0,  140,   78,    9,   44,    0,
525
      0,    0,    0,    0,    0,    0,  141,    0,    0,    0,    0,    0,    0,    0,   50,  142,
526
      3,   39,   39,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3,    3,
527
     72,    0,    0,   91,    0,    0,    0,    0,    0,    0,   76,   91,    0,    0,    0,    0,
528
      0,   26,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    5,
529
      0,    0,    0,    0,   63,   63,    0,    0,    0,    2,    2,    2,    2,    0,    0,    0,
530
      8,    0,    0,    0,    0,    0,    0,    0,  143,    0,   63,   63,    0,    0,    0,    0,
531
      0,    2,   40,    2,   61,    2,   36,    2,    2,    2,   23,   17,   15,    0,    0,   13,
532
      0,   14,    2,    2,    2,    2,    2,    2,    2,    2,    2,  144,   11,   11,   11,   11,
533
     11,   11,   11,   92,    0,    0,    0,    0,    0,    9,    9,    9,    9,    9,    9,    9,
534
      9,    9,    2,    0,    0,    0,    0,    0,   30,    2,    2,    2,    7,    7,  145,   16,
535
      0,    2,    2,    2,   48,    6,   21,    6,   90,   42,  146,    0,    0,    0,    0,    0,
536
      0,    9,  147,    2,    2,    2,    2,    2,    2,    2,  148,   11,    7,    6,   12,  149,
537
    150,   93,    0,    0,    0,    0,    0,    0,    0,    2,    2,   30,    8,    2,    2,    2,
538
      2,    2,    2,    2,    2,   36,    7,   21,   71,   58,  151,   94,  152,    0,    0,    0,
539
      0,    2,  153,    2,    2,    2,    2,  154,    0,    8,    2,   39,   44,    0,   85,   24,
540
      2,   73,    6,   40,   48,   73,    2,    2,   95,   36,    5,    0,    0,    0,    0,    0,
541
      0,    2,    2,    2,    2,    2,  155,   18,   22,    0,    0,  156,   96,    0,    0,    0,
542
      0,    2,   23,   20,   11,   59,   27,  157,    0,    0,    0,    0,    0,    0,    0,    0,
543
     50,    3,    3,    3,    3,   72,    0,    0,    0,    2,    5,    2,    8,    2,    2,    2,
544
      2,    2,    8,    2,    2,    2,    8,    5,    0,   48,    6,   25,   13,    0,    0,  158,
545
    159,    2,    2,    8,    2,    8,    2,    2,    2,    2,    2,    2,    0,   52,   35,    0,
546
     97,    2,    2,   51,   35,    0,    8,    2,    2,    0,    0,    0,    0,    8,    2,    2,
547
      5,    2,    2,    9,   55,    0,    0,    0,    0,    2,    2,    2,    0,   25,    7,    7,
548
      8,    2,    2,    2,    2,    2,   25,   38,    0,    2,    2,    2,   16,   16,   16,   16,
549
     16,  160,    2,    5,    0,    0,    0,    0,    0,    2,   52,   52,    0,    0,    0,    0,
550
      0,    5,    2,    2,    5,    2,    2,    2,    2,    8,    2,    5,    0,    8,    2,    0,
551
      0,  161,  162,  163,    2,    2,    2,    2,    2,    2,    2,    2,    2,    7,    7,    6,
552
      6,    6,    7,    7,   93,    0,    0,    0,    0,    0,   28,   28,   28,   28,   28,   28,
553
     28,   28,   28,   28,    2,    2,    2,    2,    2,   40,   30,   40,    0,    0,    0,    0,
554
    164,   19,   17,   18,   15,   67,   35,    0,    0,    0,   13,    0,    0,    0,    0,    0,
555
      0,    9,   47,    2,    2,    2,    2,    2,    2,    2,    2,    2,   48,    6,    7,  165,
556
      7,   18,  166,   98,    2,    2,    2,    2,    2,    0,    0,   23,  167,    0,    0,    0,
557
      0,    2,   51,    0,    0,    0,    0,    0,    0,    2,   23,   22,    6,    6,    6,    7,
558
      7,   61,   64,    0,    0,   69,   99,   13,  100,    2,    2,    2,    2,    2,    2,   11,
559
     17,    7,    7,  168,   46,    0,    0,    0,   47,   48,    0,    0,    0,    0,    0,    0,
560
      0,    2,    2,    2,    5,    5,    2,    2,    8,    2,    2,    2,    2,    2,    2,    2,
561
      8,    2,    2,    2,    2,    2,    2,    2,   36,   19,   17,   18,    7,  169,   13,    0,
562
      0,    9,    9,    8,    2,    2,    2,    5,    8,    5,    2,    8,    2,    2,   56,   32,
563
     11,   15,   11,   27,   29,   33,   29,   45,    0,    0,    0,    0,   34,    0,    0,    0,
564
      2,    2,   11,    0,    9,    9,    9,   26,    0,    9,    9,   26,    0,    0,    0,    0,
565
      0,    2,    2,    2,    2,    2,    8,    0,    5,    2,    2,    2,    8,   20,   21,    6,
566
      6,   13,   33,   29,   29,   22,  170,   14,  171,  101,   35,    0,    0,    0,    0,    0,
567
      0,   31,   53,    0,    0,    0,    0,    0,    0,    2,    2,   23,   22,    6,    6,    6,
568
      7,   11,   92,   24,   32,    0,    0,    0,    0,    2,    2,    2,    2,    2,    0,    0,
569
    172,  173,    0,    0,    0,    0,    0,    0,    0,   19,   17,    6,    6,   57,   71,   22,
570
    100,    9,  102,    5,    0,    0,    0,    0,    0,   22,    6,    6,    0,   12,   12,    9,
571
     65,   35,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    2,    6,
572
      0,   11,   17,    6,    6,   18,   15,   60,   65,   38,    0,    0,    0,    0,    0,    0,
573
      0,    2,    2,    2,    2,    2,   36,  174,   22,    6,    7,    7,  102,    5,    0,    0,
574
      0,    2,    2,    2,    2,    2,    5,   77,   94,   11,    7,    6,   58,   18,    7,    0,
575
      0,    2,    2,    2,    5,    0,    0,    0,    0,    2,    2,    2,    2,    2,    2,   19,
576
     17,    6,   18,    7,   87,   65,   35,    0,    0,    2,    2,    2,    5,    8,    0,    2,
577
      2,    2,    2,    8,    5,    2,    2,    2,    2,   11,   11,   19,   29,   33,   31,  175,
578
    101,  176,  177,    0,    0,    0,    0,    0,    0,    2,    2,    2,    2,    0,    2,    2,
579
      2,   23,   22,    6,    6,    0,    7,   11,   14,   61,    0,   33,    0,    0,    0,    0,
580
      0,   30,    6,    7,    7,    7,   73,    2,    2,    2,  178,   95,    9,   24,  179,   10,
581
    180,    0,    0,   49,   97,    0,    0,    0,    0,   30,    6,    7,   15,   17,    6,    2,
582
      2,    2,    2,   64,   64,   64,   43,   43,   43,   43,   43,   43,   24,  181,    0,    8,
583
      0,    0,    0,    0,    0,    0,    5,    0,    0,   15,    6,   15,   15,    0,    0,    0,
584
      0,    7,    6,    6,   13,    7,    7,    9,   65,    0,   10,   10,   10,   10,   10,   10,
585
     10,   57,   18,   60,   26,    0,    0,    0,    0,    2,    2,    2,    5,    2,    8,    2,
586
      2,   30,    7,    7,   13,    0,   38,    7,   25,    9,   99,  182,  183,    0,    0,    0,
587
      0,    2,    2,    2,    8,    5,    2,    2,    2,    2,    2,    2,    2,    2,   11,   11,
588
     27,    7,   34,   60,   82,    0,    0,    0,    0,   47,    0,    0,    0,    0,    0,    0,
589
      0,    2,  184,   57,   27,    0,    0,    0,    0,    9,  185,    2,    2,    2,    2,    2,
590
      2,    2,    2,   11,    7,    6,   13,    0,   12,   15,   96,    0,    0,    0,    0,    0,
591
      0,    2,    2,    2,    2,    2,   98,    0,    0,   66,   66,   66,  186,  187,   66,    1,
592
      1,  188,    1,    1,  189,   37,   37,   37,   37,   37,   37,   37,    0,    0,    0,    0,
593
      0,    1,    1,    1,    1,    1,  190,    0,    0,    2,    2,    2,    2,    2,    2,    2,
594
      7,    7,    7,    7,    7,    7,  191,  192,  193,    9,    9,    9,   26,    0,    0,    0,
595
      0,   14,   41,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,   23,   27,
596
      0,    2,    2,    2,    2,    2,    5,    0,   56,  194,    6,    6,    6,    6,    6,    6,
597
      6,    6,    6,    6,    6,    0,    0,    0,   54,   16,   53,    0,    0,    0,    0,    0,
598
      0,    0,    0,    5,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
599
      8,    2,    2,    2,    2,    2,    0,   56,   35,    0,   50,    3,    3,    3,   72,    0,
600
      0,    9,    9,    9,   47,    2,    2,    2,    0,    2,    2,    2,    2,    2,    0,    0,
601
      2,    2,    2,    2,    2,    2,    2,    2,   26,    2,    2,    2,    2,    2,    2,    9,
602
      9,    2,    2,    2,    2,    2,    2,    7,    7,    2,    2,    2,    2,    2,    2,    2,
603
      6,    2,    2,   46,   46,   46,   86,    0,    0,    O,    O,    G,    G,    B,    B,   WJ,
604
     WJ,  CGJ,  CGJ,    B,    O, VBlw, VBlw, VAbv, VAbv,    O,    B,VMAbv,VMAbv,  SUB,  SUB, VPst,
605
   VPst, VPre, VPre, VBlw,    O,VMPst,VMPst, VAbv, VPst,VMBlw,VMBlw, VPst, VBlw, VBlw, VAbv, VPst,
606
   VPre, VPst, VAbv, VAbv, VBlw, VPre, VPst,    B, VPst,VMAbv,VMPst,    O, VAbv,VMAbv,    O, VPst,
607
      O,    N,    N,    O, VPre,    B, VAbv,    O,VMAbv,CMBlw,    B, VPre,    O,    O, VPst,CMBlw,
608
      O,    B,VMAbv,   HM,   HM, VAbv,    O,   GB,   GB, VAbv,    B,VMPst,    B, FAbv, FAbv, FBlw,
609
   FBlw,   GB,    O, VPre,    H,CMAbv,CMAbv,VMAbv,    B,    B, VBlw,    O,   GB,    O,   WJ,    B,
610
  CMBlw,CMBlw,CMBlw,VMBlw,    O,    O,VMBlw,VMAbv,CMAbv,    O,CMBlw, VBlw, VPre, VPre, VAbv, VBlw,
611
   VPst, VPst,VMAbv,    H,    B,SMAbv,SMAbv,   SB,   SE,    R,    R,VMPst,    H,    J,    J, VPst,
612
      H, VAbv,    H,    O,FMBlw, FPst, FPst, VAbv, VPre,   WJ,    O, VBlw,    B,    O,   SB,    O,
613
     SE,FMPst,FMPst,    O, MBlw,   CS,VMPst,    B,  SUB,    O,  SUB,  SUB,    O,VMPst,   IS, MBlw,
614
      B, VPst,VMPst,    B,VMPst,CMAbv,    B, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, VBlw, FAbv,FMPst,
615
      O,    H,VMAbv,    H,    O, MPre, MAbv, VBlw,VMAbv,   IS,    O,    O,   IS,CMAbv,    O,CMBlw,
616
   VAbv, VPre,VMAbv,   IS,    R,    H,CMBlw,    O,  CGJ,   GB,VMAbv,FMAbv,    O,    O,   CS,    R,
617
      O,  HVM,    O,    O,CMAbv,FMBlw,    O,VMAbv,VMBlw, VAbv, MPst, MPre, MBlw, MBlw, MBlw, MBlw,
618
   VPst, VAbv,VMPst,VMPst,VMBlw,VMAbv,FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv,   IS,FMAbv,    B,
619
  FMAbv,    B,  CGJ,   WJ,  CGJ,   GB,CMAbv, VAbv,  SUB,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw,    B,
620
   MPre, MBlw,  SUB, MAbv,  SUB,   Sk, VPst,    O,SMAbv, VPst,   IS,   RK,   RK,VMPre,VMPre,FMAbv,
621
  CMBlw,VMAbv,   CS,    O,FMAbv, ZWNJ,  CGJ,    O,    H, MPst, VPst, VAbv,VMBlw, FPst, VPst, FAbv,
622
  VMPst,    B,CMAbv, VAbv, MBlw, MPst, MBlw, VBlw, MPst, MBlw,    O,    B, FAbv, FAbv, FPst,    B,
623
   VPre,    O,VMPst,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv,VMBlw,    B,VMPst,VMAbv,VMPst,   CS,   CS,
624
      B,    O,   HN, VPre, VBlw, VAbv,   IS, VPst,    B,VMAbv,    H, VAbv,CMBlw,VMPst,    O,VMAbv,
625
  CMBlw,FMAbv,    B,   CS,   CS,VMPst, VAbv,VMAbv, VPst, MPst,    R, MPst,CMBlw,    B,FMBlw,   CS,
626
    SUB,  SUB,   GB,CMAbv,   IS, VBlw,   IS,    R, MBlw,   GB, VAbv,    R,VMPst,    J,   SB,   SE,
627
      J,   HR,    G,    G,   HM,    G,    O, MPre, MPre, MPst,VMAbv, MBlw, VBlw,    O, VBlw,
628
};
629
static const uint16_t hb_use_u16[492]=
630
{
631
     0,   0,   8,   8,  16,  16,  24,  24,  40,  40,   0,  24,  32,   0,   0, 120,
632
   136,  24,  56,   0, 168,  24, 240,  24, 272,  32, 280, 288,   0, 296, 304,   0,
633
   128,   0, 312, 320,  24, 328, 336,  24,  24, 344, 352, 360,  56, 144, 368,  64,
634
    48, 376, 152, 384,  56, 392, 400,  64,  48, 408, 416, 424,  72, 432, 440, 112,
635
    48, 448, 456,   0,  56, 464, 472,  64,  48, 480, 152, 488,  56, 496, 504, 512,
636
   520, 528, 536, 544,  72,   0, 552,  80,  48, 560, 160, 568, 576,  80,  48, 584,
637
   160, 592,  56, 600, 608,  80,  24, 616, 624, 632, 640, 648,  24, 656, 664, 672,
638
    72, 680, 688, 696,  24, 704,  88, 712, 720, 176, 728, 736, 744,   0, 752, 760,
639
   768, 776, 784, 792, 800, 808,  24, 816,  24, 824,  24, 832, 840, 848,  24, 856,
640
   864, 872, 880,   0,  24,  96, 888,  24, 896,   0,  24, 184, 904, 912,  72,  24,
641
   920, 192, 200,  24, 928, 104,  24, 936,  24, 944, 952, 960,  32,  32, 968,  24,
642
    24, 976, 984,  32, 992,1000,1008,  24,1016,  24,1024,1032,1040,1048,1056,   0,
643
     0,1064,1072,1080,   0,1088,1096,1104,1112,   0,  16,1120,1128,   0,   0,1136,
644
  1144,   0,1152,   0,1160,1168,1176,   0,1184,  24,1192,   0,  24, 208,1200,  24,
645
    24,1208,1216,  32,1224,1232,1240,  24,1248,1256,1264,  24,  24,1272,1280,  32,
646
  1288, 184,1296,1304,1312,  32,  24,1320,  24,1328,1336,   0,1344,1352,1360,  32,
647
    40,   0,   0,1368,   0,1376,   0, 216, 216,1384, 112,1392,1400,1408,  24,1416,
648
    96,   0,1424,   0,  24, 224,1432,   0,1440,  32,1448,  24, 232,   0,1456, 224,
649
  1464,1472,1480,   0,   0,1488,1496,   0,1504,  24,  24,1512,1520,1528,1536,1544,
650
    24,1552,1560,   0,1568,  24,1576,1584,1592,  24,  24,1600,  24,1608,1616, 104,
651
   248, 192,  24, 112,1624,1632,1640,   0,1648,1656,  96,  24,  24,1664,1672,  32,
652
  1680,  64,  48,1688,1696,1704,1712,1720,1728,  24,  24,1736,1744,1752,1760,   0,
653
    24,1768,1776,1784,1792,   0, 248,  24,  24,1800,1808,  32, 256,1816,1824,1832,
654
    24,1840,1848,  32,1856,1864,  32,  24, 208,   0,  24,1872,1880, 200,1888,   0,
655
  1896,1904,1912,1920,  24,1928,1936,  32,1944,  24,  24,1952,1960,   0,1968,  24,
656
    24,1976,1984,1992,2000,2008,2016,   0,2024,   0,  48,  24, 256,2032, 128,  24,
657
    88, 144,  24,2040, 176,2048,2056,  24,  24,2064,2072,  32,2080,  24,2088,2096,
658
     0,2104,  24,2112,2120,  80,  24,2128,2136,2144,   8,2152,2160,2168,   8,2176,
659
    24,2184,2192,  32,  24,2200,2208,  24,2216,  32,2224,2232, 264, 264,2240,2248,
660
  2256,   0,  24, 232,   0,2264, 104,  88,  96,2272,   0,2280,  88,2288,2296,   0,
661
  2304,   0,2312,  32,2320,  32,2328, 104,2336,  32,  40,  16,
662
};
663
664
static inline uint8_t hb_use_b4 (const uint8_t* a, unsigned i)
665
{
666
  return (a[i>>1]>>((i&1)<<2))&15;
667
}
668
static inline uint8_t hb_use_get_category (unsigned u)
669
{
670
  /* packtab: [2^4,2^4,2^3,2^1,2^3,2^1] */
671
  return u<921600u ? (uint8_t)(hb_use_u8[3289u+((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)]+((((u)>>1))&7)])<<1)+((u)&1)]) : O;
672
}
673
674
675
#endif
676
677
678
#undef B
679
#undef CGJ
680
#undef CS
681
#undef G
682
#undef GB
683
#undef H
684
#undef HM
685
#undef HN
686
#undef HR
687
#undef HVM
688
#undef IS
689
#undef J
690
#undef N
691
#undef O
692
#undef R
693
#undef RK
694
#undef SB
695
#undef SE
696
#undef SUB
697
#undef Sk
698
#undef WJ
699
#undef ZWNJ
700
#undef CMAbv
701
#undef CMBlw
702
#undef FAbv
703
#undef FBlw
704
#undef FPst
705
#undef FMAbv
706
#undef FMBlw
707
#undef FMPst
708
#undef MAbv
709
#undef MBlw
710
#undef MPst
711
#undef MPre
712
#undef SMAbv
713
#undef SMBlw
714
#undef VAbv
715
#undef VBlw
716
#undef VPst
717
#undef VPre
718
#undef VMAbv
719
#undef VMBlw
720
#undef VMPst
721
#undef VMPre
722
723
724
#endif /* HB_OT_SHAPER_USE_TABLE_HH */
725
/* == End of generated table == */