Coverage Report

Created: 2026-02-26 06:25

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