Line data Source code
1 : /* Generated by make_unicode.py DO NOT MODIFY */
2 : /* Unicode version: 9.0.0 */
3 :
4 : /*
5 : * Any copyright is dedicated to the Public Domain.
6 : * http://creativecommons.org/licenses/publicdomain/
7 : */
8 : #include "vm/Unicode.h"
9 :
10 : using namespace js;
11 : using namespace js::unicode;
12 :
13 : /*
14 : * So how does indexing work?
15 : * First let's have a look at a char16_t, 16-bits:
16 : * [................]
17 : * Step 1:
18 : * Extracting the upper 11 bits from the char16_t.
19 : * upper = char >> 5 ([***********.....])
20 : * Step 2:
21 : * Using these bits to get an reduced index from index1.
22 : * index = index1[upper]
23 : * Step 3:
24 : * Combining the index and the bottom 5 bits of the original char16_t.
25 : * real_index = index2[(index << 5) + (char & ((1 << 5) - 1))] ([...********+++++])
26 : *
27 : * The advantage here is that the biggest number in index1 doesn't need 10 bits,
28 : * but 7 and we save some memory.
29 : *
30 : * Step 4:
31 : * Get the character informations by looking up real_index in js_charinfo.
32 : *
33 : * Pseudocode of generation:
34 : *
35 : * let table be the mapping of char16_t => js_charinfo_index
36 : * let index1 be an empty array
37 : * let index2 be an empty array
38 : * let cache be a hash map
39 : *
40 : * while shift is less then maximal amount you can shift 0xffff before it's 0
41 : * let chunks be table split in chunks of size 2**shift
42 : *
43 : * for every chunk in chunks
44 : * if chunk is in cache
45 : * let index be cache[chunk]
46 : * else
47 : * let index be the max key of index2 + 1
48 : * for element in chunk
49 : * push element to index2
50 : * put index as chunk in cache
51 : *
52 : * push index >> shift to index1
53 : *
54 : * increase shift
55 : * stop if you found the best shift
56 : */
57 : const CharacterInfo unicode::js_charinfo[] = {
58 : { 0, 0, 0 },
59 : { 0, 0, 1 },
60 : { 0, 0, 4 },
61 : { 0, 32, 2 },
62 : { 65504, 0, 2 },
63 : { 0, 0, 2 },
64 : { 743, 0, 2 },
65 : { 121, 0, 2 },
66 : { 0, 1, 2 },
67 : { 65535, 0, 2 },
68 : { 0, 65337, 2 },
69 : { 65304, 0, 2 },
70 : { 0, 65415, 2 },
71 : { 65236, 0, 2 },
72 : { 195, 0, 2 },
73 : { 0, 210, 2 },
74 : { 0, 206, 2 },
75 : { 0, 205, 2 },
76 : { 0, 79, 2 },
77 : { 0, 202, 2 },
78 : { 0, 203, 2 },
79 : { 0, 207, 2 },
80 : { 97, 0, 2 },
81 : { 0, 211, 2 },
82 : { 0, 209, 2 },
83 : { 163, 0, 2 },
84 : { 0, 213, 2 },
85 : { 130, 0, 2 },
86 : { 0, 214, 2 },
87 : { 0, 218, 2 },
88 : { 0, 217, 2 },
89 : { 0, 219, 2 },
90 : { 56, 0, 2 },
91 : { 0, 2, 2 },
92 : { 65535, 1, 2 },
93 : { 65534, 0, 2 },
94 : { 65457, 0, 2 },
95 : { 0, 65439, 2 },
96 : { 0, 65480, 2 },
97 : { 0, 65406, 2 },
98 : { 0, 10795, 2 },
99 : { 0, 65373, 2 },
100 : { 0, 10792, 2 },
101 : { 10815, 0, 2 },
102 : { 0, 65341, 2 },
103 : { 0, 69, 2 },
104 : { 0, 71, 2 },
105 : { 10783, 0, 2 },
106 : { 10780, 0, 2 },
107 : { 10782, 0, 2 },
108 : { 65326, 0, 2 },
109 : { 65330, 0, 2 },
110 : { 65331, 0, 2 },
111 : { 65334, 0, 2 },
112 : { 65333, 0, 2 },
113 : { 42319, 0, 2 },
114 : { 42315, 0, 2 },
115 : { 65329, 0, 2 },
116 : { 42280, 0, 2 },
117 : { 42308, 0, 2 },
118 : { 65327, 0, 2 },
119 : { 65325, 0, 2 },
120 : { 10743, 0, 2 },
121 : { 42305, 0, 2 },
122 : { 10749, 0, 2 },
123 : { 65323, 0, 2 },
124 : { 65322, 0, 2 },
125 : { 10727, 0, 2 },
126 : { 65318, 0, 2 },
127 : { 42282, 0, 2 },
128 : { 65467, 0, 2 },
129 : { 65319, 0, 2 },
130 : { 65465, 0, 2 },
131 : { 65317, 0, 2 },
132 : { 42261, 0, 2 },
133 : { 42258, 0, 2 },
134 : { 84, 0, 4 },
135 : { 0, 116, 2 },
136 : { 0, 38, 2 },
137 : { 0, 37, 2 },
138 : { 0, 64, 2 },
139 : { 0, 63, 2 },
140 : { 65498, 0, 2 },
141 : { 65499, 0, 2 },
142 : { 65505, 0, 2 },
143 : { 65472, 0, 2 },
144 : { 65473, 0, 2 },
145 : { 0, 8, 2 },
146 : { 65474, 0, 2 },
147 : { 65479, 0, 2 },
148 : { 65489, 0, 2 },
149 : { 65482, 0, 2 },
150 : { 65528, 0, 2 },
151 : { 65450, 0, 2 },
152 : { 65456, 0, 2 },
153 : { 7, 0, 2 },
154 : { 65420, 0, 2 },
155 : { 0, 65476, 2 },
156 : { 65440, 0, 2 },
157 : { 0, 65529, 2 },
158 : { 0, 80, 2 },
159 : { 0, 15, 2 },
160 : { 65521, 0, 2 },
161 : { 0, 48, 2 },
162 : { 65488, 0, 2 },
163 : { 0, 7264, 2 },
164 : { 0, 38864, 2 },
165 : { 59282, 0, 2 },
166 : { 59283, 0, 2 },
167 : { 59292, 0, 2 },
168 : { 59294, 0, 2 },
169 : { 59293, 0, 2 },
170 : { 59300, 0, 2 },
171 : { 59355, 0, 2 },
172 : { 35266, 0, 2 },
173 : { 35332, 0, 2 },
174 : { 3814, 0, 2 },
175 : { 65477, 0, 2 },
176 : { 0, 57921, 2 },
177 : { 8, 0, 2 },
178 : { 0, 65528, 2 },
179 : { 74, 0, 2 },
180 : { 86, 0, 2 },
181 : { 100, 0, 2 },
182 : { 128, 0, 2 },
183 : { 112, 0, 2 },
184 : { 126, 0, 2 },
185 : { 9, 0, 2 },
186 : { 0, 65462, 2 },
187 : { 0, 65527, 2 },
188 : { 58331, 0, 2 },
189 : { 0, 65450, 2 },
190 : { 0, 65436, 2 },
191 : { 0, 65424, 2 },
192 : { 0, 65408, 2 },
193 : { 0, 65410, 2 },
194 : { 0, 58019, 2 },
195 : { 0, 57153, 2 },
196 : { 0, 57274, 2 },
197 : { 0, 28, 2 },
198 : { 65508, 0, 2 },
199 : { 0, 16, 2 },
200 : { 65520, 0, 2 },
201 : { 0, 26, 0 },
202 : { 65510, 0, 0 },
203 : { 0, 54793, 2 },
204 : { 0, 61722, 2 },
205 : { 0, 54809, 2 },
206 : { 54741, 0, 2 },
207 : { 54744, 0, 2 },
208 : { 0, 54756, 2 },
209 : { 0, 54787, 2 },
210 : { 0, 54753, 2 },
211 : { 0, 54754, 2 },
212 : { 0, 54721, 2 },
213 : { 58272, 0, 2 },
214 : { 0, 30204, 2 },
215 : { 0, 23256, 2 },
216 : { 0, 23228, 2 },
217 : { 0, 23217, 2 },
218 : { 0, 23221, 2 },
219 : { 0, 23231, 2 },
220 : { 0, 23278, 2 },
221 : { 0, 23254, 2 },
222 : { 0, 23275, 2 },
223 : { 0, 928, 2 },
224 : { 64608, 0, 2 },
225 : { 26672, 0, 2 },
226 : };
227 :
228 : const uint8_t unicode::index1[] = {
229 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
230 : 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
231 : 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
232 : 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 26, 26, 26, 26,
233 : 26, 68, 69, 70, 71, 72, 73, 74, 75, 26, 26, 26, 26, 26, 26, 26, 26, 76,
234 : 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
235 : 95, 96, 97, 98, 99, 100, 101, 102, 26, 103, 26, 104, 105, 105, 106, 105, 107, 108,
236 : 109, 110, 111, 112, 113, 114, 115, 116, 117, 94, 94, 94, 94, 94, 94, 94, 94, 94,
237 : 94, 94, 118, 119, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
238 : 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 120, 121, 105, 122,
239 : 123, 124, 125, 126, 94, 94, 94, 94, 94, 94, 94, 94, 127, 75, 128, 129, 130, 26,
240 : 131, 132, 94, 94, 94, 94, 94, 94, 94, 94, 26, 26, 26, 26, 26, 26, 26, 26,
241 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
242 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
243 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
244 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
245 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
246 : 26, 26, 26, 26, 86, 94, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
247 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
248 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
249 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
250 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
251 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
252 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
253 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
254 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
255 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
256 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
257 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
258 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
259 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
260 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
261 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
262 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
263 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
264 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 133, 26, 26, 26, 26, 26, 26, 26, 26,
265 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 134, 135, 26, 26, 26, 26, 136, 137,
266 : 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
267 : 156, 157, 158, 159, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
268 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
269 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
270 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
271 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
272 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
273 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
274 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
275 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
276 : 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 160, 161,
277 : 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
278 : 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
279 : 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
280 : 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
281 : 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
282 : 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
283 : 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
284 : 94, 94, 94, 94, 94, 94, 26, 26, 26, 26, 26, 162, 26, 163, 164, 165, 166, 167,
285 : 26, 26, 26, 26, 168, 169, 170, 171, 172, 173, 26, 174, 175, 176, 177, 178,
286 : };
287 :
288 : const uint8_t unicode::index2[] = {
289 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
290 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
291 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
292 : 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
293 : 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
294 : 3, 0, 0, 0, 0, 2, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
295 : 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
296 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
297 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
298 : 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
299 : 0, 6, 0, 2, 0, 0, 5, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
300 : 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
301 : 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
302 : 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4,
303 : 4, 4, 4, 7, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
304 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
305 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 10, 11,
306 : 8, 9, 8, 9, 8, 9, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8,
307 : 9, 8, 9, 8, 9, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
308 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
309 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 12, 8,
310 : 9, 8, 9, 8, 9, 13, 14, 15, 8, 9, 8, 9, 16, 8, 9, 17, 17, 8,
311 : 9, 5, 18, 19, 20, 8, 9, 17, 21, 22, 23, 24, 8, 9, 25, 5, 23, 26,
312 : 27, 28, 8, 9, 8, 9, 8, 9, 29, 8, 9, 29, 5, 5, 8, 9, 29, 8,
313 : 9, 30, 30, 8, 9, 8, 9, 31, 8, 9, 5, 5, 8, 9, 5, 32, 5, 5,
314 : 5, 5, 33, 34, 35, 33, 34, 35, 33, 34, 35, 8, 9, 8, 9, 8, 9, 8,
315 : 9, 8, 9, 8, 9, 8, 9, 8, 9, 36, 8, 9, 8, 9, 8, 9, 8, 9,
316 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 5, 33, 34, 35, 8, 9, 37, 38,
317 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
318 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
319 : 8, 9, 8, 9, 39, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
320 : 8, 9, 8, 9, 8, 9, 5, 5, 5, 5, 5, 5, 40, 8, 9, 41, 42, 43,
321 : 43, 8, 9, 44, 45, 46, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 47, 48,
322 : 49, 50, 51, 5, 52, 52, 5, 53, 5, 54, 55, 5, 5, 5, 52, 56, 5, 57,
323 : 5, 58, 59, 5, 60, 61, 59, 62, 63, 5, 5, 61, 5, 64, 65, 5, 5, 66,
324 : 5, 5, 5, 5, 5, 5, 5, 67, 5, 5, 68, 5, 5, 68, 5, 5, 5, 69,
325 : 68, 70, 71, 71, 72, 5, 5, 5, 5, 5, 73, 5, 5, 5, 5, 5, 5, 5,
326 : 5, 5, 5, 74, 75, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
327 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
328 : 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
329 : 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
330 : 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 0,
331 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
332 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
333 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
334 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
335 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 76, 2, 2, 2, 2, 2, 2, 2, 2,
336 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
337 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9,
338 : 8, 9, 5, 0, 8, 9, 0, 0, 5, 27, 27, 27, 0, 77, 0, 0, 0, 0,
339 : 0, 0, 78, 2, 79, 79, 79, 0, 80, 0, 81, 81, 5, 3, 3, 3, 3, 3,
340 : 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3,
341 : 3, 3, 3, 3, 82, 83, 83, 83, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4,
342 : 4, 4, 4, 4, 4, 4, 4, 4, 84, 4, 4, 4, 4, 4, 4, 4, 4, 4,
343 : 85, 86, 86, 87, 88, 89, 5, 5, 5, 90, 91, 92, 8, 9, 8, 9, 8, 9,
344 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
345 : 93, 94, 95, 96, 97, 98, 0, 8, 9, 99, 8, 9, 5, 39, 39, 39, 100, 100,
346 : 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 3, 3, 3, 3,
347 : 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
348 : 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
349 : 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
350 : 4, 4, 4, 4, 4, 4, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
351 : 94, 94, 94, 94, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
352 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
353 : 8, 9, 0, 2, 2, 2, 2, 2, 0, 0, 8, 9, 8, 9, 8, 9, 8, 9,
354 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
355 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
356 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 101, 8, 9, 8, 9, 8, 9, 8,
357 : 9, 8, 9, 8, 9, 8, 9, 102, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
358 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
359 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
360 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
361 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
362 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 0, 103, 103, 103,
363 : 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
364 : 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 0,
365 : 0, 5, 0, 0, 0, 0, 0, 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, 104,
366 : 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
367 : 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 5, 0, 0, 0, 0, 0, 0,
368 : 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
369 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
370 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 0,
371 : 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
372 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
373 : 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
374 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
375 : 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
376 : 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
377 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
378 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2,
379 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
380 : 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5,
381 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
382 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
383 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
384 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
385 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
386 : 5, 5, 0, 5, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2,
387 : 2, 5, 5, 2, 2, 0, 2, 2, 2, 2, 5, 5, 2, 2, 2, 2, 2, 2,
388 : 2, 2, 2, 2, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
389 : 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5,
390 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
391 : 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
392 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 5, 5, 5,
393 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
394 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
395 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
396 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
397 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2,
398 : 2, 2, 2, 2, 2, 2, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
399 : 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5,
400 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
401 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2,
402 : 2, 2, 5, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5,
403 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
404 : 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2,
405 : 5, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
406 : 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
407 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 0, 0,
408 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
409 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
410 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
411 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
412 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,
413 : 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
414 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
415 : 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
416 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
417 : 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
418 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
419 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
420 : 5, 5, 5, 5, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
421 : 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 5, 5,
422 : 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2,
423 : 2, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
424 : 5, 5, 5, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5,
425 : 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
426 : 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0,
427 : 0, 0, 5, 5, 5, 5, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 2, 0,
428 : 0, 2, 2, 0, 0, 2, 2, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2,
429 : 0, 0, 0, 0, 5, 5, 0, 5, 5, 5, 2, 2, 0, 0, 2, 2, 2, 2,
430 : 2, 2, 2, 2, 2, 2, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
431 : 0, 0, 0, 0, 0, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0,
432 : 0, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
433 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0,
434 : 5, 5, 0, 5, 5, 0, 5, 5, 0, 0, 2, 0, 2, 2, 2, 2, 2, 0,
435 : 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0,
436 : 0, 0, 0, 5, 5, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 2, 2,
437 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 2, 0, 0, 0, 0,
438 : 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 5,
439 : 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
440 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
441 : 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 2, 5, 2, 2, 2, 2,
442 : 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 5, 0, 0, 0,
443 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 2, 2, 0, 0,
444 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
445 : 0, 5, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 5, 5, 5, 5, 5,
446 : 5, 5, 5, 0, 0, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
447 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5,
448 : 5, 5, 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 2, 5, 2, 2,
449 : 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0,
450 : 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 5, 5, 0, 5, 5, 5, 2, 2,
451 : 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 5, 0, 0, 0, 0,
452 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 0, 5, 5, 5,
453 : 5, 5, 5, 0, 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5,
454 : 5, 0, 5, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 0,
455 : 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
456 : 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0,
457 : 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
458 : 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
459 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 5,
460 : 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
461 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
462 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
463 : 0, 5, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2,
464 : 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 5, 5, 5, 0, 0, 0, 0, 0,
465 : 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
466 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2,
467 : 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5,
468 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
469 : 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5,
470 : 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2,
471 : 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0,
472 : 5, 0, 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
473 : 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
474 : 2, 2, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5,
475 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
476 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
477 : 5, 5, 5, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0,
478 : 2, 2, 2, 2, 5, 0, 0, 0, 0, 0, 5, 5, 5, 2, 0, 0, 0, 0,
479 : 0, 0, 0, 5, 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
480 : 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
481 : 0, 0, 2, 2, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
482 : 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
483 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
484 : 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,
485 : 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2,
486 : 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
487 : 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
488 : 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
489 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
490 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 5, 5,
491 : 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
492 : 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2,
493 : 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
494 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
495 : 0, 0, 0, 0, 0, 5, 5, 0, 5, 0, 0, 5, 5, 0, 5, 0, 0, 5,
496 : 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5,
497 : 0, 5, 5, 5, 0, 5, 0, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 2,
498 : 5, 5, 2, 2, 2, 2, 2, 2, 0, 2, 2, 5, 0, 0, 5, 5, 5, 5,
499 : 5, 0, 5, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2,
500 : 2, 2, 2, 2, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
501 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
502 : 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
503 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0,
504 : 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
505 : 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 2, 2, 5, 5,
506 : 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
507 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
508 : 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
509 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 5, 5,
510 : 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2,
511 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
512 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
513 : 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
514 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
515 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
516 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
517 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
518 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
519 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
520 : 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
521 : 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 5, 5, 5, 5, 2, 2, 2, 5,
522 : 2, 2, 2, 5, 5, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 2, 2, 2,
523 : 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2,
524 : 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2,
525 : 2, 2, 2, 2, 2, 2, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
526 : 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
527 : 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 105, 0, 0, 0, 0, 0, 105,
528 : 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
529 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
530 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5,
531 : 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,
532 : 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
533 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
534 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,
535 : 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
536 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
537 : 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0,
538 : 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
539 : 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
540 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
541 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
542 : 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5,
543 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
544 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
545 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
546 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 2, 2, 2, 0, 0, 0, 0,
547 : 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
548 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
549 : 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
550 : 0, 0, 0, 0, 0, 0, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
551 : 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
552 : 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
553 : 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
554 : 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 87, 87, 87, 87,
555 : 87, 87, 0, 0, 92, 92, 92, 92, 92, 92, 0, 0, 0, 5, 5, 5, 5, 5,
556 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
557 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
558 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
559 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
560 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
561 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5,
562 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 5, 5, 5,
563 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
564 : 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
565 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
566 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
567 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
568 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5,
569 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5,
570 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 2, 2,
571 : 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
572 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 0, 0, 0,
573 : 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
574 : 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
575 : 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
576 : 5, 5, 5, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
577 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
578 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
579 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2,
580 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
581 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 5, 0, 0,
582 : 0, 0, 5, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
583 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
584 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0,
585 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5,
586 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
587 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
588 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
589 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
590 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
591 : 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
592 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
593 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 5, 0, 0, 0, 0, 0, 5, 5,
594 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
595 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
596 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
597 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
598 : 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
599 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
600 : 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
601 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
602 : 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5,
603 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
604 : 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0,
605 : 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
606 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
607 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
608 : 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
609 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 2, 2,
610 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
611 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
612 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
613 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2,
614 : 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
615 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
616 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
617 : 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2,
618 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
619 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2,
620 : 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
621 : 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
622 : 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
623 : 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
624 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
625 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
626 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
627 : 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
628 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
629 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2,
630 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5,
631 : 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
632 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
633 : 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
634 : 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
635 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2,
636 : 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2,
637 : 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
638 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
639 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2,
640 : 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
641 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
642 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
643 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
644 : 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
645 : 2, 2, 0, 0, 0, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
646 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
647 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
648 : 0, 0, 107, 108, 109, 110, 110, 111, 112, 113, 114, 0, 0, 0, 0, 0, 0, 0,
649 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
650 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
651 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
652 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2,
653 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5,
654 : 5, 5, 5, 2, 5, 5, 5, 5, 2, 2, 2, 5, 5, 0, 2, 2, 0, 0,
655 : 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
656 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
657 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
658 : 5, 5, 5, 5, 5, 5, 5, 115, 5, 5, 5, 116, 5, 5, 2, 2, 2, 2,
659 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
660 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
661 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
662 : 0, 2, 2, 2, 2, 2, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
663 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
664 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
665 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
666 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
667 : 8, 9, 5, 5, 5, 5, 5, 117, 5, 5, 118, 5, 8, 9, 8, 9, 8, 9,
668 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
669 : 8, 9, 8, 9, 8, 9, 8, 9, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120,
670 : 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 0, 0, 120, 120, 120, 120,
671 : 120, 120, 0, 0, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120,
672 : 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120,
673 : 119, 119, 119, 119, 119, 119, 0, 0, 120, 120, 120, 120, 120, 120, 0, 0, 5, 119,
674 : 5, 119, 5, 119, 5, 119, 0, 120, 0, 120, 0, 120, 0, 120, 119, 119, 119, 119,
675 : 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 122, 122, 122, 122,
676 : 123, 123, 124, 124, 125, 125, 126, 126, 0, 0, 119, 119, 119, 119, 119, 119, 119, 119,
677 : 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120,
678 : 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120,
679 : 120, 120, 120, 120, 119, 119, 5, 127, 5, 0, 5, 5, 120, 120, 128, 128, 129, 0,
680 : 130, 0, 0, 0, 5, 127, 5, 0, 5, 5, 131, 131, 131, 131, 129, 0, 0, 0,
681 : 119, 119, 5, 5, 0, 0, 5, 5, 120, 120, 132, 132, 0, 0, 0, 0, 119, 119,
682 : 5, 5, 5, 95, 5, 5, 120, 120, 133, 133, 99, 0, 0, 0, 0, 0, 5, 127,
683 : 5, 0, 5, 5, 134, 134, 135, 135, 129, 0, 0, 0, 1, 1, 1, 1, 1, 1,
684 : 1, 1, 1, 1, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
685 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
686 : 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
687 : 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
688 : 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
689 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
690 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
691 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
692 : 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
693 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
694 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
695 : 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
696 : 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
697 : 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
698 : 5, 0, 0, 0, 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
699 : 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 5, 0,
700 : 136, 0, 5, 0, 137, 138, 5, 5, 5, 5, 5, 5, 139, 5, 5, 5, 5, 5,
701 : 5, 5, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
702 : 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
703 : 0, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
704 : 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
705 : 5, 5, 5, 8, 9, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
706 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
707 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
708 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
709 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
710 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
711 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 143, 143, 143, 143, 143, 143, 143,
712 : 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
713 : 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
714 : 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
715 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 103, 103,
716 : 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
717 : 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
718 : 103, 103, 103, 103, 103, 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
719 : 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
720 : 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 0,
721 : 8, 9, 145, 146, 147, 148, 149, 8, 9, 8, 9, 8, 9, 150, 151, 152, 153, 5,
722 : 8, 9, 5, 8, 9, 5, 5, 5, 5, 5, 5, 5, 154, 154, 8, 9, 8, 9,
723 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
724 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 5, 0, 0, 0,
725 : 0, 0, 0, 8, 9, 8, 9, 2, 2, 2, 8, 9, 0, 0, 0, 0, 0, 0,
726 : 0, 0, 0, 0, 0, 0, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
727 : 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
728 : 155, 155, 155, 155, 155, 155, 155, 155, 0, 155, 0, 0, 0, 0, 0, 155, 0, 0,
729 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
730 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
731 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
732 : 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
733 : 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
734 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,
735 : 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
736 : 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0,
737 : 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,
738 : 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 2, 2, 2, 2,
739 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
740 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 5, 5, 5,
741 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
742 : 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2,
743 : 2, 2, 2, 2, 0, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0,
744 : 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
745 : 5, 5, 5, 5, 5, 5, 5, 0, 0, 2, 2, 5, 5, 5, 5, 5, 0, 5,
746 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
747 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
748 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
749 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
750 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
751 : 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
752 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
753 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5,
754 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
755 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
756 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
757 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
758 : 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
759 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
760 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
761 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
762 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
763 : 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
764 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
765 : 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
766 : 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
767 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
768 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
769 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
770 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
771 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
772 : 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
773 : 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
774 : 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5,
775 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
776 : 0, 0, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
777 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
778 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 5, 2, 0, 0, 0, 0,
779 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 5, 8, 9, 8, 9, 8, 9,
780 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
781 : 8, 9, 8, 9, 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
782 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
783 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
784 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
785 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2,
786 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
787 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
788 : 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 8, 9, 8, 9, 8, 9,
789 : 8, 9, 8, 9, 8, 9, 8, 9, 5, 5, 8, 9, 8, 9, 8, 9, 8, 9,
790 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
791 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
792 : 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
793 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 9, 8, 9, 156, 8, 9, 8, 9,
794 : 8, 9, 8, 9, 8, 9, 5, 0, 0, 8, 9, 157, 5, 5, 8, 9, 8, 9,
795 : 5, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
796 : 8, 9, 8, 9, 158, 159, 160, 161, 158, 0, 162, 163, 164, 165, 8, 9, 8, 9,
797 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
798 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
799 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
800 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
801 : 5, 5, 2, 5, 5, 5, 2, 5, 5, 5, 5, 2, 5, 5, 5, 5, 5, 5,
802 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
803 : 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
804 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
805 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
806 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
807 : 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
808 : 0, 0, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
809 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
810 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
811 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
812 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
813 : 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
814 : 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5,
815 : 0, 5, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5,
816 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
817 : 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 5, 5,
818 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
819 : 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
820 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
821 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
822 : 5, 5, 5, 0, 0, 0, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5,
823 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
824 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
825 : 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
826 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2,
827 : 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 2,
828 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2,
829 : 2, 2, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
830 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
831 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2,
832 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
833 : 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 0, 0, 2, 2,
834 : 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
835 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
836 : 5, 0, 0, 0, 5, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
837 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
838 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
839 : 5, 5, 5, 5, 2, 5, 2, 2, 2, 5, 5, 2, 2, 5, 5, 5, 5, 5,
840 : 2, 2, 5, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
841 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 5, 5,
842 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 0, 0, 5, 5,
843 : 5, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
844 : 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0,
845 : 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,
846 : 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
847 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
848 : 5, 5, 5, 5, 5, 166, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5,
849 : 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167,
850 : 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
851 : 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
852 : 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
853 : 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
854 : 167, 167, 167, 167, 167, 167, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
855 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
856 : 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0,
857 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5,
858 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
859 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
860 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
861 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
862 : 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
863 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
864 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
865 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
866 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
867 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,
868 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
869 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
870 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
871 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
872 : 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
873 : 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 2, 5, 5, 5,
874 : 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
875 : 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 0, 5, 5, 0,
876 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
877 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
878 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
879 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
880 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
881 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
882 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
883 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
884 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
885 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
886 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
887 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
888 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
889 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
890 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
891 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
892 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
893 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
894 : 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
895 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
896 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
897 : 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
898 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
899 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
900 : 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
901 : 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
902 : 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
903 : 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
904 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2,
905 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
906 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
907 : 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
908 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
909 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
910 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
911 : 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
912 : 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
913 : 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
914 : 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 2, 0, 4, 4, 4,
915 : 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
916 : 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
917 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
918 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
919 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
920 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
921 : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
922 : 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5,
923 : 5, 5, 5, 5, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
924 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
925 : 0, 0, 0, 0, 0, 0, 0, 0,
926 : };
927 :
928 : const CodepointsWithSameUpperCaseInfo unicode::js_codepoints_with_same_upper_info[] = {
929 : { 0, 0, 0 },
930 : { 32, 0, 0 },
931 : { 32, 232, 0 },
932 : { 32, 300, 0 },
933 : { 0, 200, 0 },
934 : { 0, 268, 0 },
935 : { 0, 775, 0 },
936 : { 1, 0, 0 },
937 : { 65336, 0, 0 },
938 : { 65415, 0, 0 },
939 : { 65268, 0, 0 },
940 : { 210, 0, 0 },
941 : { 206, 0, 0 },
942 : { 205, 0, 0 },
943 : { 79, 0, 0 },
944 : { 202, 0, 0 },
945 : { 203, 0, 0 },
946 : { 207, 0, 0 },
947 : { 211, 0, 0 },
948 : { 209, 0, 0 },
949 : { 213, 0, 0 },
950 : { 214, 0, 0 },
951 : { 218, 0, 0 },
952 : { 217, 0, 0 },
953 : { 219, 0, 0 },
954 : { 1, 2, 0 },
955 : { 0, 1, 0 },
956 : { 65535, 0, 0 },
957 : { 65439, 0, 0 },
958 : { 65480, 0, 0 },
959 : { 65406, 0, 0 },
960 : { 10795, 0, 0 },
961 : { 65373, 0, 0 },
962 : { 10792, 0, 0 },
963 : { 65341, 0, 0 },
964 : { 69, 0, 0 },
965 : { 71, 0, 0 },
966 : { 0, 116, 7289 },
967 : { 116, 0, 0 },
968 : { 38, 0, 0 },
969 : { 37, 0, 0 },
970 : { 64, 0, 0 },
971 : { 63, 0, 0 },
972 : { 32, 62, 0 },
973 : { 32, 96, 0 },
974 : { 32, 57, 0 },
975 : { 65452, 32, 7205 },
976 : { 32, 86, 0 },
977 : { 64793, 32, 0 },
978 : { 32, 54, 0 },
979 : { 32, 80, 0 },
980 : { 31, 32, 0 },
981 : { 32, 47, 0 },
982 : { 0, 30, 0 },
983 : { 0, 64, 0 },
984 : { 0, 25, 0 },
985 : { 65420, 0, 7173 },
986 : { 0, 54, 0 },
987 : { 64761, 0, 0 },
988 : { 0, 22, 0 },
989 : { 0, 48, 0 },
990 : { 0, 15, 0 },
991 : { 8, 0, 0 },
992 : { 65506, 0, 0 },
993 : { 65511, 0, 0 },
994 : { 65521, 0, 0 },
995 : { 65514, 0, 0 },
996 : { 65482, 0, 0 },
997 : { 65488, 0, 0 },
998 : { 65472, 0, 0 },
999 : { 65529, 0, 0 },
1000 : { 80, 0, 0 },
1001 : { 32, 6254, 0 },
1002 : { 32, 6253, 0 },
1003 : { 32, 6244, 0 },
1004 : { 32, 6242, 0 },
1005 : { 32, 6242, 6243 },
1006 : { 32, 6236, 0 },
1007 : { 0, 6222, 0 },
1008 : { 0, 6221, 0 },
1009 : { 0, 6212, 0 },
1010 : { 0, 6210, 0 },
1011 : { 0, 6210, 6211 },
1012 : { 0, 6204, 0 },
1013 : { 1, 6181, 0 },
1014 : { 0, 6180, 0 },
1015 : { 15, 0, 0 },
1016 : { 48, 0, 0 },
1017 : { 7264, 0, 0 },
1018 : { 38864, 0, 0 },
1019 : { 59314, 0, 0 },
1020 : { 59315, 0, 0 },
1021 : { 59324, 0, 0 },
1022 : { 59326, 0, 0 },
1023 : { 59326, 0, 1 },
1024 : { 59325, 65535, 0 },
1025 : { 59332, 0, 0 },
1026 : { 59356, 0, 0 },
1027 : { 0, 35267, 0 },
1028 : { 1, 59, 0 },
1029 : { 0, 58, 0 },
1030 : { 65478, 0, 0 },
1031 : { 65528, 0, 0 },
1032 : { 65462, 0, 0 },
1033 : { 65527, 0, 0 },
1034 : { 58247, 58363, 0 },
1035 : { 65450, 0, 0 },
1036 : { 65436, 0, 0 },
1037 : { 65424, 0, 0 },
1038 : { 65408, 0, 0 },
1039 : { 65410, 0, 0 },
1040 : { 28, 0, 0 },
1041 : { 16, 0, 0 },
1042 : { 26, 0, 0 },
1043 : { 54793, 0, 0 },
1044 : { 61722, 0, 0 },
1045 : { 54809, 0, 0 },
1046 : { 54756, 0, 0 },
1047 : { 54787, 0, 0 },
1048 : { 54753, 0, 0 },
1049 : { 54754, 0, 0 },
1050 : { 54721, 0, 0 },
1051 : { 30270, 1, 0 },
1052 : { 30269, 0, 0 },
1053 : { 30204, 0, 0 },
1054 : { 23256, 0, 0 },
1055 : { 23228, 0, 0 },
1056 : { 23217, 0, 0 },
1057 : { 23221, 0, 0 },
1058 : { 23231, 0, 0 },
1059 : { 23278, 0, 0 },
1060 : { 23254, 0, 0 },
1061 : { 23275, 0, 0 },
1062 : { 928, 0, 0 },
1063 : };
1064 :
1065 : const uint8_t unicode::codepoints_with_same_upper_index1[] = {
1066 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 10, 11, 12, 13, 14,
1067 : 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1068 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1069 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, 0, 0,
1070 : 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1071 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1072 : 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 24, 25, 26, 24, 27, 28,
1073 : 29, 30, 0, 0, 0, 0, 31, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1074 : 0, 0, 34, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1075 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 24, 38,
1076 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1077 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1078 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1079 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1080 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1081 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1082 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1083 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1084 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1085 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1086 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1087 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1088 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1089 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1090 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1091 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1092 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1093 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1094 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1095 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1096 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1097 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1098 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1099 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1100 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1101 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1102 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39,
1103 : 40, 0, 41, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1104 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1105 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1106 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1107 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1108 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1109 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1110 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1111 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1112 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1113 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1114 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1115 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1116 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1117 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1118 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1119 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1120 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1121 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1122 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0,
1123 : };
1124 :
1125 : const uint8_t unicode::codepoints_with_same_upper_index2[] = {
1126 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1127 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1128 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1129 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
1130 : 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1,
1131 : 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
1132 : 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1133 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1134 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1135 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1136 : 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
1137 : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1138 : 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1139 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1140 : 0, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1141 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1142 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 0, 8,
1143 : 7, 0, 7, 0, 7, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7,
1144 : 0, 7, 0, 7, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1145 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1146 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 9, 7,
1147 : 0, 7, 0, 7, 0, 10, 0, 11, 7, 0, 7, 0, 12, 7, 0, 13, 13, 7,
1148 : 0, 0, 14, 15, 16, 7, 0, 13, 17, 0, 18, 19, 7, 0, 0, 0, 18, 20,
1149 : 0, 21, 7, 0, 7, 0, 7, 0, 22, 7, 0, 22, 0, 0, 7, 0, 22, 7,
1150 : 0, 23, 23, 7, 0, 7, 0, 24, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0,
1151 : 0, 0, 25, 26, 27, 25, 26, 27, 25, 26, 27, 7, 0, 7, 0, 7, 0, 7,
1152 : 0, 7, 0, 7, 0, 7, 0, 7, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1153 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 0, 25, 26, 27, 7, 0, 28, 29,
1154 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1155 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1156 : 7, 0, 7, 0, 30, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1157 : 7, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 31, 7, 0, 32, 33, 0,
1158 : 0, 7, 0, 34, 35, 36, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 0, 0,
1159 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1160 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1161 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0,
1162 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1163 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1164 : 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
1165 : 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 40, 40, 40, 0, 41, 0, 42, 42,
1166 : 0, 1, 43, 1, 1, 44, 1, 1, 45, 46, 47, 1, 48, 1, 1, 1, 49, 50,
1167 : 0, 51, 1, 1, 52, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 53, 0,
1168 : 0, 54, 0, 0, 55, 56, 57, 0, 58, 0, 0, 0, 59, 60, 26, 27, 0, 0,
1169 : 61, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 64, 0, 0, 0, 65, 66, 0,
1170 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1171 : 7, 0, 7, 0, 7, 0, 67, 68, 0, 0, 0, 69, 0, 7, 0, 70, 7, 0,
1172 : 0, 30, 30, 30, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
1173 : 71, 71, 1, 1, 72, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 1,
1174 : 1, 75, 76, 1, 1, 1, 1, 1, 1, 1, 77, 1, 1, 1, 1, 1, 0, 0,
1175 : 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 82, 0,
1176 : 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1177 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 84, 85, 7, 0, 7, 0,
1178 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1179 : 7, 0, 7, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
1180 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1181 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1182 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 86, 7,
1183 : 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 0, 7, 0, 7, 0,
1184 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1185 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1186 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1187 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1188 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1189 : 7, 0, 0, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
1190 : 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
1191 : 87, 87, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1192 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1193 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1194 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1195 : 0, 0, 0, 0, 0, 0, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
1196 : 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
1197 : 88, 88, 88, 88, 88, 88, 88, 88, 0, 88, 0, 0, 0, 0, 0, 88, 0, 0,
1198 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1199 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1200 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1201 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1202 : 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1203 : 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1204 : 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1205 : 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1206 : 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 62, 62,
1207 : 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, 93,
1208 : 94, 95, 96, 97, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1209 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1210 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1211 : 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1212 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1213 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1214 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1215 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1216 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 99, 100, 7, 0, 7, 0,
1217 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1218 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1219 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 101,
1220 : 0, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1221 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1222 : 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0,
1223 : 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0,
1224 : 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0,
1225 : 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0,
1226 : 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102,
1227 : 0, 102, 0, 102, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102,
1228 : 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1229 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
1230 : 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0,
1231 : 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0,
1232 : 0, 0, 0, 0, 102, 102, 103, 103, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0,
1233 : 0, 0, 106, 106, 106, 106, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1234 : 102, 102, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102,
1235 : 108, 108, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 110, 110,
1236 : 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1237 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1238 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1239 : 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1240 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1241 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 112, 112, 112, 112, 112,
1242 : 112, 112, 112, 112, 112, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1243 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0,
1244 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1245 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1246 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1247 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1248 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1249 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 113,
1250 : 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1251 : 113, 113, 113, 113, 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1252 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1253 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1254 : 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
1255 : 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
1256 : 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0,
1257 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1258 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1259 : 0, 0, 0, 0, 0, 0, 7, 0, 114, 115, 116, 0, 0, 7, 0, 7, 0, 7,
1260 : 0, 117, 118, 119, 120, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0,
1261 : 121, 121, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1262 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1263 : 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 7, 0,
1264 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 7, 0,
1265 : 7, 0, 7, 0, 122, 123, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1266 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1267 : 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1268 : 0, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1269 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 0, 0, 0, 0,
1270 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1271 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1272 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1273 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 7, 0,
1274 : 7, 0, 7, 0, 7, 0, 7, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1275 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1276 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1277 : 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1278 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 124, 7, 0, 7, 0,
1279 : 7, 0, 7, 0, 7, 0, 0, 0, 0, 7, 0, 125, 0, 0, 7, 0, 7, 0,
1280 : 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0,
1281 : 7, 0, 7, 0, 126, 127, 128, 129, 126, 0, 130, 131, 132, 133, 7, 0, 7, 0,
1282 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1283 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1284 : 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1285 : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
1286 : };
1287 :
1288 : const FoldingInfo unicode::js_foldinfo[] = {
1289 : { 0, 0, 0, 0 },
1290 : { 32, 0, 0, 0 },
1291 : { 32, 8415, 0, 0 },
1292 : { 32, 300, 0, 0 },
1293 : { 0, 65504, 0, 0 },
1294 : { 0, 65504, 8383, 0 },
1295 : { 0, 65504, 268, 0 },
1296 : { 775, 743, 0, 0 },
1297 : { 32, 8294, 0, 0 },
1298 : { 0, 7615, 0, 0 },
1299 : { 0, 65504, 8262, 0 },
1300 : { 0, 121, 0, 0 },
1301 : { 1, 0, 0, 0 },
1302 : { 0, 65535, 0, 0 },
1303 : { 65415, 0, 0, 0 },
1304 : { 65268, 65236, 0, 0 },
1305 : { 0, 195, 0, 0 },
1306 : { 210, 0, 0, 0 },
1307 : { 206, 0, 0, 0 },
1308 : { 205, 0, 0, 0 },
1309 : { 79, 0, 0, 0 },
1310 : { 202, 0, 0, 0 },
1311 : { 203, 0, 0, 0 },
1312 : { 207, 0, 0, 0 },
1313 : { 0, 97, 0, 0 },
1314 : { 211, 0, 0, 0 },
1315 : { 209, 0, 0, 0 },
1316 : { 0, 163, 0, 0 },
1317 : { 213, 0, 0, 0 },
1318 : { 0, 130, 0, 0 },
1319 : { 214, 0, 0, 0 },
1320 : { 218, 0, 0, 0 },
1321 : { 217, 0, 0, 0 },
1322 : { 219, 0, 0, 0 },
1323 : { 0, 56, 0, 0 },
1324 : { 2, 1, 0, 0 },
1325 : { 1, 65535, 0, 0 },
1326 : { 0, 65534, 65535, 0 },
1327 : { 0, 65457, 0, 0 },
1328 : { 65439, 0, 0, 0 },
1329 : { 65480, 0, 0, 0 },
1330 : { 65406, 0, 0, 0 },
1331 : { 10795, 0, 0, 0 },
1332 : { 65373, 0, 0, 0 },
1333 : { 10792, 0, 0, 0 },
1334 : { 0, 10815, 0, 0 },
1335 : { 65341, 0, 0, 0 },
1336 : { 69, 0, 0, 0 },
1337 : { 71, 0, 0, 0 },
1338 : { 0, 10783, 0, 0 },
1339 : { 0, 10780, 0, 0 },
1340 : { 0, 10782, 0, 0 },
1341 : { 0, 65326, 0, 0 },
1342 : { 0, 65330, 0, 0 },
1343 : { 0, 65331, 0, 0 },
1344 : { 0, 65334, 0, 0 },
1345 : { 0, 65333, 0, 0 },
1346 : { 0, 42319, 0, 0 },
1347 : { 0, 42315, 0, 0 },
1348 : { 0, 65329, 0, 0 },
1349 : { 0, 42280, 0, 0 },
1350 : { 0, 42308, 0, 0 },
1351 : { 0, 65327, 0, 0 },
1352 : { 0, 65325, 0, 0 },
1353 : { 0, 10743, 0, 0 },
1354 : { 0, 42305, 0, 0 },
1355 : { 0, 10749, 0, 0 },
1356 : { 0, 65323, 0, 0 },
1357 : { 0, 65322, 0, 0 },
1358 : { 0, 10727, 0, 0 },
1359 : { 0, 65318, 0, 0 },
1360 : { 0, 42282, 0, 0 },
1361 : { 0, 65467, 0, 0 },
1362 : { 0, 65319, 0, 0 },
1363 : { 0, 65465, 0, 0 },
1364 : { 0, 65317, 0, 0 },
1365 : { 0, 42261, 0, 0 },
1366 : { 0, 42258, 0, 0 },
1367 : { 116, 84, 7289, 0 },
1368 : { 116, 0, 0, 0 },
1369 : { 38, 0, 0, 0 },
1370 : { 37, 0, 0, 0 },
1371 : { 64, 0, 0, 0 },
1372 : { 63, 0, 0, 0 },
1373 : { 32, 62, 0, 0 },
1374 : { 32, 96, 0, 0 },
1375 : { 32, 57, 92, 0 },
1376 : { 32, 65452, 7205, 0 },
1377 : { 32, 86, 0, 0 },
1378 : { 32, 64793, 0, 0 },
1379 : { 32, 54, 0, 0 },
1380 : { 32, 80, 0, 0 },
1381 : { 32, 31, 0, 0 },
1382 : { 32, 47, 0, 0 },
1383 : { 32, 7549, 0, 0 },
1384 : { 0, 65498, 0, 0 },
1385 : { 0, 65499, 0, 0 },
1386 : { 0, 65504, 30, 0 },
1387 : { 0, 65504, 64, 0 },
1388 : { 0, 65504, 25, 60 },
1389 : { 0, 65420, 65504, 7173 },
1390 : { 0, 65504, 54, 0 },
1391 : { 0, 64761, 65504, 0 },
1392 : { 0, 65504, 22, 0 },
1393 : { 0, 65504, 48, 0 },
1394 : { 1, 65505, 0, 0 },
1395 : { 0, 65504, 65535, 0 },
1396 : { 0, 65504, 15, 0 },
1397 : { 0, 65504, 7517, 0 },
1398 : { 0, 65472, 0, 0 },
1399 : { 0, 65473, 0, 0 },
1400 : { 8, 0, 0, 0 },
1401 : { 65506, 65474, 0, 0 },
1402 : { 65511, 65479, 35, 0 },
1403 : { 65521, 65489, 0, 0 },
1404 : { 65514, 65482, 0, 0 },
1405 : { 0, 65528, 0, 0 },
1406 : { 65482, 65450, 0, 0 },
1407 : { 65488, 65456, 0, 0 },
1408 : { 0, 7, 0, 0 },
1409 : { 0, 65420, 0, 0 },
1410 : { 65476, 65444, 65501, 0 },
1411 : { 65472, 65440, 0, 0 },
1412 : { 65529, 0, 0, 0 },
1413 : { 80, 0, 0, 0 },
1414 : { 32, 6254, 0, 0 },
1415 : { 32, 6253, 0, 0 },
1416 : { 32, 6244, 0, 0 },
1417 : { 32, 6242, 0, 0 },
1418 : { 32, 6242, 6243, 0 },
1419 : { 32, 6236, 0, 0 },
1420 : { 0, 65504, 6222, 0 },
1421 : { 0, 65504, 6221, 0 },
1422 : { 0, 65504, 6212, 0 },
1423 : { 0, 65504, 6210, 0 },
1424 : { 0, 65504, 6210, 6211 },
1425 : { 0, 65504, 6204, 0 },
1426 : { 0, 65456, 0, 0 },
1427 : { 1, 6181, 0, 0 },
1428 : { 0, 65535, 6180, 0 },
1429 : { 15, 0, 0, 0 },
1430 : { 0, 65521, 0, 0 },
1431 : { 48, 0, 0, 0 },
1432 : { 0, 65488, 0, 0 },
1433 : { 7264, 0, 0, 0 },
1434 : { 0, 38864, 0, 0 },
1435 : { 0, 8, 0, 0 },
1436 : { 65528, 0, 0, 0 },
1437 : { 59314, 59282, 0, 0 },
1438 : { 59315, 59283, 0, 0 },
1439 : { 59324, 59292, 0, 0 },
1440 : { 59326, 59294, 0, 0 },
1441 : { 59326, 59294, 1, 0 },
1442 : { 59325, 59293, 65535, 0 },
1443 : { 59332, 59300, 0, 0 },
1444 : { 59356, 59355, 0, 0 },
1445 : { 35267, 35266, 0, 0 },
1446 : { 0, 35332, 0, 0 },
1447 : { 0, 3814, 0, 0 },
1448 : { 1, 59, 0, 0 },
1449 : { 0, 65535, 58, 0 },
1450 : { 65478, 65477, 0, 0 },
1451 : { 57921, 0, 0, 0 },
1452 : { 0, 74, 0, 0 },
1453 : { 0, 86, 0, 0 },
1454 : { 0, 100, 0, 0 },
1455 : { 0, 128, 0, 0 },
1456 : { 0, 112, 0, 0 },
1457 : { 0, 126, 0, 0 },
1458 : { 0, 9, 0, 0 },
1459 : { 65462, 0, 0, 0 },
1460 : { 65527, 0, 0, 0 },
1461 : { 58363, 58247, 58331, 0 },
1462 : { 65450, 0, 0, 0 },
1463 : { 65436, 0, 0, 0 },
1464 : { 65424, 0, 0, 0 },
1465 : { 65408, 0, 0, 0 },
1466 : { 65410, 0, 0, 0 },
1467 : { 58019, 57987, 0, 0 },
1468 : { 57153, 57121, 0, 0 },
1469 : { 57274, 57242, 0, 0 },
1470 : { 28, 0, 0, 0 },
1471 : { 0, 65508, 0, 0 },
1472 : { 16, 0, 0, 0 },
1473 : { 0, 65520, 0, 0 },
1474 : { 26, 0, 0, 0 },
1475 : { 0, 65510, 0, 0 },
1476 : { 54793, 0, 0, 0 },
1477 : { 61722, 0, 0, 0 },
1478 : { 54809, 0, 0, 0 },
1479 : { 0, 54741, 0, 0 },
1480 : { 0, 54744, 0, 0 },
1481 : { 54756, 0, 0, 0 },
1482 : { 54787, 0, 0, 0 },
1483 : { 54753, 0, 0, 0 },
1484 : { 54754, 0, 0, 0 },
1485 : { 54721, 0, 0, 0 },
1486 : { 0, 58272, 0, 0 },
1487 : { 1, 30270, 0, 0 },
1488 : { 0, 30269, 65535, 0 },
1489 : { 30204, 0, 0, 0 },
1490 : { 23256, 0, 0, 0 },
1491 : { 23228, 0, 0, 0 },
1492 : { 23217, 0, 0, 0 },
1493 : { 23221, 0, 0, 0 },
1494 : { 23231, 0, 0, 0 },
1495 : { 23278, 0, 0, 0 },
1496 : { 23254, 0, 0, 0 },
1497 : { 23275, 0, 0, 0 },
1498 : { 928, 0, 0, 0 },
1499 : { 0, 64608, 0, 0 },
1500 : { 26672, 0, 0, 0 },
1501 : };
1502 :
1503 : const uint8_t unicode::folding_index1[] = {
1504 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 11, 12, 13, 14, 15,
1505 : 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1506 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1507 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0,
1508 : 0, 0, 0, 0, 0, 0, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1509 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1510 : 0, 0, 0, 0, 0, 0, 25, 0, 0, 26, 0, 0, 27, 28, 29, 27, 30, 31,
1511 : 32, 33, 0, 0, 0, 0, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1512 : 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1513 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 40, 27, 41,
1514 : 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1515 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1516 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1517 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1518 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1519 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1520 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1521 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1522 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1523 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1524 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1525 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1526 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1527 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1528 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1529 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1530 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1531 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1532 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1533 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1534 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1535 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1536 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1537 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1538 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1539 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1540 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,
1541 : 44, 0, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1542 : 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1543 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1544 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1545 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1546 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1547 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1548 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1549 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1550 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1551 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1552 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1553 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1554 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1555 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1556 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1557 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1558 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1559 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1560 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0,
1561 : };
1562 :
1563 : const uint8_t unicode::folding_index2[] = {
1564 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1565 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1566 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1567 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
1568 : 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1,
1569 : 1, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
1570 : 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
1571 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1572 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1573 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1574 : 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8,
1575 : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1576 : 1, 1, 1, 1, 1, 1, 1, 9, 4, 4, 4, 4, 4, 10, 4, 4, 4, 4,
1577 : 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4,
1578 : 4, 4, 4, 11, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1579 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1580 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 0, 0,
1581 : 12, 13, 12, 13, 12, 13, 0, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12,
1582 : 13, 12, 13, 12, 13, 0, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1583 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1584 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 14, 12,
1585 : 13, 12, 13, 12, 13, 15, 16, 17, 12, 13, 12, 13, 18, 12, 13, 19, 19, 12,
1586 : 13, 0, 20, 21, 22, 12, 13, 19, 23, 24, 25, 26, 12, 13, 27, 0, 25, 28,
1587 : 29, 30, 12, 13, 12, 13, 12, 13, 31, 12, 13, 31, 0, 0, 12, 13, 31, 12,
1588 : 13, 32, 32, 12, 13, 12, 13, 33, 12, 13, 0, 0, 12, 13, 0, 34, 0, 0,
1589 : 0, 0, 35, 36, 37, 35, 36, 37, 35, 36, 37, 12, 13, 12, 13, 12, 13, 12,
1590 : 13, 12, 13, 12, 13, 12, 13, 12, 13, 38, 12, 13, 12, 13, 12, 13, 12, 13,
1591 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 0, 35, 36, 37, 12, 13, 39, 40,
1592 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1593 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1594 : 12, 13, 12, 13, 41, 0, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1595 : 12, 13, 12, 13, 12, 13, 0, 0, 0, 0, 0, 0, 42, 12, 13, 43, 44, 45,
1596 : 45, 12, 13, 46, 47, 48, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 49, 50,
1597 : 51, 52, 53, 0, 54, 54, 0, 55, 0, 56, 57, 0, 0, 0, 54, 58, 0, 59,
1598 : 0, 60, 61, 0, 62, 63, 61, 64, 65, 0, 0, 63, 0, 66, 67, 0, 0, 68,
1599 : 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 70, 0, 0, 0, 71,
1600 : 70, 72, 73, 73, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0,
1601 : 0, 0, 0, 76, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1602 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1603 : 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1604 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1605 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 12, 13,
1606 : 0, 0, 12, 13, 0, 0, 0, 29, 29, 29, 0, 79, 0, 0, 0, 0, 0, 0,
1607 : 80, 0, 81, 81, 81, 0, 82, 0, 83, 83, 0, 1, 84, 1, 1, 85, 1, 1,
1608 : 86, 87, 88, 1, 89, 1, 1, 1, 90, 91, 0, 92, 1, 1, 93, 1, 1, 94,
1609 : 1, 1, 95, 96, 96, 96, 0, 4, 97, 4, 4, 98, 4, 4, 99, 100, 101, 4,
1610 : 102, 4, 4, 4, 103, 104, 105, 106, 4, 4, 107, 4, 4, 108, 4, 4, 109, 110,
1611 : 110, 111, 112, 113, 0, 0, 0, 114, 115, 116, 12, 13, 12, 13, 12, 13, 12, 13,
1612 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 117, 118,
1613 : 119, 120, 121, 122, 0, 12, 13, 123, 12, 13, 0, 41, 41, 41, 124, 124, 124, 124,
1614 : 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 1, 1, 125, 1, 126, 1,
1615 : 1, 1, 1, 1, 1, 1, 1, 1, 127, 1, 1, 128, 129, 1, 1, 1, 1, 1,
1616 : 1, 1, 130, 1, 1, 1, 1, 1, 4, 4, 131, 4, 132, 4, 4, 4, 4, 4,
1617 : 4, 4, 4, 4, 133, 4, 4, 134, 135, 4, 4, 4, 4, 4, 4, 4, 136, 4,
1618 : 4, 4, 4, 4, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
1619 : 137, 137, 12, 13, 138, 139, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1620 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1621 : 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1622 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1623 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1624 : 12, 13, 12, 13, 12, 13, 12, 13, 140, 12, 13, 12, 13, 12, 13, 12, 13, 12,
1625 : 13, 12, 13, 12, 13, 141, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1626 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1627 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1628 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1629 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1630 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 0, 142, 142, 142, 142, 142,
1631 : 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
1632 : 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0,
1633 : 0, 0, 0, 0, 0, 0, 0, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
1634 : 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
1635 : 143, 143, 143, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1636 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1637 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1638 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1639 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1640 : 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1641 : 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1642 : 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 144, 0, 0, 0, 0, 0, 144,
1643 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1644 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1645 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1646 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1647 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145,
1648 : 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1649 : 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1650 : 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1651 : 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1652 : 146, 146, 146, 146, 146, 146, 0, 0, 147, 147, 147, 147, 147, 147, 0, 0, 148, 149,
1653 : 150, 151, 152, 153, 154, 155, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1654 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1655 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1656 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1657 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1658 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1659 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 158, 0, 0,
1660 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1661 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1662 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1663 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1664 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1665 : 12, 13, 12, 13, 12, 13, 159, 160, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1666 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1667 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1668 : 12, 13, 12, 13, 12, 13, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 12, 13,
1669 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1670 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 146, 146, 146, 146, 146, 146,
1671 : 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 0, 0,
1672 : 147, 147, 147, 147, 147, 147, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147,
1673 : 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147,
1674 : 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 0, 0, 147, 147, 147, 147, 147, 147,
1675 : 0, 0, 0, 146, 0, 146, 0, 146, 0, 146, 0, 147, 0, 147, 0, 147, 0, 147,
1676 : 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 163, 163,
1677 : 164, 164, 164, 164, 165, 165, 166, 166, 167, 167, 168, 168, 0, 0, 146, 146, 146, 146,
1678 : 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146,
1679 : 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146,
1680 : 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 0, 169, 0, 0, 0, 0, 147, 147,
1681 : 170, 170, 171, 0, 172, 0, 0, 0, 0, 169, 0, 0, 0, 0, 173, 173, 173, 173,
1682 : 171, 0, 0, 0, 146, 146, 0, 0, 0, 0, 0, 0, 147, 147, 174, 174, 0, 0,
1683 : 0, 0, 146, 146, 0, 0, 0, 119, 0, 0, 147, 147, 175, 175, 123, 0, 0, 0,
1684 : 0, 0, 0, 169, 0, 0, 0, 0, 176, 176, 177, 177, 171, 0, 0, 0, 0, 0,
1685 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1686 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1687 : 178, 0, 0, 0, 179, 180, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0,
1688 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1689 : 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1690 : 0, 0, 0, 0, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
1691 : 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
1692 : 0, 0, 0, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1693 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1694 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1695 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1696 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1697 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1698 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 185, 185, 185, 185, 185,
1699 : 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1700 : 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1701 : 186, 186, 186, 186, 186, 186, 186, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1702 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142,
1703 : 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
1704 : 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
1705 : 142, 142, 142, 142, 142, 0, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
1706 : 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
1707 : 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
1708 : 12, 13, 187, 188, 189, 190, 191, 12, 13, 12, 13, 12, 13, 192, 193, 194, 195, 0,
1709 : 12, 13, 0, 12, 13, 0, 0, 0, 0, 0, 0, 0, 196, 196, 12, 13, 12, 13,
1710 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1711 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 0, 0, 0, 0,
1712 : 0, 0, 0, 12, 13, 12, 13, 0, 0, 0, 12, 13, 0, 0, 0, 0, 0, 0,
1713 : 0, 0, 0, 0, 0, 0, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
1714 : 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
1715 : 197, 197, 197, 197, 197, 197, 197, 197, 0, 197, 0, 0, 0, 0, 0, 197, 0, 0,
1716 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
1717 : 12, 13, 12, 13, 12, 13, 12, 13, 198, 199, 12, 13, 12, 13, 12, 13, 12, 13,
1718 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1719 : 12, 13, 12, 13, 12, 13, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1720 : 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1721 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1722 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1723 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1724 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1725 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
1726 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 0, 0, 12, 13, 12, 13,
1727 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1728 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1729 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1730 : 12, 13, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 12, 13, 200,
1731 : 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 0, 0, 0, 12, 13, 201, 0, 0,
1732 : 12, 13, 12, 13, 0, 0, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
1733 : 12, 13, 12, 13, 12, 13, 12, 13, 202, 203, 204, 205, 202, 0, 206, 207, 208, 209,
1734 : 12, 13, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1735 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0,
1736 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1737 : 0, 0, 0, 0, 0, 0, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
1738 : 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
1739 : 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
1740 : 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
1741 : 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 0, 0, 0, 0,
1742 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1743 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
1744 : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1745 : 1, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
1746 : 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
1747 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1748 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1749 : };
1750 :
1751 : bool
1752 0 : js::unicode::IsIdentifierStartNonBMP(uint32_t codePoint)
1753 : {
1754 0 : if (codePoint >= 0x10000 && codePoint <= 0x1000B) // LINEAR B SYLLABLE B008 A .. LINEAR B SYLLABLE B046 JE
1755 0 : return true;
1756 0 : if (codePoint >= 0x1000D && codePoint <= 0x10026) // LINEAR B SYLLABLE B036 JO .. LINEAR B SYLLABLE B032 QO
1757 0 : return true;
1758 0 : if (codePoint >= 0x10028 && codePoint <= 0x1003A) // LINEAR B SYLLABLE B060 RA .. LINEAR B SYLLABLE B042 WO
1759 0 : return true;
1760 0 : if (codePoint >= 0x1003C && codePoint <= 0x1003D) // LINEAR B SYLLABLE B017 ZA .. LINEAR B SYLLABLE B074 ZE
1761 0 : return true;
1762 0 : if (codePoint >= 0x1003F && codePoint <= 0x1004D) // LINEAR B SYLLABLE B020 ZO .. LINEAR B SYLLABLE B091 TWO
1763 0 : return true;
1764 0 : if (codePoint >= 0x10050 && codePoint <= 0x1005D) // LINEAR B SYMBOL B018 .. LINEAR B SYMBOL B089
1765 0 : return true;
1766 0 : if (codePoint >= 0x10080 && codePoint <= 0x100FA) // LINEAR B IDEOGRAM B100 MAN .. LINEAR B IDEOGRAM VESSEL B305
1767 0 : return true;
1768 0 : if (codePoint >= 0x10140 && codePoint <= 0x10174) // GREEK ACROPHONIC ATTIC ONE QUARTER .. GREEK ACROPHONIC STRATIAN FIFTY MNAS
1769 0 : return true;
1770 0 : if (codePoint >= 0x10280 && codePoint <= 0x1029C) // LYCIAN LETTER A .. LYCIAN LETTER X
1771 0 : return true;
1772 0 : if (codePoint >= 0x102A0 && codePoint <= 0x102D0) // CARIAN LETTER A .. CARIAN LETTER UUU3
1773 0 : return true;
1774 0 : if (codePoint >= 0x10300 && codePoint <= 0x1031F) // OLD ITALIC LETTER A .. OLD ITALIC LETTER ESS
1775 0 : return true;
1776 0 : if (codePoint >= 0x10330 && codePoint <= 0x1034A) // GOTHIC LETTER AHSA .. GOTHIC LETTER NINE HUNDRED
1777 0 : return true;
1778 0 : if (codePoint >= 0x10350 && codePoint <= 0x10375) // OLD PERMIC LETTER AN .. OLD PERMIC LETTER IA
1779 0 : return true;
1780 0 : if (codePoint >= 0x10380 && codePoint <= 0x1039D) // UGARITIC LETTER ALPA .. UGARITIC LETTER SSU
1781 0 : return true;
1782 0 : if (codePoint >= 0x103A0 && codePoint <= 0x103C3) // OLD PERSIAN SIGN A .. OLD PERSIAN SIGN HA
1783 0 : return true;
1784 0 : if (codePoint >= 0x103C8 && codePoint <= 0x103CF) // OLD PERSIAN SIGN AURAMAZDAA .. OLD PERSIAN SIGN BUUMISH
1785 0 : return true;
1786 0 : if (codePoint >= 0x103D1 && codePoint <= 0x103D5) // OLD PERSIAN NUMBER ONE .. OLD PERSIAN NUMBER HUNDRED
1787 0 : return true;
1788 0 : if (codePoint >= 0x10400 && codePoint <= 0x1049D) // DESERET CAPITAL LETTER LONG I .. OSMANYA LETTER OO
1789 0 : return true;
1790 0 : if (codePoint >= 0x104B0 && codePoint <= 0x104D3) // OSAGE CAPITAL LETTER A .. OSAGE CAPITAL LETTER ZHA
1791 0 : return true;
1792 0 : if (codePoint >= 0x104D8 && codePoint <= 0x104FB) // OSAGE SMALL LETTER A .. OSAGE SMALL LETTER ZHA
1793 0 : return true;
1794 0 : if (codePoint >= 0x10500 && codePoint <= 0x10527) // ELBASAN LETTER A .. ELBASAN LETTER KHE
1795 0 : return true;
1796 0 : if (codePoint >= 0x10530 && codePoint <= 0x10563) // CAUCASIAN ALBANIAN LETTER ALT .. CAUCASIAN ALBANIAN LETTER KIW
1797 0 : return true;
1798 0 : if (codePoint >= 0x10600 && codePoint <= 0x10736) // LINEAR A SIGN AB001 .. LINEAR A SIGN A664
1799 0 : return true;
1800 0 : if (codePoint >= 0x10740 && codePoint <= 0x10755) // LINEAR A SIGN A701 A .. LINEAR A SIGN A732 JE
1801 0 : return true;
1802 0 : if (codePoint >= 0x10760 && codePoint <= 0x10767) // LINEAR A SIGN A800 .. LINEAR A SIGN A807
1803 0 : return true;
1804 0 : if (codePoint >= 0x10800 && codePoint <= 0x10805) // CYPRIOT SYLLABLE A .. CYPRIOT SYLLABLE JA
1805 0 : return true;
1806 0 : if (codePoint >= 0x10808 && codePoint <= 0x10808) // CYPRIOT SYLLABLE JO .. CYPRIOT SYLLABLE JO
1807 0 : return true;
1808 0 : if (codePoint >= 0x1080A && codePoint <= 0x10835) // CYPRIOT SYLLABLE KA .. CYPRIOT SYLLABLE WO
1809 0 : return true;
1810 0 : if (codePoint >= 0x10837 && codePoint <= 0x10838) // CYPRIOT SYLLABLE XA .. CYPRIOT SYLLABLE XE
1811 0 : return true;
1812 0 : if (codePoint >= 0x1083C && codePoint <= 0x1083C) // CYPRIOT SYLLABLE ZA .. CYPRIOT SYLLABLE ZA
1813 0 : return true;
1814 0 : if (codePoint >= 0x1083F && codePoint <= 0x10855) // CYPRIOT SYLLABLE ZO .. IMPERIAL ARAMAIC LETTER TAW
1815 0 : return true;
1816 0 : if (codePoint >= 0x10860 && codePoint <= 0x10876) // PALMYRENE LETTER ALEPH .. PALMYRENE LETTER TAW
1817 0 : return true;
1818 0 : if (codePoint >= 0x10880 && codePoint <= 0x1089E) // NABATAEAN LETTER FINAL ALEPH .. NABATAEAN LETTER TAW
1819 0 : return true;
1820 0 : if (codePoint >= 0x108E0 && codePoint <= 0x108F2) // HATRAN LETTER ALEPH .. HATRAN LETTER QOPH
1821 0 : return true;
1822 0 : if (codePoint >= 0x108F4 && codePoint <= 0x108F5) // HATRAN LETTER SHIN .. HATRAN LETTER TAW
1823 0 : return true;
1824 0 : if (codePoint >= 0x10900 && codePoint <= 0x10915) // PHOENICIAN LETTER ALF .. PHOENICIAN LETTER TAU
1825 0 : return true;
1826 0 : if (codePoint >= 0x10920 && codePoint <= 0x10939) // LYDIAN LETTER A .. LYDIAN LETTER C
1827 0 : return true;
1828 0 : if (codePoint >= 0x10980 && codePoint <= 0x109B7) // MEROITIC HIEROGLYPHIC LETTER A .. MEROITIC CURSIVE LETTER DA
1829 0 : return true;
1830 0 : if (codePoint >= 0x109BE && codePoint <= 0x109BF) // MEROITIC CURSIVE LOGOGRAM RMT .. MEROITIC CURSIVE LOGOGRAM IMN
1831 0 : return true;
1832 0 : if (codePoint >= 0x10A00 && codePoint <= 0x10A00) // KHAROSHTHI LETTER A .. KHAROSHTHI LETTER A
1833 0 : return true;
1834 0 : if (codePoint >= 0x10A10 && codePoint <= 0x10A13) // KHAROSHTHI LETTER KA .. KHAROSHTHI LETTER GHA
1835 0 : return true;
1836 0 : if (codePoint >= 0x10A15 && codePoint <= 0x10A17) // KHAROSHTHI LETTER CA .. KHAROSHTHI LETTER JA
1837 0 : return true;
1838 0 : if (codePoint >= 0x10A19 && codePoint <= 0x10A33) // KHAROSHTHI LETTER NYA .. KHAROSHTHI LETTER TTTHA
1839 0 : return true;
1840 0 : if (codePoint >= 0x10A60 && codePoint <= 0x10A7C) // OLD SOUTH ARABIAN LETTER HE .. OLD SOUTH ARABIAN LETTER THETH
1841 0 : return true;
1842 0 : if (codePoint >= 0x10A80 && codePoint <= 0x10A9C) // OLD NORTH ARABIAN LETTER HEH .. OLD NORTH ARABIAN LETTER ZAH
1843 0 : return true;
1844 0 : if (codePoint >= 0x10AC0 && codePoint <= 0x10AC7) // MANICHAEAN LETTER ALEPH .. MANICHAEAN LETTER WAW
1845 0 : return true;
1846 0 : if (codePoint >= 0x10AC9 && codePoint <= 0x10AE4) // MANICHAEAN LETTER ZAYIN .. MANICHAEAN LETTER TAW
1847 0 : return true;
1848 0 : if (codePoint >= 0x10B00 && codePoint <= 0x10B35) // AVESTAN LETTER A .. AVESTAN LETTER HE
1849 0 : return true;
1850 0 : if (codePoint >= 0x10B40 && codePoint <= 0x10B55) // INSCRIPTIONAL PARTHIAN LETTER ALEPH .. INSCRIPTIONAL PARTHIAN LETTER TAW
1851 0 : return true;
1852 0 : if (codePoint >= 0x10B60 && codePoint <= 0x10B72) // INSCRIPTIONAL PAHLAVI LETTER ALEPH .. INSCRIPTIONAL PAHLAVI LETTER TAW
1853 0 : return true;
1854 0 : if (codePoint >= 0x10B80 && codePoint <= 0x10B91) // PSALTER PAHLAVI LETTER ALEPH .. PSALTER PAHLAVI LETTER TAW
1855 0 : return true;
1856 0 : if (codePoint >= 0x10C00 && codePoint <= 0x10C48) // OLD TURKIC LETTER ORKHON A .. OLD TURKIC LETTER ORKHON BASH
1857 0 : return true;
1858 0 : if (codePoint >= 0x10C80 && codePoint <= 0x10CB2) // OLD HUNGARIAN CAPITAL LETTER A .. OLD HUNGARIAN CAPITAL LETTER US
1859 0 : return true;
1860 0 : if (codePoint >= 0x10CC0 && codePoint <= 0x10CF2) // OLD HUNGARIAN SMALL LETTER A .. OLD HUNGARIAN SMALL LETTER US
1861 0 : return true;
1862 0 : if (codePoint >= 0x11003 && codePoint <= 0x11037) // BRAHMI SIGN JIHVAMULIYA .. BRAHMI LETTER OLD TAMIL NNNA
1863 0 : return true;
1864 0 : if (codePoint >= 0x11083 && codePoint <= 0x110AF) // KAITHI LETTER A .. KAITHI LETTER HA
1865 0 : return true;
1866 0 : if (codePoint >= 0x110D0 && codePoint <= 0x110E8) // SORA SOMPENG LETTER SAH .. SORA SOMPENG LETTER MAE
1867 0 : return true;
1868 0 : if (codePoint >= 0x11103 && codePoint <= 0x11126) // CHAKMA LETTER AA .. CHAKMA LETTER HAA
1869 0 : return true;
1870 0 : if (codePoint >= 0x11150 && codePoint <= 0x11172) // MAHAJANI LETTER A .. MAHAJANI LETTER RRA
1871 0 : return true;
1872 0 : if (codePoint >= 0x11176 && codePoint <= 0x11176) // MAHAJANI LIGATURE SHRI .. MAHAJANI LIGATURE SHRI
1873 0 : return true;
1874 0 : if (codePoint >= 0x11183 && codePoint <= 0x111B2) // SHARADA LETTER A .. SHARADA LETTER HA
1875 0 : return true;
1876 0 : if (codePoint >= 0x111C1 && codePoint <= 0x111C4) // SHARADA SIGN AVAGRAHA .. SHARADA OM
1877 0 : return true;
1878 0 : if (codePoint >= 0x111DA && codePoint <= 0x111DA) // SHARADA EKAM .. SHARADA EKAM
1879 0 : return true;
1880 0 : if (codePoint >= 0x111DC && codePoint <= 0x111DC) // SHARADA HEADSTROKE .. SHARADA HEADSTROKE
1881 0 : return true;
1882 0 : if (codePoint >= 0x11200 && codePoint <= 0x11211) // KHOJKI LETTER A .. KHOJKI LETTER JJA
1883 0 : return true;
1884 0 : if (codePoint >= 0x11213 && codePoint <= 0x1122B) // KHOJKI LETTER NYA .. KHOJKI LETTER LLA
1885 0 : return true;
1886 0 : if (codePoint >= 0x11280 && codePoint <= 0x11286) // MULTANI LETTER A .. MULTANI LETTER GA
1887 0 : return true;
1888 0 : if (codePoint >= 0x11288 && codePoint <= 0x11288) // MULTANI LETTER GHA .. MULTANI LETTER GHA
1889 0 : return true;
1890 0 : if (codePoint >= 0x1128A && codePoint <= 0x1128D) // MULTANI LETTER CA .. MULTANI LETTER JJA
1891 0 : return true;
1892 0 : if (codePoint >= 0x1128F && codePoint <= 0x1129D) // MULTANI LETTER NYA .. MULTANI LETTER BA
1893 0 : return true;
1894 0 : if (codePoint >= 0x1129F && codePoint <= 0x112A8) // MULTANI LETTER BHA .. MULTANI LETTER RHA
1895 0 : return true;
1896 0 : if (codePoint >= 0x112B0 && codePoint <= 0x112DE) // KHUDAWADI LETTER A .. KHUDAWADI LETTER HA
1897 0 : return true;
1898 0 : if (codePoint >= 0x11305 && codePoint <= 0x1130C) // GRANTHA LETTER A .. GRANTHA LETTER VOCALIC L
1899 0 : return true;
1900 0 : if (codePoint >= 0x1130F && codePoint <= 0x11310) // GRANTHA LETTER EE .. GRANTHA LETTER AI
1901 0 : return true;
1902 0 : if (codePoint >= 0x11313 && codePoint <= 0x11328) // GRANTHA LETTER OO .. GRANTHA LETTER NA
1903 0 : return true;
1904 0 : if (codePoint >= 0x1132A && codePoint <= 0x11330) // GRANTHA LETTER PA .. GRANTHA LETTER RA
1905 0 : return true;
1906 0 : if (codePoint >= 0x11332 && codePoint <= 0x11333) // GRANTHA LETTER LA .. GRANTHA LETTER LLA
1907 0 : return true;
1908 0 : if (codePoint >= 0x11335 && codePoint <= 0x11339) // GRANTHA LETTER VA .. GRANTHA LETTER HA
1909 0 : return true;
1910 0 : if (codePoint >= 0x1133D && codePoint <= 0x1133D) // GRANTHA SIGN AVAGRAHA .. GRANTHA SIGN AVAGRAHA
1911 0 : return true;
1912 0 : if (codePoint >= 0x11350 && codePoint <= 0x11350) // GRANTHA OM .. GRANTHA OM
1913 0 : return true;
1914 0 : if (codePoint >= 0x1135D && codePoint <= 0x11361) // GRANTHA SIGN PLUTA .. GRANTHA LETTER VOCALIC LL
1915 0 : return true;
1916 0 : if (codePoint >= 0x11400 && codePoint <= 0x11434) // NEWA LETTER A .. NEWA LETTER HA
1917 0 : return true;
1918 0 : if (codePoint >= 0x11447 && codePoint <= 0x1144A) // NEWA SIGN AVAGRAHA .. NEWA SIDDHI
1919 0 : return true;
1920 0 : if (codePoint >= 0x11480 && codePoint <= 0x114AF) // TIRHUTA ANJI .. TIRHUTA LETTER HA
1921 0 : return true;
1922 0 : if (codePoint >= 0x114C4 && codePoint <= 0x114C5) // TIRHUTA SIGN AVAGRAHA .. TIRHUTA GVANG
1923 0 : return true;
1924 0 : if (codePoint >= 0x114C7 && codePoint <= 0x114C7) // TIRHUTA OM .. TIRHUTA OM
1925 0 : return true;
1926 0 : if (codePoint >= 0x11580 && codePoint <= 0x115AE) // SIDDHAM LETTER A .. SIDDHAM LETTER HA
1927 0 : return true;
1928 0 : if (codePoint >= 0x115D8 && codePoint <= 0x115DB) // SIDDHAM LETTER THREE-CIRCLE ALTERNATE I .. SIDDHAM LETTER ALTERNATE U
1929 0 : return true;
1930 0 : if (codePoint >= 0x11600 && codePoint <= 0x1162F) // MODI LETTER A .. MODI LETTER LLA
1931 0 : return true;
1932 0 : if (codePoint >= 0x11644 && codePoint <= 0x11644) // MODI SIGN HUVA .. MODI SIGN HUVA
1933 0 : return true;
1934 0 : if (codePoint >= 0x11680 && codePoint <= 0x116AA) // TAKRI LETTER A .. TAKRI LETTER RRA
1935 0 : return true;
1936 0 : if (codePoint >= 0x11700 && codePoint <= 0x11719) // AHOM LETTER KA .. AHOM LETTER JHA
1937 0 : return true;
1938 0 : if (codePoint >= 0x118A0 && codePoint <= 0x118DF) // WARANG CITI CAPITAL LETTER NGAA .. WARANG CITI SMALL LETTER VIYO
1939 0 : return true;
1940 0 : if (codePoint >= 0x118FF && codePoint <= 0x118FF) // WARANG CITI OM .. WARANG CITI OM
1941 0 : return true;
1942 0 : if (codePoint >= 0x11AC0 && codePoint <= 0x11AF8) // PAU CIN HAU LETTER PA .. PAU CIN HAU GLOTTAL STOP FINAL
1943 0 : return true;
1944 0 : if (codePoint >= 0x11C00 && codePoint <= 0x11C08) // BHAIKSUKI LETTER A .. BHAIKSUKI LETTER VOCALIC L
1945 0 : return true;
1946 0 : if (codePoint >= 0x11C0A && codePoint <= 0x11C2E) // BHAIKSUKI LETTER E .. BHAIKSUKI LETTER HA
1947 0 : return true;
1948 0 : if (codePoint >= 0x11C40 && codePoint <= 0x11C40) // BHAIKSUKI SIGN AVAGRAHA .. BHAIKSUKI SIGN AVAGRAHA
1949 0 : return true;
1950 0 : if (codePoint >= 0x11C72 && codePoint <= 0x11C8F) // MARCHEN LETTER KA .. MARCHEN LETTER A
1951 0 : return true;
1952 0 : if (codePoint >= 0x12000 && codePoint <= 0x12399) // CUNEIFORM SIGN A .. CUNEIFORM SIGN U U
1953 0 : return true;
1954 0 : if (codePoint >= 0x12400 && codePoint <= 0x1246E) // CUNEIFORM NUMERIC SIGN TWO ASH .. CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
1955 0 : return true;
1956 0 : if (codePoint >= 0x12480 && codePoint <= 0x12543) // CUNEIFORM SIGN AB TIMES NUN TENU .. CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
1957 0 : return true;
1958 0 : if (codePoint >= 0x13000 && codePoint <= 0x1342E) // EGYPTIAN HIEROGLYPH A001 .. EGYPTIAN HIEROGLYPH AA032
1959 0 : return true;
1960 0 : if (codePoint >= 0x14400 && codePoint <= 0x14646) // ANATOLIAN HIEROGLYPH A001 .. ANATOLIAN HIEROGLYPH A530
1961 0 : return true;
1962 0 : if (codePoint >= 0x16800 && codePoint <= 0x16A38) // BAMUM LETTER PHASE-A NGKUE MFON .. BAMUM LETTER PHASE-F VUEQ
1963 0 : return true;
1964 0 : if (codePoint >= 0x16A40 && codePoint <= 0x16A5E) // MRO LETTER TA .. MRO LETTER TEK
1965 0 : return true;
1966 0 : if (codePoint >= 0x16AD0 && codePoint <= 0x16AED) // BASSA VAH LETTER ENNI .. BASSA VAH LETTER I
1967 0 : return true;
1968 0 : if (codePoint >= 0x16B00 && codePoint <= 0x16B2F) // PAHAWH HMONG VOWEL KEEB .. PAHAWH HMONG CONSONANT CAU
1969 0 : return true;
1970 0 : if (codePoint >= 0x16B40 && codePoint <= 0x16B43) // PAHAWH HMONG SIGN VOS SEEV .. PAHAWH HMONG SIGN IB YAM
1971 0 : return true;
1972 0 : if (codePoint >= 0x16B63 && codePoint <= 0x16B77) // PAHAWH HMONG SIGN VOS LUB .. PAHAWH HMONG SIGN CIM NRES TOS
1973 0 : return true;
1974 0 : if (codePoint >= 0x16B7D && codePoint <= 0x16B8F) // PAHAWH HMONG CLAN SIGN TSHEEJ .. PAHAWH HMONG CLAN SIGN VWJ
1975 0 : return true;
1976 0 : if (codePoint >= 0x16F00 && codePoint <= 0x16F44) // MIAO LETTER PA .. MIAO LETTER HHA
1977 0 : return true;
1978 0 : if (codePoint >= 0x16F50 && codePoint <= 0x16F50) // MIAO LETTER NASALIZATION .. MIAO LETTER NASALIZATION
1979 0 : return true;
1980 0 : if (codePoint >= 0x16F93 && codePoint <= 0x16F9F) // MIAO LETTER TONE-2 .. MIAO LETTER REFORMED TONE-8
1981 0 : return true;
1982 0 : if (codePoint >= 0x16FE0 && codePoint <= 0x16FE0) // TANGUT ITERATION MARK .. TANGUT ITERATION MARK
1983 0 : return true;
1984 0 : if (codePoint >= 0x17000 && codePoint <= 0x187EC) // Tangut Ideograph .. Tangut Ideograph
1985 0 : return true;
1986 0 : if (codePoint >= 0x18800 && codePoint <= 0x18AF2) // TANGUT COMPONENT-001 .. TANGUT COMPONENT-755
1987 0 : return true;
1988 0 : if (codePoint >= 0x1B000 && codePoint <= 0x1B001) // KATAKANA LETTER ARCHAIC E .. HIRAGANA LETTER ARCHAIC YE
1989 0 : return true;
1990 0 : if (codePoint >= 0x1BC00 && codePoint <= 0x1BC6A) // DUPLOYAN LETTER H .. DUPLOYAN LETTER VOCALIC M
1991 0 : return true;
1992 0 : if (codePoint >= 0x1BC70 && codePoint <= 0x1BC7C) // DUPLOYAN AFFIX LEFT HORIZONTAL SECANT .. DUPLOYAN AFFIX ATTACHED TANGENT HOOK
1993 0 : return true;
1994 0 : if (codePoint >= 0x1BC80 && codePoint <= 0x1BC88) // DUPLOYAN AFFIX HIGH ACUTE .. DUPLOYAN AFFIX HIGH VERTICAL
1995 0 : return true;
1996 0 : if (codePoint >= 0x1BC90 && codePoint <= 0x1BC99) // DUPLOYAN AFFIX LOW ACUTE .. DUPLOYAN AFFIX LOW ARROW
1997 0 : return true;
1998 0 : if (codePoint >= 0x1D400 && codePoint <= 0x1D454) // MATHEMATICAL BOLD CAPITAL A .. MATHEMATICAL ITALIC SMALL G
1999 0 : return true;
2000 0 : if (codePoint >= 0x1D456 && codePoint <= 0x1D49C) // MATHEMATICAL ITALIC SMALL I .. MATHEMATICAL SCRIPT CAPITAL A
2001 0 : return true;
2002 0 : if (codePoint >= 0x1D49E && codePoint <= 0x1D49F) // MATHEMATICAL SCRIPT CAPITAL C .. MATHEMATICAL SCRIPT CAPITAL D
2003 0 : return true;
2004 0 : if (codePoint >= 0x1D4A2 && codePoint <= 0x1D4A2) // MATHEMATICAL SCRIPT CAPITAL G .. MATHEMATICAL SCRIPT CAPITAL G
2005 0 : return true;
2006 0 : if (codePoint >= 0x1D4A5 && codePoint <= 0x1D4A6) // MATHEMATICAL SCRIPT CAPITAL J .. MATHEMATICAL SCRIPT CAPITAL K
2007 0 : return true;
2008 0 : if (codePoint >= 0x1D4A9 && codePoint <= 0x1D4AC) // MATHEMATICAL SCRIPT CAPITAL N .. MATHEMATICAL SCRIPT CAPITAL Q
2009 0 : return true;
2010 0 : if (codePoint >= 0x1D4AE && codePoint <= 0x1D4B9) // MATHEMATICAL SCRIPT CAPITAL S .. MATHEMATICAL SCRIPT SMALL D
2011 0 : return true;
2012 0 : if (codePoint >= 0x1D4BB && codePoint <= 0x1D4BB) // MATHEMATICAL SCRIPT SMALL F .. MATHEMATICAL SCRIPT SMALL F
2013 0 : return true;
2014 0 : if (codePoint >= 0x1D4BD && codePoint <= 0x1D4C3) // MATHEMATICAL SCRIPT SMALL H .. MATHEMATICAL SCRIPT SMALL N
2015 0 : return true;
2016 0 : if (codePoint >= 0x1D4C5 && codePoint <= 0x1D505) // MATHEMATICAL SCRIPT SMALL P .. MATHEMATICAL FRAKTUR CAPITAL B
2017 0 : return true;
2018 0 : if (codePoint >= 0x1D507 && codePoint <= 0x1D50A) // MATHEMATICAL FRAKTUR CAPITAL D .. MATHEMATICAL FRAKTUR CAPITAL G
2019 0 : return true;
2020 0 : if (codePoint >= 0x1D50D && codePoint <= 0x1D514) // MATHEMATICAL FRAKTUR CAPITAL J .. MATHEMATICAL FRAKTUR CAPITAL Q
2021 0 : return true;
2022 0 : if (codePoint >= 0x1D516 && codePoint <= 0x1D51C) // MATHEMATICAL FRAKTUR CAPITAL S .. MATHEMATICAL FRAKTUR CAPITAL Y
2023 0 : return true;
2024 0 : if (codePoint >= 0x1D51E && codePoint <= 0x1D539) // MATHEMATICAL FRAKTUR SMALL A .. MATHEMATICAL DOUBLE-STRUCK CAPITAL B
2025 0 : return true;
2026 0 : if (codePoint >= 0x1D53B && codePoint <= 0x1D53E) // MATHEMATICAL DOUBLE-STRUCK CAPITAL D .. MATHEMATICAL DOUBLE-STRUCK CAPITAL G
2027 0 : return true;
2028 0 : if (codePoint >= 0x1D540 && codePoint <= 0x1D544) // MATHEMATICAL DOUBLE-STRUCK CAPITAL I .. MATHEMATICAL DOUBLE-STRUCK CAPITAL M
2029 0 : return true;
2030 0 : if (codePoint >= 0x1D546 && codePoint <= 0x1D546) // MATHEMATICAL DOUBLE-STRUCK CAPITAL O .. MATHEMATICAL DOUBLE-STRUCK CAPITAL O
2031 0 : return true;
2032 0 : if (codePoint >= 0x1D54A && codePoint <= 0x1D550) // MATHEMATICAL DOUBLE-STRUCK CAPITAL S .. MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
2033 0 : return true;
2034 0 : if (codePoint >= 0x1D552 && codePoint <= 0x1D6A5) // MATHEMATICAL DOUBLE-STRUCK SMALL A .. MATHEMATICAL ITALIC SMALL DOTLESS J
2035 0 : return true;
2036 0 : if (codePoint >= 0x1D6A8 && codePoint <= 0x1D6C0) // MATHEMATICAL BOLD CAPITAL ALPHA .. MATHEMATICAL BOLD CAPITAL OMEGA
2037 0 : return true;
2038 0 : if (codePoint >= 0x1D6C2 && codePoint <= 0x1D6DA) // MATHEMATICAL BOLD SMALL ALPHA .. MATHEMATICAL BOLD SMALL OMEGA
2039 0 : return true;
2040 0 : if (codePoint >= 0x1D6DC && codePoint <= 0x1D6FA) // MATHEMATICAL BOLD EPSILON SYMBOL .. MATHEMATICAL ITALIC CAPITAL OMEGA
2041 0 : return true;
2042 0 : if (codePoint >= 0x1D6FC && codePoint <= 0x1D714) // MATHEMATICAL ITALIC SMALL ALPHA .. MATHEMATICAL ITALIC SMALL OMEGA
2043 0 : return true;
2044 0 : if (codePoint >= 0x1D716 && codePoint <= 0x1D734) // MATHEMATICAL ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
2045 0 : return true;
2046 0 : if (codePoint >= 0x1D736 && codePoint <= 0x1D74E) // MATHEMATICAL BOLD ITALIC SMALL ALPHA .. MATHEMATICAL BOLD ITALIC SMALL OMEGA
2047 0 : return true;
2048 0 : if (codePoint >= 0x1D750 && codePoint <= 0x1D76E) // MATHEMATICAL BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
2049 0 : return true;
2050 0 : if (codePoint >= 0x1D770 && codePoint <= 0x1D788) // MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
2051 0 : return true;
2052 0 : if (codePoint >= 0x1D78A && codePoint <= 0x1D7A8) // MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
2053 0 : return true;
2054 0 : if (codePoint >= 0x1D7AA && codePoint <= 0x1D7C2) // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
2055 0 : return true;
2056 0 : if (codePoint >= 0x1D7C4 && codePoint <= 0x1D7CB) // MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD SMALL DIGAMMA
2057 0 : return true;
2058 0 : if (codePoint >= 0x1E800 && codePoint <= 0x1E8C4) // MENDE KIKAKUI SYLLABLE M001 KI .. MENDE KIKAKUI SYLLABLE M060 NYON
2059 0 : return true;
2060 0 : if (codePoint >= 0x1E900 && codePoint <= 0x1E943) // ADLAM CAPITAL LETTER ALIF .. ADLAM SMALL LETTER SHA
2061 0 : return true;
2062 0 : if (codePoint >= 0x1EE00 && codePoint <= 0x1EE03) // ARABIC MATHEMATICAL ALEF .. ARABIC MATHEMATICAL DAL
2063 0 : return true;
2064 0 : if (codePoint >= 0x1EE05 && codePoint <= 0x1EE1F) // ARABIC MATHEMATICAL WAW .. ARABIC MATHEMATICAL DOTLESS QAF
2065 0 : return true;
2066 0 : if (codePoint >= 0x1EE21 && codePoint <= 0x1EE22) // ARABIC MATHEMATICAL INITIAL BEH .. ARABIC MATHEMATICAL INITIAL JEEM
2067 0 : return true;
2068 0 : if (codePoint >= 0x1EE24 && codePoint <= 0x1EE24) // ARABIC MATHEMATICAL INITIAL HEH .. ARABIC MATHEMATICAL INITIAL HEH
2069 0 : return true;
2070 0 : if (codePoint >= 0x1EE27 && codePoint <= 0x1EE27) // ARABIC MATHEMATICAL INITIAL HAH .. ARABIC MATHEMATICAL INITIAL HAH
2071 0 : return true;
2072 0 : if (codePoint >= 0x1EE29 && codePoint <= 0x1EE32) // ARABIC MATHEMATICAL INITIAL YEH .. ARABIC MATHEMATICAL INITIAL QAF
2073 0 : return true;
2074 0 : if (codePoint >= 0x1EE34 && codePoint <= 0x1EE37) // ARABIC MATHEMATICAL INITIAL SHEEN .. ARABIC MATHEMATICAL INITIAL KHAH
2075 0 : return true;
2076 0 : if (codePoint >= 0x1EE39 && codePoint <= 0x1EE39) // ARABIC MATHEMATICAL INITIAL DAD .. ARABIC MATHEMATICAL INITIAL DAD
2077 0 : return true;
2078 0 : if (codePoint >= 0x1EE3B && codePoint <= 0x1EE3B) // ARABIC MATHEMATICAL INITIAL GHAIN .. ARABIC MATHEMATICAL INITIAL GHAIN
2079 0 : return true;
2080 0 : if (codePoint >= 0x1EE42 && codePoint <= 0x1EE42) // ARABIC MATHEMATICAL TAILED JEEM .. ARABIC MATHEMATICAL TAILED JEEM
2081 0 : return true;
2082 0 : if (codePoint >= 0x1EE47 && codePoint <= 0x1EE47) // ARABIC MATHEMATICAL TAILED HAH .. ARABIC MATHEMATICAL TAILED HAH
2083 0 : return true;
2084 0 : if (codePoint >= 0x1EE49 && codePoint <= 0x1EE49) // ARABIC MATHEMATICAL TAILED YEH .. ARABIC MATHEMATICAL TAILED YEH
2085 0 : return true;
2086 0 : if (codePoint >= 0x1EE4B && codePoint <= 0x1EE4B) // ARABIC MATHEMATICAL TAILED LAM .. ARABIC MATHEMATICAL TAILED LAM
2087 0 : return true;
2088 0 : if (codePoint >= 0x1EE4D && codePoint <= 0x1EE4F) // ARABIC MATHEMATICAL TAILED NOON .. ARABIC MATHEMATICAL TAILED AIN
2089 0 : return true;
2090 0 : if (codePoint >= 0x1EE51 && codePoint <= 0x1EE52) // ARABIC MATHEMATICAL TAILED SAD .. ARABIC MATHEMATICAL TAILED QAF
2091 0 : return true;
2092 0 : if (codePoint >= 0x1EE54 && codePoint <= 0x1EE54) // ARABIC MATHEMATICAL TAILED SHEEN .. ARABIC MATHEMATICAL TAILED SHEEN
2093 0 : return true;
2094 0 : if (codePoint >= 0x1EE57 && codePoint <= 0x1EE57) // ARABIC MATHEMATICAL TAILED KHAH .. ARABIC MATHEMATICAL TAILED KHAH
2095 0 : return true;
2096 0 : if (codePoint >= 0x1EE59 && codePoint <= 0x1EE59) // ARABIC MATHEMATICAL TAILED DAD .. ARABIC MATHEMATICAL TAILED DAD
2097 0 : return true;
2098 0 : if (codePoint >= 0x1EE5B && codePoint <= 0x1EE5B) // ARABIC MATHEMATICAL TAILED GHAIN .. ARABIC MATHEMATICAL TAILED GHAIN
2099 0 : return true;
2100 0 : if (codePoint >= 0x1EE5D && codePoint <= 0x1EE5D) // ARABIC MATHEMATICAL TAILED DOTLESS NOON .. ARABIC MATHEMATICAL TAILED DOTLESS NOON
2101 0 : return true;
2102 0 : if (codePoint >= 0x1EE5F && codePoint <= 0x1EE5F) // ARABIC MATHEMATICAL TAILED DOTLESS QAF .. ARABIC MATHEMATICAL TAILED DOTLESS QAF
2103 0 : return true;
2104 0 : if (codePoint >= 0x1EE61 && codePoint <= 0x1EE62) // ARABIC MATHEMATICAL STRETCHED BEH .. ARABIC MATHEMATICAL STRETCHED JEEM
2105 0 : return true;
2106 0 : if (codePoint >= 0x1EE64 && codePoint <= 0x1EE64) // ARABIC MATHEMATICAL STRETCHED HEH .. ARABIC MATHEMATICAL STRETCHED HEH
2107 0 : return true;
2108 0 : if (codePoint >= 0x1EE67 && codePoint <= 0x1EE6A) // ARABIC MATHEMATICAL STRETCHED HAH .. ARABIC MATHEMATICAL STRETCHED KAF
2109 0 : return true;
2110 0 : if (codePoint >= 0x1EE6C && codePoint <= 0x1EE72) // ARABIC MATHEMATICAL STRETCHED MEEM .. ARABIC MATHEMATICAL STRETCHED QAF
2111 0 : return true;
2112 0 : if (codePoint >= 0x1EE74 && codePoint <= 0x1EE77) // ARABIC MATHEMATICAL STRETCHED SHEEN .. ARABIC MATHEMATICAL STRETCHED KHAH
2113 0 : return true;
2114 0 : if (codePoint >= 0x1EE79 && codePoint <= 0x1EE7C) // ARABIC MATHEMATICAL STRETCHED DAD .. ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
2115 0 : return true;
2116 0 : if (codePoint >= 0x1EE7E && codePoint <= 0x1EE7E) // ARABIC MATHEMATICAL STRETCHED DOTLESS FEH .. ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
2117 0 : return true;
2118 0 : if (codePoint >= 0x1EE80 && codePoint <= 0x1EE89) // ARABIC MATHEMATICAL LOOPED ALEF .. ARABIC MATHEMATICAL LOOPED YEH
2119 0 : return true;
2120 0 : if (codePoint >= 0x1EE8B && codePoint <= 0x1EE9B) // ARABIC MATHEMATICAL LOOPED LAM .. ARABIC MATHEMATICAL LOOPED GHAIN
2121 0 : return true;
2122 0 : if (codePoint >= 0x1EEA1 && codePoint <= 0x1EEA3) // ARABIC MATHEMATICAL DOUBLE-STRUCK BEH .. ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
2123 0 : return true;
2124 0 : if (codePoint >= 0x1EEA5 && codePoint <= 0x1EEA9) // ARABIC MATHEMATICAL DOUBLE-STRUCK WAW .. ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
2125 0 : return true;
2126 0 : if (codePoint >= 0x1EEAB && codePoint <= 0x1EEBB) // ARABIC MATHEMATICAL DOUBLE-STRUCK LAM .. ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
2127 0 : return true;
2128 0 : if (codePoint >= 0x20000 && codePoint <= 0x2A6D6) // CJK Ideograph Extension B .. CJK Ideograph Extension B
2129 0 : return true;
2130 0 : if (codePoint >= 0x2A700 && codePoint <= 0x2B734) // CJK Ideograph Extension C .. CJK Ideograph Extension C
2131 0 : return true;
2132 0 : if (codePoint >= 0x2B740 && codePoint <= 0x2B81D) // CJK Ideograph Extension D .. CJK Ideograph Extension D
2133 0 : return true;
2134 0 : if (codePoint >= 0x2B820 && codePoint <= 0x2CEA1) // CJK Ideograph Extension E .. CJK Ideograph Extension E
2135 0 : return true;
2136 0 : if (codePoint >= 0x2F800 && codePoint <= 0x2FA1D) // CJK COMPATIBILITY IDEOGRAPH-2F800 .. CJK COMPATIBILITY IDEOGRAPH-2FA1D
2137 0 : return true;
2138 0 : return false;
2139 : }
2140 :
2141 : bool
2142 0 : js::unicode::IsIdentifierPartNonBMP(uint32_t codePoint)
2143 : {
2144 0 : if (codePoint >= 0x10000 && codePoint <= 0x1000B) // LINEAR B SYLLABLE B008 A .. LINEAR B SYLLABLE B046 JE
2145 0 : return true;
2146 0 : if (codePoint >= 0x1000D && codePoint <= 0x10026) // LINEAR B SYLLABLE B036 JO .. LINEAR B SYLLABLE B032 QO
2147 0 : return true;
2148 0 : if (codePoint >= 0x10028 && codePoint <= 0x1003A) // LINEAR B SYLLABLE B060 RA .. LINEAR B SYLLABLE B042 WO
2149 0 : return true;
2150 0 : if (codePoint >= 0x1003C && codePoint <= 0x1003D) // LINEAR B SYLLABLE B017 ZA .. LINEAR B SYLLABLE B074 ZE
2151 0 : return true;
2152 0 : if (codePoint >= 0x1003F && codePoint <= 0x1004D) // LINEAR B SYLLABLE B020 ZO .. LINEAR B SYLLABLE B091 TWO
2153 0 : return true;
2154 0 : if (codePoint >= 0x10050 && codePoint <= 0x1005D) // LINEAR B SYMBOL B018 .. LINEAR B SYMBOL B089
2155 0 : return true;
2156 0 : if (codePoint >= 0x10080 && codePoint <= 0x100FA) // LINEAR B IDEOGRAM B100 MAN .. LINEAR B IDEOGRAM VESSEL B305
2157 0 : return true;
2158 0 : if (codePoint >= 0x10140 && codePoint <= 0x10174) // GREEK ACROPHONIC ATTIC ONE QUARTER .. GREEK ACROPHONIC STRATIAN FIFTY MNAS
2159 0 : return true;
2160 0 : if (codePoint >= 0x101FD && codePoint <= 0x101FD) // PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE .. PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
2161 0 : return true;
2162 0 : if (codePoint >= 0x10280 && codePoint <= 0x1029C) // LYCIAN LETTER A .. LYCIAN LETTER X
2163 0 : return true;
2164 0 : if (codePoint >= 0x102A0 && codePoint <= 0x102D0) // CARIAN LETTER A .. CARIAN LETTER UUU3
2165 0 : return true;
2166 0 : if (codePoint >= 0x102E0 && codePoint <= 0x102E0) // COPTIC EPACT THOUSANDS MARK .. COPTIC EPACT THOUSANDS MARK
2167 0 : return true;
2168 0 : if (codePoint >= 0x10300 && codePoint <= 0x1031F) // OLD ITALIC LETTER A .. OLD ITALIC LETTER ESS
2169 0 : return true;
2170 0 : if (codePoint >= 0x10330 && codePoint <= 0x1034A) // GOTHIC LETTER AHSA .. GOTHIC LETTER NINE HUNDRED
2171 0 : return true;
2172 0 : if (codePoint >= 0x10350 && codePoint <= 0x1037A) // OLD PERMIC LETTER AN .. COMBINING OLD PERMIC LETTER SII
2173 0 : return true;
2174 0 : if (codePoint >= 0x10380 && codePoint <= 0x1039D) // UGARITIC LETTER ALPA .. UGARITIC LETTER SSU
2175 0 : return true;
2176 0 : if (codePoint >= 0x103A0 && codePoint <= 0x103C3) // OLD PERSIAN SIGN A .. OLD PERSIAN SIGN HA
2177 0 : return true;
2178 0 : if (codePoint >= 0x103C8 && codePoint <= 0x103CF) // OLD PERSIAN SIGN AURAMAZDAA .. OLD PERSIAN SIGN BUUMISH
2179 0 : return true;
2180 0 : if (codePoint >= 0x103D1 && codePoint <= 0x103D5) // OLD PERSIAN NUMBER ONE .. OLD PERSIAN NUMBER HUNDRED
2181 0 : return true;
2182 0 : if (codePoint >= 0x10400 && codePoint <= 0x1049D) // DESERET CAPITAL LETTER LONG I .. OSMANYA LETTER OO
2183 0 : return true;
2184 0 : if (codePoint >= 0x104A0 && codePoint <= 0x104A9) // OSMANYA DIGIT ZERO .. OSMANYA DIGIT NINE
2185 0 : return true;
2186 0 : if (codePoint >= 0x104B0 && codePoint <= 0x104D3) // OSAGE CAPITAL LETTER A .. OSAGE CAPITAL LETTER ZHA
2187 0 : return true;
2188 0 : if (codePoint >= 0x104D8 && codePoint <= 0x104FB) // OSAGE SMALL LETTER A .. OSAGE SMALL LETTER ZHA
2189 0 : return true;
2190 0 : if (codePoint >= 0x10500 && codePoint <= 0x10527) // ELBASAN LETTER A .. ELBASAN LETTER KHE
2191 0 : return true;
2192 0 : if (codePoint >= 0x10530 && codePoint <= 0x10563) // CAUCASIAN ALBANIAN LETTER ALT .. CAUCASIAN ALBANIAN LETTER KIW
2193 0 : return true;
2194 0 : if (codePoint >= 0x10600 && codePoint <= 0x10736) // LINEAR A SIGN AB001 .. LINEAR A SIGN A664
2195 0 : return true;
2196 0 : if (codePoint >= 0x10740 && codePoint <= 0x10755) // LINEAR A SIGN A701 A .. LINEAR A SIGN A732 JE
2197 0 : return true;
2198 0 : if (codePoint >= 0x10760 && codePoint <= 0x10767) // LINEAR A SIGN A800 .. LINEAR A SIGN A807
2199 0 : return true;
2200 0 : if (codePoint >= 0x10800 && codePoint <= 0x10805) // CYPRIOT SYLLABLE A .. CYPRIOT SYLLABLE JA
2201 0 : return true;
2202 0 : if (codePoint >= 0x10808 && codePoint <= 0x10808) // CYPRIOT SYLLABLE JO .. CYPRIOT SYLLABLE JO
2203 0 : return true;
2204 0 : if (codePoint >= 0x1080A && codePoint <= 0x10835) // CYPRIOT SYLLABLE KA .. CYPRIOT SYLLABLE WO
2205 0 : return true;
2206 0 : if (codePoint >= 0x10837 && codePoint <= 0x10838) // CYPRIOT SYLLABLE XA .. CYPRIOT SYLLABLE XE
2207 0 : return true;
2208 0 : if (codePoint >= 0x1083C && codePoint <= 0x1083C) // CYPRIOT SYLLABLE ZA .. CYPRIOT SYLLABLE ZA
2209 0 : return true;
2210 0 : if (codePoint >= 0x1083F && codePoint <= 0x10855) // CYPRIOT SYLLABLE ZO .. IMPERIAL ARAMAIC LETTER TAW
2211 0 : return true;
2212 0 : if (codePoint >= 0x10860 && codePoint <= 0x10876) // PALMYRENE LETTER ALEPH .. PALMYRENE LETTER TAW
2213 0 : return true;
2214 0 : if (codePoint >= 0x10880 && codePoint <= 0x1089E) // NABATAEAN LETTER FINAL ALEPH .. NABATAEAN LETTER TAW
2215 0 : return true;
2216 0 : if (codePoint >= 0x108E0 && codePoint <= 0x108F2) // HATRAN LETTER ALEPH .. HATRAN LETTER QOPH
2217 0 : return true;
2218 0 : if (codePoint >= 0x108F4 && codePoint <= 0x108F5) // HATRAN LETTER SHIN .. HATRAN LETTER TAW
2219 0 : return true;
2220 0 : if (codePoint >= 0x10900 && codePoint <= 0x10915) // PHOENICIAN LETTER ALF .. PHOENICIAN LETTER TAU
2221 0 : return true;
2222 0 : if (codePoint >= 0x10920 && codePoint <= 0x10939) // LYDIAN LETTER A .. LYDIAN LETTER C
2223 0 : return true;
2224 0 : if (codePoint >= 0x10980 && codePoint <= 0x109B7) // MEROITIC HIEROGLYPHIC LETTER A .. MEROITIC CURSIVE LETTER DA
2225 0 : return true;
2226 0 : if (codePoint >= 0x109BE && codePoint <= 0x109BF) // MEROITIC CURSIVE LOGOGRAM RMT .. MEROITIC CURSIVE LOGOGRAM IMN
2227 0 : return true;
2228 0 : if (codePoint >= 0x10A00 && codePoint <= 0x10A03) // KHAROSHTHI LETTER A .. KHAROSHTHI VOWEL SIGN VOCALIC R
2229 0 : return true;
2230 0 : if (codePoint >= 0x10A05 && codePoint <= 0x10A06) // KHAROSHTHI VOWEL SIGN E .. KHAROSHTHI VOWEL SIGN O
2231 0 : return true;
2232 0 : if (codePoint >= 0x10A0C && codePoint <= 0x10A13) // KHAROSHTHI VOWEL LENGTH MARK .. KHAROSHTHI LETTER GHA
2233 0 : return true;
2234 0 : if (codePoint >= 0x10A15 && codePoint <= 0x10A17) // KHAROSHTHI LETTER CA .. KHAROSHTHI LETTER JA
2235 0 : return true;
2236 0 : if (codePoint >= 0x10A19 && codePoint <= 0x10A33) // KHAROSHTHI LETTER NYA .. KHAROSHTHI LETTER TTTHA
2237 0 : return true;
2238 0 : if (codePoint >= 0x10A38 && codePoint <= 0x10A3A) // KHAROSHTHI SIGN BAR ABOVE .. KHAROSHTHI SIGN DOT BELOW
2239 0 : return true;
2240 0 : if (codePoint >= 0x10A3F && codePoint <= 0x10A3F) // KHAROSHTHI VIRAMA .. KHAROSHTHI VIRAMA
2241 0 : return true;
2242 0 : if (codePoint >= 0x10A60 && codePoint <= 0x10A7C) // OLD SOUTH ARABIAN LETTER HE .. OLD SOUTH ARABIAN LETTER THETH
2243 0 : return true;
2244 0 : if (codePoint >= 0x10A80 && codePoint <= 0x10A9C) // OLD NORTH ARABIAN LETTER HEH .. OLD NORTH ARABIAN LETTER ZAH
2245 0 : return true;
2246 0 : if (codePoint >= 0x10AC0 && codePoint <= 0x10AC7) // MANICHAEAN LETTER ALEPH .. MANICHAEAN LETTER WAW
2247 0 : return true;
2248 0 : if (codePoint >= 0x10AC9 && codePoint <= 0x10AE6) // MANICHAEAN LETTER ZAYIN .. MANICHAEAN ABBREVIATION MARK BELOW
2249 0 : return true;
2250 0 : if (codePoint >= 0x10B00 && codePoint <= 0x10B35) // AVESTAN LETTER A .. AVESTAN LETTER HE
2251 0 : return true;
2252 0 : if (codePoint >= 0x10B40 && codePoint <= 0x10B55) // INSCRIPTIONAL PARTHIAN LETTER ALEPH .. INSCRIPTIONAL PARTHIAN LETTER TAW
2253 0 : return true;
2254 0 : if (codePoint >= 0x10B60 && codePoint <= 0x10B72) // INSCRIPTIONAL PAHLAVI LETTER ALEPH .. INSCRIPTIONAL PAHLAVI LETTER TAW
2255 0 : return true;
2256 0 : if (codePoint >= 0x10B80 && codePoint <= 0x10B91) // PSALTER PAHLAVI LETTER ALEPH .. PSALTER PAHLAVI LETTER TAW
2257 0 : return true;
2258 0 : if (codePoint >= 0x10C00 && codePoint <= 0x10C48) // OLD TURKIC LETTER ORKHON A .. OLD TURKIC LETTER ORKHON BASH
2259 0 : return true;
2260 0 : if (codePoint >= 0x10C80 && codePoint <= 0x10CB2) // OLD HUNGARIAN CAPITAL LETTER A .. OLD HUNGARIAN CAPITAL LETTER US
2261 0 : return true;
2262 0 : if (codePoint >= 0x10CC0 && codePoint <= 0x10CF2) // OLD HUNGARIAN SMALL LETTER A .. OLD HUNGARIAN SMALL LETTER US
2263 0 : return true;
2264 0 : if (codePoint >= 0x11000 && codePoint <= 0x11046) // BRAHMI SIGN CANDRABINDU .. BRAHMI VIRAMA
2265 0 : return true;
2266 0 : if (codePoint >= 0x11066 && codePoint <= 0x1106F) // BRAHMI DIGIT ZERO .. BRAHMI DIGIT NINE
2267 0 : return true;
2268 0 : if (codePoint >= 0x1107F && codePoint <= 0x110BA) // BRAHMI NUMBER JOINER .. KAITHI SIGN NUKTA
2269 0 : return true;
2270 0 : if (codePoint >= 0x110D0 && codePoint <= 0x110E8) // SORA SOMPENG LETTER SAH .. SORA SOMPENG LETTER MAE
2271 0 : return true;
2272 0 : if (codePoint >= 0x110F0 && codePoint <= 0x110F9) // SORA SOMPENG DIGIT ZERO .. SORA SOMPENG DIGIT NINE
2273 0 : return true;
2274 0 : if (codePoint >= 0x11100 && codePoint <= 0x11134) // CHAKMA SIGN CANDRABINDU .. CHAKMA MAAYYAA
2275 0 : return true;
2276 0 : if (codePoint >= 0x11136 && codePoint <= 0x1113F) // CHAKMA DIGIT ZERO .. CHAKMA DIGIT NINE
2277 0 : return true;
2278 0 : if (codePoint >= 0x11150 && codePoint <= 0x11173) // MAHAJANI LETTER A .. MAHAJANI SIGN NUKTA
2279 0 : return true;
2280 0 : if (codePoint >= 0x11176 && codePoint <= 0x11176) // MAHAJANI LIGATURE SHRI .. MAHAJANI LIGATURE SHRI
2281 0 : return true;
2282 0 : if (codePoint >= 0x11180 && codePoint <= 0x111C4) // SHARADA SIGN CANDRABINDU .. SHARADA OM
2283 0 : return true;
2284 0 : if (codePoint >= 0x111CA && codePoint <= 0x111CC) // SHARADA SIGN NUKTA .. SHARADA EXTRA SHORT VOWEL MARK
2285 0 : return true;
2286 0 : if (codePoint >= 0x111D0 && codePoint <= 0x111DA) // SHARADA DIGIT ZERO .. SHARADA EKAM
2287 0 : return true;
2288 0 : if (codePoint >= 0x111DC && codePoint <= 0x111DC) // SHARADA HEADSTROKE .. SHARADA HEADSTROKE
2289 0 : return true;
2290 0 : if (codePoint >= 0x11200 && codePoint <= 0x11211) // KHOJKI LETTER A .. KHOJKI LETTER JJA
2291 0 : return true;
2292 0 : if (codePoint >= 0x11213 && codePoint <= 0x11237) // KHOJKI LETTER NYA .. KHOJKI SIGN SHADDA
2293 0 : return true;
2294 0 : if (codePoint >= 0x1123E && codePoint <= 0x1123E) // KHOJKI SIGN SUKUN .. KHOJKI SIGN SUKUN
2295 0 : return true;
2296 0 : if (codePoint >= 0x11280 && codePoint <= 0x11286) // MULTANI LETTER A .. MULTANI LETTER GA
2297 0 : return true;
2298 0 : if (codePoint >= 0x11288 && codePoint <= 0x11288) // MULTANI LETTER GHA .. MULTANI LETTER GHA
2299 0 : return true;
2300 0 : if (codePoint >= 0x1128A && codePoint <= 0x1128D) // MULTANI LETTER CA .. MULTANI LETTER JJA
2301 0 : return true;
2302 0 : if (codePoint >= 0x1128F && codePoint <= 0x1129D) // MULTANI LETTER NYA .. MULTANI LETTER BA
2303 0 : return true;
2304 0 : if (codePoint >= 0x1129F && codePoint <= 0x112A8) // MULTANI LETTER BHA .. MULTANI LETTER RHA
2305 0 : return true;
2306 0 : if (codePoint >= 0x112B0 && codePoint <= 0x112EA) // KHUDAWADI LETTER A .. KHUDAWADI SIGN VIRAMA
2307 0 : return true;
2308 0 : if (codePoint >= 0x112F0 && codePoint <= 0x112F9) // KHUDAWADI DIGIT ZERO .. KHUDAWADI DIGIT NINE
2309 0 : return true;
2310 0 : if (codePoint >= 0x11300 && codePoint <= 0x11303) // GRANTHA SIGN COMBINING ANUSVARA ABOVE .. GRANTHA SIGN VISARGA
2311 0 : return true;
2312 0 : if (codePoint >= 0x11305 && codePoint <= 0x1130C) // GRANTHA LETTER A .. GRANTHA LETTER VOCALIC L
2313 0 : return true;
2314 0 : if (codePoint >= 0x1130F && codePoint <= 0x11310) // GRANTHA LETTER EE .. GRANTHA LETTER AI
2315 0 : return true;
2316 0 : if (codePoint >= 0x11313 && codePoint <= 0x11328) // GRANTHA LETTER OO .. GRANTHA LETTER NA
2317 0 : return true;
2318 0 : if (codePoint >= 0x1132A && codePoint <= 0x11330) // GRANTHA LETTER PA .. GRANTHA LETTER RA
2319 0 : return true;
2320 0 : if (codePoint >= 0x11332 && codePoint <= 0x11333) // GRANTHA LETTER LA .. GRANTHA LETTER LLA
2321 0 : return true;
2322 0 : if (codePoint >= 0x11335 && codePoint <= 0x11339) // GRANTHA LETTER VA .. GRANTHA LETTER HA
2323 0 : return true;
2324 0 : if (codePoint >= 0x1133C && codePoint <= 0x11344) // GRANTHA SIGN NUKTA .. GRANTHA VOWEL SIGN VOCALIC RR
2325 0 : return true;
2326 0 : if (codePoint >= 0x11347 && codePoint <= 0x11348) // GRANTHA VOWEL SIGN EE .. GRANTHA VOWEL SIGN AI
2327 0 : return true;
2328 0 : if (codePoint >= 0x1134B && codePoint <= 0x1134D) // GRANTHA VOWEL SIGN OO .. GRANTHA SIGN VIRAMA
2329 0 : return true;
2330 0 : if (codePoint >= 0x11350 && codePoint <= 0x11350) // GRANTHA OM .. GRANTHA OM
2331 0 : return true;
2332 0 : if (codePoint >= 0x11357 && codePoint <= 0x11357) // GRANTHA AU LENGTH MARK .. GRANTHA AU LENGTH MARK
2333 0 : return true;
2334 0 : if (codePoint >= 0x1135D && codePoint <= 0x11363) // GRANTHA SIGN PLUTA .. GRANTHA VOWEL SIGN VOCALIC LL
2335 0 : return true;
2336 0 : if (codePoint >= 0x11366 && codePoint <= 0x1136C) // COMBINING GRANTHA DIGIT ZERO .. COMBINING GRANTHA DIGIT SIX
2337 0 : return true;
2338 0 : if (codePoint >= 0x11370 && codePoint <= 0x11374) // COMBINING GRANTHA LETTER A .. COMBINING GRANTHA LETTER PA
2339 0 : return true;
2340 0 : if (codePoint >= 0x11400 && codePoint <= 0x1144A) // NEWA LETTER A .. NEWA SIDDHI
2341 0 : return true;
2342 0 : if (codePoint >= 0x11450 && codePoint <= 0x11459) // NEWA DIGIT ZERO .. NEWA DIGIT NINE
2343 0 : return true;
2344 0 : if (codePoint >= 0x11480 && codePoint <= 0x114C5) // TIRHUTA ANJI .. TIRHUTA GVANG
2345 0 : return true;
2346 0 : if (codePoint >= 0x114C7 && codePoint <= 0x114C7) // TIRHUTA OM .. TIRHUTA OM
2347 0 : return true;
2348 0 : if (codePoint >= 0x114D0 && codePoint <= 0x114D9) // TIRHUTA DIGIT ZERO .. TIRHUTA DIGIT NINE
2349 0 : return true;
2350 0 : if (codePoint >= 0x11580 && codePoint <= 0x115B5) // SIDDHAM LETTER A .. SIDDHAM VOWEL SIGN VOCALIC RR
2351 0 : return true;
2352 0 : if (codePoint >= 0x115B8 && codePoint <= 0x115C0) // SIDDHAM VOWEL SIGN E .. SIDDHAM SIGN NUKTA
2353 0 : return true;
2354 0 : if (codePoint >= 0x115D8 && codePoint <= 0x115DD) // SIDDHAM LETTER THREE-CIRCLE ALTERNATE I .. SIDDHAM VOWEL SIGN ALTERNATE UU
2355 0 : return true;
2356 0 : if (codePoint >= 0x11600 && codePoint <= 0x11640) // MODI LETTER A .. MODI SIGN ARDHACANDRA
2357 0 : return true;
2358 0 : if (codePoint >= 0x11644 && codePoint <= 0x11644) // MODI SIGN HUVA .. MODI SIGN HUVA
2359 0 : return true;
2360 0 : if (codePoint >= 0x11650 && codePoint <= 0x11659) // MODI DIGIT ZERO .. MODI DIGIT NINE
2361 0 : return true;
2362 0 : if (codePoint >= 0x11680 && codePoint <= 0x116B7) // TAKRI LETTER A .. TAKRI SIGN NUKTA
2363 0 : return true;
2364 0 : if (codePoint >= 0x116C0 && codePoint <= 0x116C9) // TAKRI DIGIT ZERO .. TAKRI DIGIT NINE
2365 0 : return true;
2366 0 : if (codePoint >= 0x11700 && codePoint <= 0x11719) // AHOM LETTER KA .. AHOM LETTER JHA
2367 0 : return true;
2368 0 : if (codePoint >= 0x1171D && codePoint <= 0x1172B) // AHOM CONSONANT SIGN MEDIAL LA .. AHOM SIGN KILLER
2369 0 : return true;
2370 0 : if (codePoint >= 0x11730 && codePoint <= 0x11739) // AHOM DIGIT ZERO .. AHOM DIGIT NINE
2371 0 : return true;
2372 0 : if (codePoint >= 0x118A0 && codePoint <= 0x118E9) // WARANG CITI CAPITAL LETTER NGAA .. WARANG CITI DIGIT NINE
2373 0 : return true;
2374 0 : if (codePoint >= 0x118FF && codePoint <= 0x118FF) // WARANG CITI OM .. WARANG CITI OM
2375 0 : return true;
2376 0 : if (codePoint >= 0x11AC0 && codePoint <= 0x11AF8) // PAU CIN HAU LETTER PA .. PAU CIN HAU GLOTTAL STOP FINAL
2377 0 : return true;
2378 0 : if (codePoint >= 0x11C00 && codePoint <= 0x11C08) // BHAIKSUKI LETTER A .. BHAIKSUKI LETTER VOCALIC L
2379 0 : return true;
2380 0 : if (codePoint >= 0x11C0A && codePoint <= 0x11C36) // BHAIKSUKI LETTER E .. BHAIKSUKI VOWEL SIGN VOCALIC L
2381 0 : return true;
2382 0 : if (codePoint >= 0x11C38 && codePoint <= 0x11C40) // BHAIKSUKI VOWEL SIGN E .. BHAIKSUKI SIGN AVAGRAHA
2383 0 : return true;
2384 0 : if (codePoint >= 0x11C50 && codePoint <= 0x11C59) // BHAIKSUKI DIGIT ZERO .. BHAIKSUKI DIGIT NINE
2385 0 : return true;
2386 0 : if (codePoint >= 0x11C72 && codePoint <= 0x11C8F) // MARCHEN LETTER KA .. MARCHEN LETTER A
2387 0 : return true;
2388 0 : if (codePoint >= 0x11C92 && codePoint <= 0x11CA7) // MARCHEN SUBJOINED LETTER KA .. MARCHEN SUBJOINED LETTER ZA
2389 0 : return true;
2390 0 : if (codePoint >= 0x11CA9 && codePoint <= 0x11CB6) // MARCHEN SUBJOINED LETTER YA .. MARCHEN SIGN CANDRABINDU
2391 0 : return true;
2392 0 : if (codePoint >= 0x12000 && codePoint <= 0x12399) // CUNEIFORM SIGN A .. CUNEIFORM SIGN U U
2393 0 : return true;
2394 0 : if (codePoint >= 0x12400 && codePoint <= 0x1246E) // CUNEIFORM NUMERIC SIGN TWO ASH .. CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
2395 0 : return true;
2396 0 : if (codePoint >= 0x12480 && codePoint <= 0x12543) // CUNEIFORM SIGN AB TIMES NUN TENU .. CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
2397 0 : return true;
2398 0 : if (codePoint >= 0x13000 && codePoint <= 0x1342E) // EGYPTIAN HIEROGLYPH A001 .. EGYPTIAN HIEROGLYPH AA032
2399 0 : return true;
2400 0 : if (codePoint >= 0x14400 && codePoint <= 0x14646) // ANATOLIAN HIEROGLYPH A001 .. ANATOLIAN HIEROGLYPH A530
2401 0 : return true;
2402 0 : if (codePoint >= 0x16800 && codePoint <= 0x16A38) // BAMUM LETTER PHASE-A NGKUE MFON .. BAMUM LETTER PHASE-F VUEQ
2403 0 : return true;
2404 0 : if (codePoint >= 0x16A40 && codePoint <= 0x16A5E) // MRO LETTER TA .. MRO LETTER TEK
2405 0 : return true;
2406 0 : if (codePoint >= 0x16A60 && codePoint <= 0x16A69) // MRO DIGIT ZERO .. MRO DIGIT NINE
2407 0 : return true;
2408 0 : if (codePoint >= 0x16AD0 && codePoint <= 0x16AED) // BASSA VAH LETTER ENNI .. BASSA VAH LETTER I
2409 0 : return true;
2410 0 : if (codePoint >= 0x16AF0 && codePoint <= 0x16AF4) // BASSA VAH COMBINING HIGH TONE .. BASSA VAH COMBINING HIGH-LOW TONE
2411 0 : return true;
2412 0 : if (codePoint >= 0x16B00 && codePoint <= 0x16B36) // PAHAWH HMONG VOWEL KEEB .. PAHAWH HMONG MARK CIM TAUM
2413 0 : return true;
2414 0 : if (codePoint >= 0x16B40 && codePoint <= 0x16B43) // PAHAWH HMONG SIGN VOS SEEV .. PAHAWH HMONG SIGN IB YAM
2415 0 : return true;
2416 0 : if (codePoint >= 0x16B50 && codePoint <= 0x16B59) // PAHAWH HMONG DIGIT ZERO .. PAHAWH HMONG DIGIT NINE
2417 0 : return true;
2418 0 : if (codePoint >= 0x16B63 && codePoint <= 0x16B77) // PAHAWH HMONG SIGN VOS LUB .. PAHAWH HMONG SIGN CIM NRES TOS
2419 0 : return true;
2420 0 : if (codePoint >= 0x16B7D && codePoint <= 0x16B8F) // PAHAWH HMONG CLAN SIGN TSHEEJ .. PAHAWH HMONG CLAN SIGN VWJ
2421 0 : return true;
2422 0 : if (codePoint >= 0x16F00 && codePoint <= 0x16F44) // MIAO LETTER PA .. MIAO LETTER HHA
2423 0 : return true;
2424 0 : if (codePoint >= 0x16F50 && codePoint <= 0x16F7E) // MIAO LETTER NASALIZATION .. MIAO VOWEL SIGN NG
2425 0 : return true;
2426 0 : if (codePoint >= 0x16F8F && codePoint <= 0x16F9F) // MIAO TONE RIGHT .. MIAO LETTER REFORMED TONE-8
2427 0 : return true;
2428 0 : if (codePoint >= 0x16FE0 && codePoint <= 0x16FE0) // TANGUT ITERATION MARK .. TANGUT ITERATION MARK
2429 0 : return true;
2430 0 : if (codePoint >= 0x17000 && codePoint <= 0x187EC) // Tangut Ideograph .. Tangut Ideograph
2431 0 : return true;
2432 0 : if (codePoint >= 0x18800 && codePoint <= 0x18AF2) // TANGUT COMPONENT-001 .. TANGUT COMPONENT-755
2433 0 : return true;
2434 0 : if (codePoint >= 0x1B000 && codePoint <= 0x1B001) // KATAKANA LETTER ARCHAIC E .. HIRAGANA LETTER ARCHAIC YE
2435 0 : return true;
2436 0 : if (codePoint >= 0x1BC00 && codePoint <= 0x1BC6A) // DUPLOYAN LETTER H .. DUPLOYAN LETTER VOCALIC M
2437 0 : return true;
2438 0 : if (codePoint >= 0x1BC70 && codePoint <= 0x1BC7C) // DUPLOYAN AFFIX LEFT HORIZONTAL SECANT .. DUPLOYAN AFFIX ATTACHED TANGENT HOOK
2439 0 : return true;
2440 0 : if (codePoint >= 0x1BC80 && codePoint <= 0x1BC88) // DUPLOYAN AFFIX HIGH ACUTE .. DUPLOYAN AFFIX HIGH VERTICAL
2441 0 : return true;
2442 0 : if (codePoint >= 0x1BC90 && codePoint <= 0x1BC99) // DUPLOYAN AFFIX LOW ACUTE .. DUPLOYAN AFFIX LOW ARROW
2443 0 : return true;
2444 0 : if (codePoint >= 0x1BC9D && codePoint <= 0x1BC9E) // DUPLOYAN THICK LETTER SELECTOR .. DUPLOYAN DOUBLE MARK
2445 0 : return true;
2446 0 : if (codePoint >= 0x1D165 && codePoint <= 0x1D169) // MUSICAL SYMBOL COMBINING STEM .. MUSICAL SYMBOL COMBINING TREMOLO-3
2447 0 : return true;
2448 0 : if (codePoint >= 0x1D16D && codePoint <= 0x1D172) // MUSICAL SYMBOL COMBINING AUGMENTATION DOT .. MUSICAL SYMBOL COMBINING FLAG-5
2449 0 : return true;
2450 0 : if (codePoint >= 0x1D17B && codePoint <= 0x1D182) // MUSICAL SYMBOL COMBINING ACCENT .. MUSICAL SYMBOL COMBINING LOURE
2451 0 : return true;
2452 0 : if (codePoint >= 0x1D185 && codePoint <= 0x1D18B) // MUSICAL SYMBOL COMBINING DOIT .. MUSICAL SYMBOL COMBINING TRIPLE TONGUE
2453 0 : return true;
2454 0 : if (codePoint >= 0x1D1AA && codePoint <= 0x1D1AD) // MUSICAL SYMBOL COMBINING DOWN BOW .. MUSICAL SYMBOL COMBINING SNAP PIZZICATO
2455 0 : return true;
2456 0 : if (codePoint >= 0x1D242 && codePoint <= 0x1D244) // COMBINING GREEK MUSICAL TRISEME .. COMBINING GREEK MUSICAL PENTASEME
2457 0 : return true;
2458 0 : if (codePoint >= 0x1D400 && codePoint <= 0x1D454) // MATHEMATICAL BOLD CAPITAL A .. MATHEMATICAL ITALIC SMALL G
2459 0 : return true;
2460 0 : if (codePoint >= 0x1D456 && codePoint <= 0x1D49C) // MATHEMATICAL ITALIC SMALL I .. MATHEMATICAL SCRIPT CAPITAL A
2461 0 : return true;
2462 0 : if (codePoint >= 0x1D49E && codePoint <= 0x1D49F) // MATHEMATICAL SCRIPT CAPITAL C .. MATHEMATICAL SCRIPT CAPITAL D
2463 0 : return true;
2464 0 : if (codePoint >= 0x1D4A2 && codePoint <= 0x1D4A2) // MATHEMATICAL SCRIPT CAPITAL G .. MATHEMATICAL SCRIPT CAPITAL G
2465 0 : return true;
2466 0 : if (codePoint >= 0x1D4A5 && codePoint <= 0x1D4A6) // MATHEMATICAL SCRIPT CAPITAL J .. MATHEMATICAL SCRIPT CAPITAL K
2467 0 : return true;
2468 0 : if (codePoint >= 0x1D4A9 && codePoint <= 0x1D4AC) // MATHEMATICAL SCRIPT CAPITAL N .. MATHEMATICAL SCRIPT CAPITAL Q
2469 0 : return true;
2470 0 : if (codePoint >= 0x1D4AE && codePoint <= 0x1D4B9) // MATHEMATICAL SCRIPT CAPITAL S .. MATHEMATICAL SCRIPT SMALL D
2471 0 : return true;
2472 0 : if (codePoint >= 0x1D4BB && codePoint <= 0x1D4BB) // MATHEMATICAL SCRIPT SMALL F .. MATHEMATICAL SCRIPT SMALL F
2473 0 : return true;
2474 0 : if (codePoint >= 0x1D4BD && codePoint <= 0x1D4C3) // MATHEMATICAL SCRIPT SMALL H .. MATHEMATICAL SCRIPT SMALL N
2475 0 : return true;
2476 0 : if (codePoint >= 0x1D4C5 && codePoint <= 0x1D505) // MATHEMATICAL SCRIPT SMALL P .. MATHEMATICAL FRAKTUR CAPITAL B
2477 0 : return true;
2478 0 : if (codePoint >= 0x1D507 && codePoint <= 0x1D50A) // MATHEMATICAL FRAKTUR CAPITAL D .. MATHEMATICAL FRAKTUR CAPITAL G
2479 0 : return true;
2480 0 : if (codePoint >= 0x1D50D && codePoint <= 0x1D514) // MATHEMATICAL FRAKTUR CAPITAL J .. MATHEMATICAL FRAKTUR CAPITAL Q
2481 0 : return true;
2482 0 : if (codePoint >= 0x1D516 && codePoint <= 0x1D51C) // MATHEMATICAL FRAKTUR CAPITAL S .. MATHEMATICAL FRAKTUR CAPITAL Y
2483 0 : return true;
2484 0 : if (codePoint >= 0x1D51E && codePoint <= 0x1D539) // MATHEMATICAL FRAKTUR SMALL A .. MATHEMATICAL DOUBLE-STRUCK CAPITAL B
2485 0 : return true;
2486 0 : if (codePoint >= 0x1D53B && codePoint <= 0x1D53E) // MATHEMATICAL DOUBLE-STRUCK CAPITAL D .. MATHEMATICAL DOUBLE-STRUCK CAPITAL G
2487 0 : return true;
2488 0 : if (codePoint >= 0x1D540 && codePoint <= 0x1D544) // MATHEMATICAL DOUBLE-STRUCK CAPITAL I .. MATHEMATICAL DOUBLE-STRUCK CAPITAL M
2489 0 : return true;
2490 0 : if (codePoint >= 0x1D546 && codePoint <= 0x1D546) // MATHEMATICAL DOUBLE-STRUCK CAPITAL O .. MATHEMATICAL DOUBLE-STRUCK CAPITAL O
2491 0 : return true;
2492 0 : if (codePoint >= 0x1D54A && codePoint <= 0x1D550) // MATHEMATICAL DOUBLE-STRUCK CAPITAL S .. MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
2493 0 : return true;
2494 0 : if (codePoint >= 0x1D552 && codePoint <= 0x1D6A5) // MATHEMATICAL DOUBLE-STRUCK SMALL A .. MATHEMATICAL ITALIC SMALL DOTLESS J
2495 0 : return true;
2496 0 : if (codePoint >= 0x1D6A8 && codePoint <= 0x1D6C0) // MATHEMATICAL BOLD CAPITAL ALPHA .. MATHEMATICAL BOLD CAPITAL OMEGA
2497 0 : return true;
2498 0 : if (codePoint >= 0x1D6C2 && codePoint <= 0x1D6DA) // MATHEMATICAL BOLD SMALL ALPHA .. MATHEMATICAL BOLD SMALL OMEGA
2499 0 : return true;
2500 0 : if (codePoint >= 0x1D6DC && codePoint <= 0x1D6FA) // MATHEMATICAL BOLD EPSILON SYMBOL .. MATHEMATICAL ITALIC CAPITAL OMEGA
2501 0 : return true;
2502 0 : if (codePoint >= 0x1D6FC && codePoint <= 0x1D714) // MATHEMATICAL ITALIC SMALL ALPHA .. MATHEMATICAL ITALIC SMALL OMEGA
2503 0 : return true;
2504 0 : if (codePoint >= 0x1D716 && codePoint <= 0x1D734) // MATHEMATICAL ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
2505 0 : return true;
2506 0 : if (codePoint >= 0x1D736 && codePoint <= 0x1D74E) // MATHEMATICAL BOLD ITALIC SMALL ALPHA .. MATHEMATICAL BOLD ITALIC SMALL OMEGA
2507 0 : return true;
2508 0 : if (codePoint >= 0x1D750 && codePoint <= 0x1D76E) // MATHEMATICAL BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
2509 0 : return true;
2510 0 : if (codePoint >= 0x1D770 && codePoint <= 0x1D788) // MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
2511 0 : return true;
2512 0 : if (codePoint >= 0x1D78A && codePoint <= 0x1D7A8) // MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
2513 0 : return true;
2514 0 : if (codePoint >= 0x1D7AA && codePoint <= 0x1D7C2) // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
2515 0 : return true;
2516 0 : if (codePoint >= 0x1D7C4 && codePoint <= 0x1D7CB) // MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD SMALL DIGAMMA
2517 0 : return true;
2518 0 : if (codePoint >= 0x1D7CE && codePoint <= 0x1D7FF) // MATHEMATICAL BOLD DIGIT ZERO .. MATHEMATICAL MONOSPACE DIGIT NINE
2519 0 : return true;
2520 0 : if (codePoint >= 0x1DA00 && codePoint <= 0x1DA36) // SIGNWRITING HEAD RIM .. SIGNWRITING AIR SUCKING IN
2521 0 : return true;
2522 0 : if (codePoint >= 0x1DA3B && codePoint <= 0x1DA6C) // SIGNWRITING MOUTH CLOSED NEUTRAL .. SIGNWRITING EXCITEMENT
2523 0 : return true;
2524 0 : if (codePoint >= 0x1DA75 && codePoint <= 0x1DA75) // SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS .. SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
2525 0 : return true;
2526 0 : if (codePoint >= 0x1DA84 && codePoint <= 0x1DA84) // SIGNWRITING LOCATION HEAD NECK .. SIGNWRITING LOCATION HEAD NECK
2527 0 : return true;
2528 0 : if (codePoint >= 0x1DA9B && codePoint <= 0x1DA9F) // SIGNWRITING FILL MODIFIER-2 .. SIGNWRITING FILL MODIFIER-6
2529 0 : return true;
2530 0 : if (codePoint >= 0x1DAA1 && codePoint <= 0x1DAAF) // SIGNWRITING ROTATION MODIFIER-2 .. SIGNWRITING ROTATION MODIFIER-16
2531 0 : return true;
2532 0 : if (codePoint >= 0x1E000 && codePoint <= 0x1E006) // COMBINING GLAGOLITIC LETTER AZU .. COMBINING GLAGOLITIC LETTER ZHIVETE
2533 0 : return true;
2534 0 : if (codePoint >= 0x1E008 && codePoint <= 0x1E018) // COMBINING GLAGOLITIC LETTER ZEMLJA .. COMBINING GLAGOLITIC LETTER HERU
2535 0 : return true;
2536 0 : if (codePoint >= 0x1E01B && codePoint <= 0x1E021) // COMBINING GLAGOLITIC LETTER SHTA .. COMBINING GLAGOLITIC LETTER YATI
2537 0 : return true;
2538 0 : if (codePoint >= 0x1E023 && codePoint <= 0x1E024) // COMBINING GLAGOLITIC LETTER YU .. COMBINING GLAGOLITIC LETTER SMALL YUS
2539 0 : return true;
2540 0 : if (codePoint >= 0x1E026 && codePoint <= 0x1E02A) // COMBINING GLAGOLITIC LETTER YO .. COMBINING GLAGOLITIC LETTER FITA
2541 0 : return true;
2542 0 : if (codePoint >= 0x1E800 && codePoint <= 0x1E8C4) // MENDE KIKAKUI SYLLABLE M001 KI .. MENDE KIKAKUI SYLLABLE M060 NYON
2543 0 : return true;
2544 0 : if (codePoint >= 0x1E8D0 && codePoint <= 0x1E8D6) // MENDE KIKAKUI COMBINING NUMBER TEENS .. MENDE KIKAKUI COMBINING NUMBER MILLIONS
2545 0 : return true;
2546 0 : if (codePoint >= 0x1E900 && codePoint <= 0x1E94A) // ADLAM CAPITAL LETTER ALIF .. ADLAM NUKTA
2547 0 : return true;
2548 0 : if (codePoint >= 0x1E950 && codePoint <= 0x1E959) // ADLAM DIGIT ZERO .. ADLAM DIGIT NINE
2549 0 : return true;
2550 0 : if (codePoint >= 0x1EE00 && codePoint <= 0x1EE03) // ARABIC MATHEMATICAL ALEF .. ARABIC MATHEMATICAL DAL
2551 0 : return true;
2552 0 : if (codePoint >= 0x1EE05 && codePoint <= 0x1EE1F) // ARABIC MATHEMATICAL WAW .. ARABIC MATHEMATICAL DOTLESS QAF
2553 0 : return true;
2554 0 : if (codePoint >= 0x1EE21 && codePoint <= 0x1EE22) // ARABIC MATHEMATICAL INITIAL BEH .. ARABIC MATHEMATICAL INITIAL JEEM
2555 0 : return true;
2556 0 : if (codePoint >= 0x1EE24 && codePoint <= 0x1EE24) // ARABIC MATHEMATICAL INITIAL HEH .. ARABIC MATHEMATICAL INITIAL HEH
2557 0 : return true;
2558 0 : if (codePoint >= 0x1EE27 && codePoint <= 0x1EE27) // ARABIC MATHEMATICAL INITIAL HAH .. ARABIC MATHEMATICAL INITIAL HAH
2559 0 : return true;
2560 0 : if (codePoint >= 0x1EE29 && codePoint <= 0x1EE32) // ARABIC MATHEMATICAL INITIAL YEH .. ARABIC MATHEMATICAL INITIAL QAF
2561 0 : return true;
2562 0 : if (codePoint >= 0x1EE34 && codePoint <= 0x1EE37) // ARABIC MATHEMATICAL INITIAL SHEEN .. ARABIC MATHEMATICAL INITIAL KHAH
2563 0 : return true;
2564 0 : if (codePoint >= 0x1EE39 && codePoint <= 0x1EE39) // ARABIC MATHEMATICAL INITIAL DAD .. ARABIC MATHEMATICAL INITIAL DAD
2565 0 : return true;
2566 0 : if (codePoint >= 0x1EE3B && codePoint <= 0x1EE3B) // ARABIC MATHEMATICAL INITIAL GHAIN .. ARABIC MATHEMATICAL INITIAL GHAIN
2567 0 : return true;
2568 0 : if (codePoint >= 0x1EE42 && codePoint <= 0x1EE42) // ARABIC MATHEMATICAL TAILED JEEM .. ARABIC MATHEMATICAL TAILED JEEM
2569 0 : return true;
2570 0 : if (codePoint >= 0x1EE47 && codePoint <= 0x1EE47) // ARABIC MATHEMATICAL TAILED HAH .. ARABIC MATHEMATICAL TAILED HAH
2571 0 : return true;
2572 0 : if (codePoint >= 0x1EE49 && codePoint <= 0x1EE49) // ARABIC MATHEMATICAL TAILED YEH .. ARABIC MATHEMATICAL TAILED YEH
2573 0 : return true;
2574 0 : if (codePoint >= 0x1EE4B && codePoint <= 0x1EE4B) // ARABIC MATHEMATICAL TAILED LAM .. ARABIC MATHEMATICAL TAILED LAM
2575 0 : return true;
2576 0 : if (codePoint >= 0x1EE4D && codePoint <= 0x1EE4F) // ARABIC MATHEMATICAL TAILED NOON .. ARABIC MATHEMATICAL TAILED AIN
2577 0 : return true;
2578 0 : if (codePoint >= 0x1EE51 && codePoint <= 0x1EE52) // ARABIC MATHEMATICAL TAILED SAD .. ARABIC MATHEMATICAL TAILED QAF
2579 0 : return true;
2580 0 : if (codePoint >= 0x1EE54 && codePoint <= 0x1EE54) // ARABIC MATHEMATICAL TAILED SHEEN .. ARABIC MATHEMATICAL TAILED SHEEN
2581 0 : return true;
2582 0 : if (codePoint >= 0x1EE57 && codePoint <= 0x1EE57) // ARABIC MATHEMATICAL TAILED KHAH .. ARABIC MATHEMATICAL TAILED KHAH
2583 0 : return true;
2584 0 : if (codePoint >= 0x1EE59 && codePoint <= 0x1EE59) // ARABIC MATHEMATICAL TAILED DAD .. ARABIC MATHEMATICAL TAILED DAD
2585 0 : return true;
2586 0 : if (codePoint >= 0x1EE5B && codePoint <= 0x1EE5B) // ARABIC MATHEMATICAL TAILED GHAIN .. ARABIC MATHEMATICAL TAILED GHAIN
2587 0 : return true;
2588 0 : if (codePoint >= 0x1EE5D && codePoint <= 0x1EE5D) // ARABIC MATHEMATICAL TAILED DOTLESS NOON .. ARABIC MATHEMATICAL TAILED DOTLESS NOON
2589 0 : return true;
2590 0 : if (codePoint >= 0x1EE5F && codePoint <= 0x1EE5F) // ARABIC MATHEMATICAL TAILED DOTLESS QAF .. ARABIC MATHEMATICAL TAILED DOTLESS QAF
2591 0 : return true;
2592 0 : if (codePoint >= 0x1EE61 && codePoint <= 0x1EE62) // ARABIC MATHEMATICAL STRETCHED BEH .. ARABIC MATHEMATICAL STRETCHED JEEM
2593 0 : return true;
2594 0 : if (codePoint >= 0x1EE64 && codePoint <= 0x1EE64) // ARABIC MATHEMATICAL STRETCHED HEH .. ARABIC MATHEMATICAL STRETCHED HEH
2595 0 : return true;
2596 0 : if (codePoint >= 0x1EE67 && codePoint <= 0x1EE6A) // ARABIC MATHEMATICAL STRETCHED HAH .. ARABIC MATHEMATICAL STRETCHED KAF
2597 0 : return true;
2598 0 : if (codePoint >= 0x1EE6C && codePoint <= 0x1EE72) // ARABIC MATHEMATICAL STRETCHED MEEM .. ARABIC MATHEMATICAL STRETCHED QAF
2599 0 : return true;
2600 0 : if (codePoint >= 0x1EE74 && codePoint <= 0x1EE77) // ARABIC MATHEMATICAL STRETCHED SHEEN .. ARABIC MATHEMATICAL STRETCHED KHAH
2601 0 : return true;
2602 0 : if (codePoint >= 0x1EE79 && codePoint <= 0x1EE7C) // ARABIC MATHEMATICAL STRETCHED DAD .. ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
2603 0 : return true;
2604 0 : if (codePoint >= 0x1EE7E && codePoint <= 0x1EE7E) // ARABIC MATHEMATICAL STRETCHED DOTLESS FEH .. ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
2605 0 : return true;
2606 0 : if (codePoint >= 0x1EE80 && codePoint <= 0x1EE89) // ARABIC MATHEMATICAL LOOPED ALEF .. ARABIC MATHEMATICAL LOOPED YEH
2607 0 : return true;
2608 0 : if (codePoint >= 0x1EE8B && codePoint <= 0x1EE9B) // ARABIC MATHEMATICAL LOOPED LAM .. ARABIC MATHEMATICAL LOOPED GHAIN
2609 0 : return true;
2610 0 : if (codePoint >= 0x1EEA1 && codePoint <= 0x1EEA3) // ARABIC MATHEMATICAL DOUBLE-STRUCK BEH .. ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
2611 0 : return true;
2612 0 : if (codePoint >= 0x1EEA5 && codePoint <= 0x1EEA9) // ARABIC MATHEMATICAL DOUBLE-STRUCK WAW .. ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
2613 0 : return true;
2614 0 : if (codePoint >= 0x1EEAB && codePoint <= 0x1EEBB) // ARABIC MATHEMATICAL DOUBLE-STRUCK LAM .. ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
2615 0 : return true;
2616 0 : if (codePoint >= 0x20000 && codePoint <= 0x2A6D6) // CJK Ideograph Extension B .. CJK Ideograph Extension B
2617 0 : return true;
2618 0 : if (codePoint >= 0x2A700 && codePoint <= 0x2B734) // CJK Ideograph Extension C .. CJK Ideograph Extension C
2619 0 : return true;
2620 0 : if (codePoint >= 0x2B740 && codePoint <= 0x2B81D) // CJK Ideograph Extension D .. CJK Ideograph Extension D
2621 0 : return true;
2622 0 : if (codePoint >= 0x2B820 && codePoint <= 0x2CEA1) // CJK Ideograph Extension E .. CJK Ideograph Extension E
2623 0 : return true;
2624 0 : if (codePoint >= 0x2F800 && codePoint <= 0x2FA1D) // CJK COMPATIBILITY IDEOGRAPH-2F800 .. CJK COMPATIBILITY IDEOGRAPH-2FA1D
2625 0 : return true;
2626 0 : if (codePoint >= 0xE0100 && codePoint <= 0xE01EF) // VARIATION SELECTOR-17 .. VARIATION SELECTOR-256
2627 0 : return true;
2628 0 : return false;
2629 : }
2630 :
2631 : bool
2632 0 : js::unicode::CanUpperCaseSpecialCasing(char16_t ch)
2633 : {
2634 0 : if (ch < 0x00DF || ch > 0xFB17)
2635 0 : return false;
2636 0 : if (ch <= 0x0587) {
2637 : // U+00DF LATIN SMALL LETTER SHARP S
2638 : // U+0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N)
2639 : // U+01F0 LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK)
2640 : // U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS)
2641 : // U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS)
2642 : // U+0587 ARMENIAN SMALL LIGATURE ECH YIWN
2643 0 : return ch == 0x00DF || ch == 0x0149 || ch == 0x01F0 || ch == 0x0390 || ch == 0x03B0 ||
2644 0 : ch == 0x0587;
2645 : }
2646 0 : if (ch <= 0x1FFC) {
2647 : // U+1E96 LATIN SMALL LETTER H WITH LINE BELOW .. U+1E9A LATIN SMALL LETTER A WITH RIGHT HALF RING
2648 0 : if (ch <= 0x1E9A)
2649 0 : return ch >= 0x1E96;
2650 0 : if (ch < 0x1F50)
2651 0 : return false;
2652 : // U+1F50 GREEK SMALL LETTER UPSILON WITH PSILI
2653 : // U+1F52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
2654 : // U+1F54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
2655 : // U+1F56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
2656 : // U+1F80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. U+1FAF GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
2657 : // U+1FB2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI .. U+1FB4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
2658 : // U+1FB6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI .. U+1FB7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
2659 : // U+1FBC GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
2660 : // U+1FC2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI .. U+1FC4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
2661 : // U+1FC6 GREEK SMALL LETTER ETA WITH PERISPOMENI .. U+1FC7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
2662 : // U+1FCC GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
2663 : // U+1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA .. U+1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
2664 : // U+1FD6 GREEK SMALL LETTER IOTA WITH PERISPOMENI .. U+1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
2665 : // U+1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA .. U+1FE4 GREEK SMALL LETTER RHO WITH PSILI
2666 : // U+1FE6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI .. U+1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
2667 : // U+1FF2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI .. U+1FF4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
2668 : // U+1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI .. U+1FF7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
2669 : // U+1FFC GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
2670 0 : return ch == 0x1F50 || ch == 0x1F52 || ch == 0x1F54 || ch == 0x1F56 ||
2671 0 : (ch >= 0x1F80 && ch <= 0x1FAF) || (ch >= 0x1FB2 && ch <= 0x1FB4) ||
2672 0 : (ch >= 0x1FB6 && ch <= 0x1FB7) || ch == 0x1FBC || (ch >= 0x1FC2 && ch <= 0x1FC4) ||
2673 0 : (ch >= 0x1FC6 && ch <= 0x1FC7) || ch == 0x1FCC || (ch >= 0x1FD2 && ch <= 0x1FD3) ||
2674 0 : (ch >= 0x1FD6 && ch <= 0x1FD7) || (ch >= 0x1FE2 && ch <= 0x1FE4) ||
2675 0 : (ch >= 0x1FE6 && ch <= 0x1FE7) || (ch >= 0x1FF2 && ch <= 0x1FF4) ||
2676 0 : (ch >= 0x1FF6 && ch <= 0x1FF7) || ch == 0x1FFC;
2677 : }
2678 0 : if (ch < 0xFB00)
2679 0 : return false;
2680 : // U+FB00 LATIN SMALL LIGATURE FF .. U+FB06 LATIN SMALL LIGATURE ST
2681 : // U+FB13 ARMENIAN SMALL LIGATURE MEN NOW .. U+FB17 ARMENIAN SMALL LIGATURE MEN XEH
2682 0 : return (ch >= 0xFB00 && ch <= 0xFB06) || (ch >= 0xFB13 && ch <= 0xFB17);
2683 : }
2684 :
2685 : size_t
2686 0 : js::unicode::LengthUpperCaseSpecialCasing(char16_t ch)
2687 : {
2688 0 : switch(ch) {
2689 0 : case 0x00DF: return 2; // LATIN SMALL LETTER SHARP S
2690 0 : case 0x0149: return 2; // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N)
2691 0 : case 0x01F0: return 2; // LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK)
2692 0 : case 0x0390: return 3; // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS)
2693 0 : case 0x03B0: return 3; // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS)
2694 0 : case 0x0587: return 2; // ARMENIAN SMALL LIGATURE ECH YIWN
2695 0 : case 0x1E96: return 2; // LATIN SMALL LETTER H WITH LINE BELOW
2696 0 : case 0x1E97: return 2; // LATIN SMALL LETTER T WITH DIAERESIS
2697 0 : case 0x1E98: return 2; // LATIN SMALL LETTER W WITH RING ABOVE
2698 0 : case 0x1E99: return 2; // LATIN SMALL LETTER Y WITH RING ABOVE
2699 0 : case 0x1E9A: return 2; // LATIN SMALL LETTER A WITH RIGHT HALF RING
2700 0 : case 0x1F50: return 2; // GREEK SMALL LETTER UPSILON WITH PSILI
2701 0 : case 0x1F52: return 3; // GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
2702 0 : case 0x1F54: return 3; // GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
2703 0 : case 0x1F56: return 3; // GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
2704 0 : case 0x1F80: return 2; // GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
2705 0 : case 0x1F81: return 2; // GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
2706 0 : case 0x1F82: return 2; // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
2707 0 : case 0x1F83: return 2; // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
2708 0 : case 0x1F84: return 2; // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
2709 0 : case 0x1F85: return 2; // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
2710 0 : case 0x1F86: return 2; // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
2711 0 : case 0x1F87: return 2; // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
2712 0 : case 0x1F88: return 2; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
2713 0 : case 0x1F89: return 2; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
2714 0 : case 0x1F8A: return 2; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
2715 0 : case 0x1F8B: return 2; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
2716 0 : case 0x1F8C: return 2; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
2717 0 : case 0x1F8D: return 2; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
2718 0 : case 0x1F8E: return 2; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
2719 0 : case 0x1F8F: return 2; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
2720 0 : case 0x1F90: return 2; // GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
2721 0 : case 0x1F91: return 2; // GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
2722 0 : case 0x1F92: return 2; // GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
2723 0 : case 0x1F93: return 2; // GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
2724 0 : case 0x1F94: return 2; // GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
2725 0 : case 0x1F95: return 2; // GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
2726 0 : case 0x1F96: return 2; // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
2727 0 : case 0x1F97: return 2; // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
2728 0 : case 0x1F98: return 2; // GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
2729 0 : case 0x1F99: return 2; // GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
2730 0 : case 0x1F9A: return 2; // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
2731 0 : case 0x1F9B: return 2; // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
2732 0 : case 0x1F9C: return 2; // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
2733 0 : case 0x1F9D: return 2; // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
2734 0 : case 0x1F9E: return 2; // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
2735 0 : case 0x1F9F: return 2; // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
2736 0 : case 0x1FA0: return 2; // GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
2737 0 : case 0x1FA1: return 2; // GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
2738 0 : case 0x1FA2: return 2; // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
2739 0 : case 0x1FA3: return 2; // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
2740 0 : case 0x1FA4: return 2; // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
2741 0 : case 0x1FA5: return 2; // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
2742 0 : case 0x1FA6: return 2; // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
2743 0 : case 0x1FA7: return 2; // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
2744 0 : case 0x1FA8: return 2; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
2745 0 : case 0x1FA9: return 2; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
2746 0 : case 0x1FAA: return 2; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
2747 0 : case 0x1FAB: return 2; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
2748 0 : case 0x1FAC: return 2; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
2749 0 : case 0x1FAD: return 2; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
2750 0 : case 0x1FAE: return 2; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
2751 0 : case 0x1FAF: return 2; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
2752 0 : case 0x1FB2: return 2; // GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
2753 0 : case 0x1FB3: return 2; // GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
2754 0 : case 0x1FB4: return 2; // GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
2755 0 : case 0x1FB6: return 2; // GREEK SMALL LETTER ALPHA WITH PERISPOMENI
2756 0 : case 0x1FB7: return 3; // GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
2757 0 : case 0x1FBC: return 2; // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
2758 0 : case 0x1FC2: return 2; // GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
2759 0 : case 0x1FC3: return 2; // GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
2760 0 : case 0x1FC4: return 2; // GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
2761 0 : case 0x1FC6: return 2; // GREEK SMALL LETTER ETA WITH PERISPOMENI
2762 0 : case 0x1FC7: return 3; // GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
2763 0 : case 0x1FCC: return 2; // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
2764 0 : case 0x1FD2: return 3; // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
2765 0 : case 0x1FD3: return 3; // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
2766 0 : case 0x1FD6: return 2; // GREEK SMALL LETTER IOTA WITH PERISPOMENI
2767 0 : case 0x1FD7: return 3; // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
2768 0 : case 0x1FE2: return 3; // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
2769 0 : case 0x1FE3: return 3; // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
2770 0 : case 0x1FE4: return 2; // GREEK SMALL LETTER RHO WITH PSILI
2771 0 : case 0x1FE6: return 2; // GREEK SMALL LETTER UPSILON WITH PERISPOMENI
2772 0 : case 0x1FE7: return 3; // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
2773 0 : case 0x1FF2: return 2; // GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
2774 0 : case 0x1FF3: return 2; // GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
2775 0 : case 0x1FF4: return 2; // GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
2776 0 : case 0x1FF6: return 2; // GREEK SMALL LETTER OMEGA WITH PERISPOMENI
2777 0 : case 0x1FF7: return 3; // GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
2778 0 : case 0x1FFC: return 2; // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
2779 0 : case 0xFB00: return 2; // LATIN SMALL LIGATURE FF
2780 0 : case 0xFB01: return 2; // LATIN SMALL LIGATURE FI
2781 0 : case 0xFB02: return 2; // LATIN SMALL LIGATURE FL
2782 0 : case 0xFB03: return 3; // LATIN SMALL LIGATURE FFI
2783 0 : case 0xFB04: return 3; // LATIN SMALL LIGATURE FFL
2784 0 : case 0xFB05: return 2; // LATIN SMALL LIGATURE LONG S T
2785 0 : case 0xFB06: return 2; // LATIN SMALL LIGATURE ST
2786 0 : case 0xFB13: return 2; // ARMENIAN SMALL LIGATURE MEN NOW
2787 0 : case 0xFB14: return 2; // ARMENIAN SMALL LIGATURE MEN ECH
2788 0 : case 0xFB15: return 2; // ARMENIAN SMALL LIGATURE MEN INI
2789 0 : case 0xFB16: return 2; // ARMENIAN SMALL LIGATURE VEW NOW
2790 0 : case 0xFB17: return 2; // ARMENIAN SMALL LIGATURE MEN XEH
2791 : }
2792 :
2793 0 : MOZ_ASSERT_UNREACHABLE("Bad character input.");
2794 : return 0;
2795 : }
2796 :
2797 : void
2798 0 : js::unicode::AppendUpperCaseSpecialCasing(char16_t ch, char16_t* elements, size_t* index)
2799 : {
2800 0 : switch(ch) {
2801 : case 0x00DF: // LATIN SMALL LETTER SHARP S
2802 0 : elements[(*index)++] = 0x0053; // LATIN CAPITAL LETTER S
2803 0 : elements[(*index)++] = 0x0053; // LATIN CAPITAL LETTER S
2804 0 : return;
2805 : case 0x0149: // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N)
2806 0 : elements[(*index)++] = 0x02BC; // MODIFIER LETTER APOSTROPHE
2807 0 : elements[(*index)++] = 0x004E; // LATIN CAPITAL LETTER N
2808 0 : return;
2809 : case 0x01F0: // LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK)
2810 0 : elements[(*index)++] = 0x004A; // LATIN CAPITAL LETTER J
2811 0 : elements[(*index)++] = 0x030C; // COMBINING CARON (NON-SPACING HACEK)
2812 0 : return;
2813 : case 0x0390: // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS)
2814 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2815 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
2816 0 : elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE)
2817 0 : return;
2818 : case 0x03B0: // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS)
2819 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
2820 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
2821 0 : elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE)
2822 0 : return;
2823 : case 0x0587: // ARMENIAN SMALL LIGATURE ECH YIWN
2824 0 : elements[(*index)++] = 0x0535; // ARMENIAN CAPITAL LETTER ECH
2825 0 : elements[(*index)++] = 0x0552; // ARMENIAN CAPITAL LETTER YIWN
2826 0 : return;
2827 : case 0x1E96: // LATIN SMALL LETTER H WITH LINE BELOW
2828 0 : elements[(*index)++] = 0x0048; // LATIN CAPITAL LETTER H
2829 0 : elements[(*index)++] = 0x0331; // COMBINING MACRON BELOW (NON-SPACING MACRON BELOW)
2830 0 : return;
2831 : case 0x1E97: // LATIN SMALL LETTER T WITH DIAERESIS
2832 0 : elements[(*index)++] = 0x0054; // LATIN CAPITAL LETTER T
2833 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
2834 0 : return;
2835 : case 0x1E98: // LATIN SMALL LETTER W WITH RING ABOVE
2836 0 : elements[(*index)++] = 0x0057; // LATIN CAPITAL LETTER W
2837 0 : elements[(*index)++] = 0x030A; // COMBINING RING ABOVE (NON-SPACING RING ABOVE)
2838 0 : return;
2839 : case 0x1E99: // LATIN SMALL LETTER Y WITH RING ABOVE
2840 0 : elements[(*index)++] = 0x0059; // LATIN CAPITAL LETTER Y
2841 0 : elements[(*index)++] = 0x030A; // COMBINING RING ABOVE (NON-SPACING RING ABOVE)
2842 0 : return;
2843 : case 0x1E9A: // LATIN SMALL LETTER A WITH RIGHT HALF RING
2844 0 : elements[(*index)++] = 0x0041; // LATIN CAPITAL LETTER A
2845 0 : elements[(*index)++] = 0x02BE; // MODIFIER LETTER RIGHT HALF RING
2846 0 : return;
2847 : case 0x1F50: // GREEK SMALL LETTER UPSILON WITH PSILI
2848 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
2849 0 : elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE)
2850 0 : return;
2851 : case 0x1F52: // GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
2852 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
2853 0 : elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE)
2854 0 : elements[(*index)++] = 0x0300; // COMBINING GRAVE ACCENT (NON-SPACING GRAVE)
2855 0 : return;
2856 : case 0x1F54: // GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
2857 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
2858 0 : elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE)
2859 0 : elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE)
2860 0 : return;
2861 : case 0x1F56: // GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
2862 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
2863 0 : elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE)
2864 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
2865 0 : return;
2866 : case 0x1F80: // GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
2867 0 : elements[(*index)++] = 0x1F08; // GREEK CAPITAL LETTER ALPHA WITH PSILI
2868 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2869 0 : return;
2870 : case 0x1F81: // GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
2871 0 : elements[(*index)++] = 0x1F09; // GREEK CAPITAL LETTER ALPHA WITH DASIA
2872 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2873 0 : return;
2874 : case 0x1F82: // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
2875 0 : elements[(*index)++] = 0x1F0A; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
2876 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2877 0 : return;
2878 : case 0x1F83: // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
2879 0 : elements[(*index)++] = 0x1F0B; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
2880 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2881 0 : return;
2882 : case 0x1F84: // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
2883 0 : elements[(*index)++] = 0x1F0C; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
2884 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2885 0 : return;
2886 : case 0x1F85: // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
2887 0 : elements[(*index)++] = 0x1F0D; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
2888 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2889 0 : return;
2890 : case 0x1F86: // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
2891 0 : elements[(*index)++] = 0x1F0E; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
2892 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2893 0 : return;
2894 : case 0x1F87: // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
2895 0 : elements[(*index)++] = 0x1F0F; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
2896 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2897 0 : return;
2898 : case 0x1F88: // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
2899 0 : elements[(*index)++] = 0x1F08; // GREEK CAPITAL LETTER ALPHA WITH PSILI
2900 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2901 0 : return;
2902 : case 0x1F89: // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
2903 0 : elements[(*index)++] = 0x1F09; // GREEK CAPITAL LETTER ALPHA WITH DASIA
2904 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2905 0 : return;
2906 : case 0x1F8A: // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
2907 0 : elements[(*index)++] = 0x1F0A; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
2908 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2909 0 : return;
2910 : case 0x1F8B: // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
2911 0 : elements[(*index)++] = 0x1F0B; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
2912 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2913 0 : return;
2914 : case 0x1F8C: // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
2915 0 : elements[(*index)++] = 0x1F0C; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
2916 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2917 0 : return;
2918 : case 0x1F8D: // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
2919 0 : elements[(*index)++] = 0x1F0D; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
2920 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2921 0 : return;
2922 : case 0x1F8E: // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
2923 0 : elements[(*index)++] = 0x1F0E; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
2924 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2925 0 : return;
2926 : case 0x1F8F: // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
2927 0 : elements[(*index)++] = 0x1F0F; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
2928 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2929 0 : return;
2930 : case 0x1F90: // GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
2931 0 : elements[(*index)++] = 0x1F28; // GREEK CAPITAL LETTER ETA WITH PSILI
2932 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2933 0 : return;
2934 : case 0x1F91: // GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
2935 0 : elements[(*index)++] = 0x1F29; // GREEK CAPITAL LETTER ETA WITH DASIA
2936 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2937 0 : return;
2938 : case 0x1F92: // GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
2939 0 : elements[(*index)++] = 0x1F2A; // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
2940 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2941 0 : return;
2942 : case 0x1F93: // GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
2943 0 : elements[(*index)++] = 0x1F2B; // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
2944 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2945 0 : return;
2946 : case 0x1F94: // GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
2947 0 : elements[(*index)++] = 0x1F2C; // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
2948 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2949 0 : return;
2950 : case 0x1F95: // GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
2951 0 : elements[(*index)++] = 0x1F2D; // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
2952 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2953 0 : return;
2954 : case 0x1F96: // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
2955 0 : elements[(*index)++] = 0x1F2E; // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
2956 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2957 0 : return;
2958 : case 0x1F97: // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
2959 0 : elements[(*index)++] = 0x1F2F; // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
2960 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2961 0 : return;
2962 : case 0x1F98: // GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
2963 0 : elements[(*index)++] = 0x1F28; // GREEK CAPITAL LETTER ETA WITH PSILI
2964 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2965 0 : return;
2966 : case 0x1F99: // GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
2967 0 : elements[(*index)++] = 0x1F29; // GREEK CAPITAL LETTER ETA WITH DASIA
2968 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2969 0 : return;
2970 : case 0x1F9A: // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
2971 0 : elements[(*index)++] = 0x1F2A; // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
2972 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2973 0 : return;
2974 : case 0x1F9B: // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
2975 0 : elements[(*index)++] = 0x1F2B; // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
2976 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2977 0 : return;
2978 : case 0x1F9C: // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
2979 0 : elements[(*index)++] = 0x1F2C; // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
2980 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2981 0 : return;
2982 : case 0x1F9D: // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
2983 0 : elements[(*index)++] = 0x1F2D; // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
2984 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2985 0 : return;
2986 : case 0x1F9E: // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
2987 0 : elements[(*index)++] = 0x1F2E; // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
2988 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2989 0 : return;
2990 : case 0x1F9F: // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
2991 0 : elements[(*index)++] = 0x1F2F; // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
2992 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2993 0 : return;
2994 : case 0x1FA0: // GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
2995 0 : elements[(*index)++] = 0x1F68; // GREEK CAPITAL LETTER OMEGA WITH PSILI
2996 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
2997 0 : return;
2998 : case 0x1FA1: // GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
2999 0 : elements[(*index)++] = 0x1F69; // GREEK CAPITAL LETTER OMEGA WITH DASIA
3000 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3001 0 : return;
3002 : case 0x1FA2: // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
3003 0 : elements[(*index)++] = 0x1F6A; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
3004 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3005 0 : return;
3006 : case 0x1FA3: // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
3007 0 : elements[(*index)++] = 0x1F6B; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
3008 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3009 0 : return;
3010 : case 0x1FA4: // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
3011 0 : elements[(*index)++] = 0x1F6C; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
3012 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3013 0 : return;
3014 : case 0x1FA5: // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
3015 0 : elements[(*index)++] = 0x1F6D; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
3016 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3017 0 : return;
3018 : case 0x1FA6: // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
3019 0 : elements[(*index)++] = 0x1F6E; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
3020 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3021 0 : return;
3022 : case 0x1FA7: // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
3023 0 : elements[(*index)++] = 0x1F6F; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
3024 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3025 0 : return;
3026 : case 0x1FA8: // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
3027 0 : elements[(*index)++] = 0x1F68; // GREEK CAPITAL LETTER OMEGA WITH PSILI
3028 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3029 0 : return;
3030 : case 0x1FA9: // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
3031 0 : elements[(*index)++] = 0x1F69; // GREEK CAPITAL LETTER OMEGA WITH DASIA
3032 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3033 0 : return;
3034 : case 0x1FAA: // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
3035 0 : elements[(*index)++] = 0x1F6A; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
3036 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3037 0 : return;
3038 : case 0x1FAB: // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
3039 0 : elements[(*index)++] = 0x1F6B; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
3040 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3041 0 : return;
3042 : case 0x1FAC: // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
3043 0 : elements[(*index)++] = 0x1F6C; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
3044 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3045 0 : return;
3046 : case 0x1FAD: // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
3047 0 : elements[(*index)++] = 0x1F6D; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
3048 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3049 0 : return;
3050 : case 0x1FAE: // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
3051 0 : elements[(*index)++] = 0x1F6E; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
3052 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3053 0 : return;
3054 : case 0x1FAF: // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
3055 0 : elements[(*index)++] = 0x1F6F; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
3056 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3057 0 : return;
3058 : case 0x1FB2: // GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
3059 0 : elements[(*index)++] = 0x1FBA; // GREEK CAPITAL LETTER ALPHA WITH VARIA
3060 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3061 0 : return;
3062 : case 0x1FB3: // GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
3063 0 : elements[(*index)++] = 0x0391; // GREEK CAPITAL LETTER ALPHA
3064 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3065 0 : return;
3066 : case 0x1FB4: // GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
3067 0 : elements[(*index)++] = 0x0386; // GREEK CAPITAL LETTER ALPHA WITH TONOS (GREEK CAPITAL LETTER ALPHA TONOS)
3068 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3069 0 : return;
3070 : case 0x1FB6: // GREEK SMALL LETTER ALPHA WITH PERISPOMENI
3071 0 : elements[(*index)++] = 0x0391; // GREEK CAPITAL LETTER ALPHA
3072 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3073 0 : return;
3074 : case 0x1FB7: // GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
3075 0 : elements[(*index)++] = 0x0391; // GREEK CAPITAL LETTER ALPHA
3076 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3077 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3078 0 : return;
3079 : case 0x1FBC: // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
3080 0 : elements[(*index)++] = 0x0391; // GREEK CAPITAL LETTER ALPHA
3081 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3082 0 : return;
3083 : case 0x1FC2: // GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
3084 0 : elements[(*index)++] = 0x1FCA; // GREEK CAPITAL LETTER ETA WITH VARIA
3085 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3086 0 : return;
3087 : case 0x1FC3: // GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
3088 0 : elements[(*index)++] = 0x0397; // GREEK CAPITAL LETTER ETA
3089 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3090 0 : return;
3091 : case 0x1FC4: // GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
3092 0 : elements[(*index)++] = 0x0389; // GREEK CAPITAL LETTER ETA WITH TONOS (GREEK CAPITAL LETTER ETA TONOS)
3093 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3094 0 : return;
3095 : case 0x1FC6: // GREEK SMALL LETTER ETA WITH PERISPOMENI
3096 0 : elements[(*index)++] = 0x0397; // GREEK CAPITAL LETTER ETA
3097 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3098 0 : return;
3099 : case 0x1FC7: // GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
3100 0 : elements[(*index)++] = 0x0397; // GREEK CAPITAL LETTER ETA
3101 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3102 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3103 0 : return;
3104 : case 0x1FCC: // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
3105 0 : elements[(*index)++] = 0x0397; // GREEK CAPITAL LETTER ETA
3106 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3107 0 : return;
3108 : case 0x1FD2: // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
3109 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3110 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
3111 0 : elements[(*index)++] = 0x0300; // COMBINING GRAVE ACCENT (NON-SPACING GRAVE)
3112 0 : return;
3113 : case 0x1FD3: // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
3114 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3115 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
3116 0 : elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE)
3117 0 : return;
3118 : case 0x1FD6: // GREEK SMALL LETTER IOTA WITH PERISPOMENI
3119 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3120 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3121 0 : return;
3122 : case 0x1FD7: // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
3123 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3124 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
3125 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3126 0 : return;
3127 : case 0x1FE2: // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
3128 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
3129 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
3130 0 : elements[(*index)++] = 0x0300; // COMBINING GRAVE ACCENT (NON-SPACING GRAVE)
3131 0 : return;
3132 : case 0x1FE3: // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
3133 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
3134 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
3135 0 : elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE)
3136 0 : return;
3137 : case 0x1FE4: // GREEK SMALL LETTER RHO WITH PSILI
3138 0 : elements[(*index)++] = 0x03A1; // GREEK CAPITAL LETTER RHO
3139 0 : elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE)
3140 0 : return;
3141 : case 0x1FE6: // GREEK SMALL LETTER UPSILON WITH PERISPOMENI
3142 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
3143 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3144 0 : return;
3145 : case 0x1FE7: // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
3146 0 : elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON
3147 0 : elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS)
3148 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3149 0 : return;
3150 : case 0x1FF2: // GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
3151 0 : elements[(*index)++] = 0x1FFA; // GREEK CAPITAL LETTER OMEGA WITH VARIA
3152 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3153 0 : return;
3154 : case 0x1FF3: // GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
3155 0 : elements[(*index)++] = 0x03A9; // GREEK CAPITAL LETTER OMEGA
3156 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3157 0 : return;
3158 : case 0x1FF4: // GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
3159 0 : elements[(*index)++] = 0x038F; // GREEK CAPITAL LETTER OMEGA WITH TONOS (GREEK CAPITAL LETTER OMEGA TONOS)
3160 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3161 0 : return;
3162 : case 0x1FF6: // GREEK SMALL LETTER OMEGA WITH PERISPOMENI
3163 0 : elements[(*index)++] = 0x03A9; // GREEK CAPITAL LETTER OMEGA
3164 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3165 0 : return;
3166 : case 0x1FF7: // GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
3167 0 : elements[(*index)++] = 0x03A9; // GREEK CAPITAL LETTER OMEGA
3168 0 : elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI
3169 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3170 0 : return;
3171 : case 0x1FFC: // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
3172 0 : elements[(*index)++] = 0x03A9; // GREEK CAPITAL LETTER OMEGA
3173 0 : elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA
3174 0 : return;
3175 : case 0xFB00: // LATIN SMALL LIGATURE FF
3176 0 : elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F
3177 0 : elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F
3178 0 : return;
3179 : case 0xFB01: // LATIN SMALL LIGATURE FI
3180 0 : elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F
3181 0 : elements[(*index)++] = 0x0049; // LATIN CAPITAL LETTER I
3182 0 : return;
3183 : case 0xFB02: // LATIN SMALL LIGATURE FL
3184 0 : elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F
3185 0 : elements[(*index)++] = 0x004C; // LATIN CAPITAL LETTER L
3186 0 : return;
3187 : case 0xFB03: // LATIN SMALL LIGATURE FFI
3188 0 : elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F
3189 0 : elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F
3190 0 : elements[(*index)++] = 0x0049; // LATIN CAPITAL LETTER I
3191 0 : return;
3192 : case 0xFB04: // LATIN SMALL LIGATURE FFL
3193 0 : elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F
3194 0 : elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F
3195 0 : elements[(*index)++] = 0x004C; // LATIN CAPITAL LETTER L
3196 0 : return;
3197 : case 0xFB05: // LATIN SMALL LIGATURE LONG S T
3198 0 : elements[(*index)++] = 0x0053; // LATIN CAPITAL LETTER S
3199 0 : elements[(*index)++] = 0x0054; // LATIN CAPITAL LETTER T
3200 0 : return;
3201 : case 0xFB06: // LATIN SMALL LIGATURE ST
3202 0 : elements[(*index)++] = 0x0053; // LATIN CAPITAL LETTER S
3203 0 : elements[(*index)++] = 0x0054; // LATIN CAPITAL LETTER T
3204 0 : return;
3205 : case 0xFB13: // ARMENIAN SMALL LIGATURE MEN NOW
3206 0 : elements[(*index)++] = 0x0544; // ARMENIAN CAPITAL LETTER MEN
3207 0 : elements[(*index)++] = 0x0546; // ARMENIAN CAPITAL LETTER NOW
3208 0 : return;
3209 : case 0xFB14: // ARMENIAN SMALL LIGATURE MEN ECH
3210 0 : elements[(*index)++] = 0x0544; // ARMENIAN CAPITAL LETTER MEN
3211 0 : elements[(*index)++] = 0x0535; // ARMENIAN CAPITAL LETTER ECH
3212 0 : return;
3213 : case 0xFB15: // ARMENIAN SMALL LIGATURE MEN INI
3214 0 : elements[(*index)++] = 0x0544; // ARMENIAN CAPITAL LETTER MEN
3215 0 : elements[(*index)++] = 0x053B; // ARMENIAN CAPITAL LETTER INI
3216 0 : return;
3217 : case 0xFB16: // ARMENIAN SMALL LIGATURE VEW NOW
3218 0 : elements[(*index)++] = 0x054E; // ARMENIAN CAPITAL LETTER VEW
3219 0 : elements[(*index)++] = 0x0546; // ARMENIAN CAPITAL LETTER NOW
3220 0 : return;
3221 : case 0xFB17: // ARMENIAN SMALL LIGATURE MEN XEH
3222 0 : elements[(*index)++] = 0x0544; // ARMENIAN CAPITAL LETTER MEN
3223 0 : elements[(*index)++] = 0x053D; // ARMENIAN CAPITAL LETTER XEH
3224 0 : return;
3225 : }
3226 :
3227 0 : MOZ_ASSERT_UNREACHABLE("Bad character input.");
3228 : return;
3229 : }
|