• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // This file was generated at 2014-10-08 15:25:47.940335
6 
7 #include "src/strings/unicode.h"
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include "src/strings/unicode-inl.h"
11 
12 #ifdef V8_INTL_SUPPORT
13 #include "unicode/uchar.h"
14 #endif
15 
16 namespace unibrow {
17 
18 #ifndef V8_INTL_SUPPORT
19 static const int kStartBit = (1 << 30);
20 static const int kChunkBits = (1 << 13);
21 #endif  // !V8_INTL_SUPPORT
22 
23 static const uchar kSentinel = static_cast<uchar>(-1);
24 
25 /**
26  * \file
27  * Implementations of functions for working with Unicode.
28  */
29 
30 using int16_t = signed short;     // NOLINT
31 using uint16_t = unsigned short;  // NOLINT
32 using int32_t = int;              // NOLINT
33 
34 #ifndef V8_INTL_SUPPORT
35 // All access to the character table should go through this function.
36 template <int D>
TableGet(const int32_t * table,int index)37 static inline uchar TableGet(const int32_t* table, int index) {
38   return table[D * index];
39 }
40 
GetEntry(int32_t entry)41 static inline uchar GetEntry(int32_t entry) { return entry & (kStartBit - 1); }
42 
IsStart(int32_t entry)43 static inline bool IsStart(int32_t entry) { return (entry & kStartBit) != 0; }
44 
45 /**
46  * Look up a character in the Unicode table using a mix of binary and
47  * interpolation search.  For a uniformly distributed array
48  * interpolation search beats binary search by a wide margin.  However,
49  * in this case interpolation search degenerates because of some very
50  * high values in the lower end of the table so this function uses a
51  * combination.  The average number of steps to look up the information
52  * about a character is around 10, slightly higher if there is no
53  * information available about the character.
54  */
LookupPredicate(const int32_t * table,uint16_t size,uchar chr)55 static bool LookupPredicate(const int32_t* table, uint16_t size, uchar chr) {
56   static const int kEntryDist = 1;
57   uint16_t value = chr & (kChunkBits - 1);
58   unsigned int low = 0;
59   unsigned int high = size - 1;
60   while (high != low) {
61     unsigned int mid = low + ((high - low) >> 1);
62     uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
63     // If we've found an entry less than or equal to this one, and the
64     // next one is not also less than this one, we've arrived.
65     if ((current_value <= value) &&
66         (mid + 1 == size ||
67          GetEntry(TableGet<kEntryDist>(table, mid + 1)) > value)) {
68       low = mid;
69       break;
70     } else if (current_value < value) {
71       low = mid + 1;
72     } else if (current_value > value) {
73       // If we've just checked the bottom-most value and it's not
74       // the one we're looking for, we're done.
75       if (mid == 0) break;
76       high = mid - 1;
77     }
78   }
79   int32_t field = TableGet<kEntryDist>(table, low);
80   uchar entry = GetEntry(field);
81   bool is_start = IsStart(field);
82   return (entry == value) || (entry < value && is_start);
83 }
84 #endif  // !V8_INTL_SUPPORT
85 
86 template <int kW>
87 struct MultiCharacterSpecialCase {
88   static const uchar kEndOfEncoding = kSentinel;
89   uchar chars[kW];
90 };
91 
92 #ifndef V8_INTL_SUPPORT
93 // Look up the mapping for the given character in the specified table,
94 // which is of the specified length and uses the specified special case
95 // mapping for multi-char mappings.  The next parameter is the character
96 // following the one to map.  The result will be written in to the result
97 // buffer and the number of characters written will be returned.  Finally,
98 // if the allow_caching_ptr is non-null then false will be stored in
99 // it if the result contains multiple characters or depends on the
100 // context.
101 // If ranges are linear, a match between a start and end point is
102 // offset by the distance between the match and the start. Otherwise
103 // the result is the same as for the start point on the entire range.
104 template <bool ranges_are_linear, int kW>
LookupMapping(const int32_t * table,uint16_t size,const MultiCharacterSpecialCase<kW> * multi_chars,uchar chr,uchar next,uchar * result,bool * allow_caching_ptr)105 static int LookupMapping(const int32_t* table, uint16_t size,
106                          const MultiCharacterSpecialCase<kW>* multi_chars,
107                          uchar chr, uchar next, uchar* result,
108                          bool* allow_caching_ptr) {
109   static const int kEntryDist = 2;
110   uint16_t key = chr & (kChunkBits - 1);
111   uint16_t chunk_start = chr - key;
112   unsigned int low = 0;
113   unsigned int high = size - 1;
114   while (high != low) {
115     unsigned int mid = low + ((high - low) >> 1);
116     uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
117     // If we've found an entry less than or equal to this one, and the next one
118     // is not also less than this one, we've arrived.
119     if ((current_value <= key) &&
120         (mid + 1 == size ||
121          GetEntry(TableGet<kEntryDist>(table, mid + 1)) > key)) {
122       low = mid;
123       break;
124     } else if (current_value < key) {
125       low = mid + 1;
126     } else if (current_value > key) {
127       // If we've just checked the bottom-most value and it's not
128       // the one we're looking for, we're done.
129       if (mid == 0) break;
130       high = mid - 1;
131     }
132   }
133   int32_t field = TableGet<kEntryDist>(table, low);
134   uchar entry = GetEntry(field);
135   bool is_start = IsStart(field);
136   bool found = (entry == key) || (entry < key && is_start);
137   if (found) {
138     int32_t value = table[2 * low + 1];
139     if (value == 0) {
140       // 0 means not present
141       return 0;
142     } else if ((value & 3) == 0) {
143       // Low bits 0 means a constant offset from the given character.
144       if (ranges_are_linear) {
145         result[0] = chr + (value >> 2);
146       } else {
147         result[0] = entry + chunk_start + (value >> 2);
148       }
149       return 1;
150     } else if ((value & 3) == 1) {
151       // Low bits 1 means a special case mapping
152       if (allow_caching_ptr) *allow_caching_ptr = false;
153       const MultiCharacterSpecialCase<kW>& mapping = multi_chars[value >> 2];
154       int length = 0;
155       for (length = 0; length < kW; length++) {
156         uchar mapped = mapping.chars[length];
157         if (mapped == MultiCharacterSpecialCase<kW>::kEndOfEncoding) break;
158         if (ranges_are_linear) {
159           result[length] = mapped + (key - entry);
160         } else {
161           result[length] = mapped;
162         }
163       }
164       return length;
165     } else {
166       // Low bits 2 means a really really special case
167       if (allow_caching_ptr) *allow_caching_ptr = false;
168       // The cases of this switch are defined in unicode.py in the
169       // really_special_cases mapping.
170       switch (value >> 2) {
171         case 1:
172           // Really special case 1: upper case sigma.  This letter
173           // converts to two different lower case sigmas depending on
174           // whether or not it occurs at the end of a word.
175           if (next != 0 && Letter::Is(next)) {
176             result[0] = 0x03C3;
177           } else {
178             result[0] = 0x03C2;
179           }
180           return 1;
181         default:
182           return 0;
183       }
184       return -1;
185     }
186   } else {
187     return 0;
188   }
189 }
190 #endif  // !V8_INTL_SUPPORT
191 
192 // This method decodes an UTF-8 value according to RFC 3629 and
193 // https://encoding.spec.whatwg.org/#utf-8-decoder .
CalculateValue(const byte * str,size_t max_length,size_t * cursor)194 uchar Utf8::CalculateValue(const byte* str, size_t max_length, size_t* cursor) {
195   DCHECK_GT(max_length, 0);
196   DCHECK_GT(str[0], kMaxOneByteChar);
197 
198   State state = State::kAccept;
199   Utf8IncrementalBuffer buffer = 0;
200   uchar t;
201 
202   const byte* start = str;
203   const byte* end = str + max_length;
204 
205   do {
206     t = ValueOfIncremental(&str, &state, &buffer);
207   } while (str < end && t == kIncomplete);
208 
209   *cursor += str - start;
210   return (state == State::kAccept) ? t : kBadChar;
211 }
212 
213 // Finishes the incremental decoding, ensuring that if an unfinished sequence
214 // is left that it is replaced by a replacement char.
ValueOfIncrementalFinish(State * state)215 uchar Utf8::ValueOfIncrementalFinish(State* state) {
216   if (*state == State::kAccept) {
217     return kBufferEmpty;
218   } else {
219     DCHECK_GT(*state, State::kAccept);
220     *state = State::kAccept;
221     return kBadChar;
222   }
223 }
224 
ValidateEncoding(const byte * bytes,size_t length)225 bool Utf8::ValidateEncoding(const byte* bytes, size_t length) {
226   State state = State::kAccept;
227   Utf8IncrementalBuffer throw_away = 0;
228   for (size_t i = 0; i < length && state != State::kReject; i++) {
229     Utf8DfaDecoder::Decode(bytes[i], &state, &throw_away);
230   }
231   return state == State::kAccept;
232 }
233 
234 // Uppercase:            point.category == 'Lu'
235 // TODO(jshin): Check if it's ok to exclude Other_Uppercase characters.
236 #ifdef V8_INTL_SUPPORT
Is(uchar c)237 bool Uppercase::Is(uchar c) { return static_cast<bool>(u_isupper(c)); }
238 #else
239 static const uint16_t kUppercaseTable0Size = 455;
240 static const int32_t kUppercaseTable0[455] = {
241     1073741889, 90,         1073742016, 214,        1073742040, 222,
242     256,        258,        260,        262,        264,        266,
243     268,        270,        272,        274,        276,        278,
244     280,        282,        284,        286,        288,        290,
245     292,        294,        296,        298,        300,        302,
246     304,        306,        308,        310,        313,        315,
247     317,        319,        321,        323,        325,        327,
248     330,        332,        334,        336,        338,        340,
249     342,        344,        346,        348,        350,        352,
250     354,        356,        358,        360,        362,        364,
251     366,        368,        370,        372,        374,        1073742200,
252     377,        379,        381,        1073742209, 386,        388,
253     1073742214, 391,        1073742217, 395,        1073742222, 401,
254     1073742227, 404,        1073742230, 408,        1073742236, 413,
255     1073742239, 416,        418,        420,        1073742246, 423,
256     425,        428,        1073742254, 431,        1073742257, 435,
257     437,        1073742263, 440,        444,        452,        455,
258     458,        461,        463,        465,        467,        469,
259     471,        473,        475,        478,        480,        482,
260     484,        486,        488,        490,        492,        494,
261     497,        500,        1073742326, 504,        506,        508,
262     510,        512,        514,        516,        518,        520,
263     522,        524,        526,        528,        530,        532,
264     534,        536,        538,        540,        542,        544,
265     546,        548,        550,        552,        554,        556,
266     558,        560,        562,        1073742394, 571,        1073742397,
267     574,        577,        1073742403, 582,        584,        586,
268     588,        590,        880,        882,        886,        895,
269     902,        1073742728, 906,        908,        1073742734, 911,
270     1073742737, 929,        1073742755, 939,        975,        1073742802,
271     980,        984,        986,        988,        990,        992,
272     994,        996,        998,        1000,       1002,       1004,
273     1006,       1012,       1015,       1073742841, 1018,       1073742845,
274     1071,       1120,       1122,       1124,       1126,       1128,
275     1130,       1132,       1134,       1136,       1138,       1140,
276     1142,       1144,       1146,       1148,       1150,       1152,
277     1162,       1164,       1166,       1168,       1170,       1172,
278     1174,       1176,       1178,       1180,       1182,       1184,
279     1186,       1188,       1190,       1192,       1194,       1196,
280     1198,       1200,       1202,       1204,       1206,       1208,
281     1210,       1212,       1214,       1073743040, 1217,       1219,
282     1221,       1223,       1225,       1227,       1229,       1232,
283     1234,       1236,       1238,       1240,       1242,       1244,
284     1246,       1248,       1250,       1252,       1254,       1256,
285     1258,       1260,       1262,       1264,       1266,       1268,
286     1270,       1272,       1274,       1276,       1278,       1280,
287     1282,       1284,       1286,       1288,       1290,       1292,
288     1294,       1296,       1298,       1300,       1302,       1304,
289     1306,       1308,       1310,       1312,       1314,       1316,
290     1318,       1320,       1322,       1324,       1326,       1073743153,
291     1366,       1073746080, 4293,       4295,       4301,       7680,
292     7682,       7684,       7686,       7688,       7690,       7692,
293     7694,       7696,       7698,       7700,       7702,       7704,
294     7706,       7708,       7710,       7712,       7714,       7716,
295     7718,       7720,       7722,       7724,       7726,       7728,
296     7730,       7732,       7734,       7736,       7738,       7740,
297     7742,       7744,       7746,       7748,       7750,       7752,
298     7754,       7756,       7758,       7760,       7762,       7764,
299     7766,       7768,       7770,       7772,       7774,       7776,
300     7778,       7780,       7782,       7784,       7786,       7788,
301     7790,       7792,       7794,       7796,       7798,       7800,
302     7802,       7804,       7806,       7808,       7810,       7812,
303     7814,       7816,       7818,       7820,       7822,       7824,
304     7826,       7828,       7838,       7840,       7842,       7844,
305     7846,       7848,       7850,       7852,       7854,       7856,
306     7858,       7860,       7862,       7864,       7866,       7868,
307     7870,       7872,       7874,       7876,       7878,       7880,
308     7882,       7884,       7886,       7888,       7890,       7892,
309     7894,       7896,       7898,       7900,       7902,       7904,
310     7906,       7908,       7910,       7912,       7914,       7916,
311     7918,       7920,       7922,       7924,       7926,       7928,
312     7930,       7932,       7934,       1073749768, 7951,       1073749784,
313     7965,       1073749800, 7983,       1073749816, 7999,       1073749832,
314     8013,       8025,       8027,       8029,       8031,       1073749864,
315     8047,       1073749944, 8123,       1073749960, 8139,       1073749976,
316     8155,       1073749992, 8172,       1073750008, 8187};
317 static const uint16_t kUppercaseTable1Size = 86;
318 static const int32_t kUppercaseTable1[86] = {
319     258,        263,  1073742091, 269,  1073742096, 274,        277,
320     1073742105, 285,  292,        294,  296,        1073742122, 301,
321     1073742128, 307,  1073742142, 319,  325,        387,        1073744896,
322     3118,       3168, 1073744994, 3172, 3175,       3177,       3179,
323     1073745005, 3184, 3186,       3189, 1073745022, 3200,       3202,
324     3204,       3206, 3208,       3210, 3212,       3214,       3216,
325     3218,       3220, 3222,       3224, 3226,       3228,       3230,
326     3232,       3234, 3236,       3238, 3240,       3242,       3244,
327     3246,       3248, 3250,       3252, 3254,       3256,       3258,
328     3260,       3262, 3264,       3266, 3268,       3270,       3272,
329     3274,       3276, 3278,       3280, 3282,       3284,       3286,
330     3288,       3290, 3292,       3294, 3296,       3298,       3307,
331     3309,       3314};
332 static const uint16_t kUppercaseTable5Size = 101;
333 static const int32_t kUppercaseTable5[101] = {
334     1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614,       1616, 1618,
335     1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634,       1636, 1638,
336     1640, 1642, 1644, 1664, 1666, 1668, 1670, 1672,       1674, 1676,
337     1678, 1680, 1682, 1684, 1686, 1688, 1690, 1826,       1828, 1830,
338     1832, 1834, 1836, 1838, 1842, 1844, 1846, 1848,       1850, 1852,
339     1854, 1856, 1858, 1860, 1862, 1864, 1866, 1868,       1870, 1872,
340     1874, 1876, 1878, 1880, 1882, 1884, 1886, 1888,       1890, 1892,
341     1894, 1896, 1898, 1900, 1902, 1913, 1915, 1073743741, 1918, 1920,
342     1922, 1924, 1926, 1931, 1933, 1936, 1938, 1942,       1944, 1946,
343     1948, 1950, 1952, 1954, 1956, 1958, 1960, 1073743786, 1965, 1073743792,
344     1969};
345 static const uint16_t kUppercaseTable7Size = 2;
346 static const int32_t kUppercaseTable7[2] = {1073749793, 7994};
Is(uchar c)347 bool Uppercase::Is(uchar c) {
348   int chunk_index = c >> 13;
349   switch (chunk_index) {
350     case 0:
351       return LookupPredicate(kUppercaseTable0, kUppercaseTable0Size, c);
352     case 1:
353       return LookupPredicate(kUppercaseTable1, kUppercaseTable1Size, c);
354     case 5:
355       return LookupPredicate(kUppercaseTable5, kUppercaseTable5Size, c);
356     case 7:
357       return LookupPredicate(kUppercaseTable7, kUppercaseTable7Size, c);
358     default:
359       return false;
360   }
361 }
362 #endif  // V8_INTL_SUPPORT
363 
364 // Letter:               point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl']
365 #ifdef V8_INTL_SUPPORT
Is(uchar c)366 bool Letter::Is(uchar c) { return static_cast<bool>(u_isalpha(c)); }
367 #else
368 static const uint16_t kLetterTable0Size = 431;
369 static const int32_t kLetterTable0[431] = {
370     1073741889, 90,         1073741921, 122,        170,        181,
371     186,        1073742016, 214,        1073742040, 246,        1073742072,
372     705,        1073742534, 721,        1073742560, 740,        748,
373     750,        1073742704, 884,        1073742710, 887,        1073742714,
374     893,        895,        902,        1073742728, 906,        908,
375     1073742734, 929,        1073742755, 1013,       1073742839, 1153,
376     1073742986, 1327,       1073743153, 1366,       1369,       1073743201,
377     1415,       1073743312, 1514,       1073743344, 1522,       1073743392,
378     1610,       1073743470, 1647,       1073743473, 1747,       1749,
379     1073743589, 1766,       1073743598, 1775,       1073743610, 1788,
380     1791,       1808,       1073743634, 1839,       1073743693, 1957,
381     1969,       1073743818, 2026,       1073743860, 2037,       2042,
382     1073743872, 2069,       2074,       2084,       2088,       1073743936,
383     2136,       1073744032, 2226,       1073744132, 2361,       2365,
384     2384,       1073744216, 2401,       1073744241, 2432,       1073744261,
385     2444,       1073744271, 2448,       1073744275, 2472,       1073744298,
386     2480,       2482,       1073744310, 2489,       2493,       2510,
387     1073744348, 2525,       1073744351, 2529,       1073744368, 2545,
388     1073744389, 2570,       1073744399, 2576,       1073744403, 2600,
389     1073744426, 2608,       1073744434, 2611,       1073744437, 2614,
390     1073744440, 2617,       1073744473, 2652,       2654,       1073744498,
391     2676,       1073744517, 2701,       1073744527, 2705,       1073744531,
392     2728,       1073744554, 2736,       1073744562, 2739,       1073744565,
393     2745,       2749,       2768,       1073744608, 2785,       1073744645,
394     2828,       1073744655, 2832,       1073744659, 2856,       1073744682,
395     2864,       1073744690, 2867,       1073744693, 2873,       2877,
396     1073744732, 2909,       1073744735, 2913,       2929,       2947,
397     1073744773, 2954,       1073744782, 2960,       1073744786, 2965,
398     1073744793, 2970,       2972,       1073744798, 2975,       1073744803,
399     2980,       1073744808, 2986,       1073744814, 3001,       3024,
400     1073744901, 3084,       1073744910, 3088,       1073744914, 3112,
401     1073744938, 3129,       3133,       1073744984, 3161,       1073744992,
402     3169,       1073745029, 3212,       1073745038, 3216,       1073745042,
403     3240,       1073745066, 3251,       1073745077, 3257,       3261,
404     3294,       1073745120, 3297,       1073745137, 3314,       1073745157,
405     3340,       1073745166, 3344,       1073745170, 3386,       3389,
406     3406,       1073745248, 3425,       1073745274, 3455,       1073745285,
407     3478,       1073745306, 3505,       1073745331, 3515,       3517,
408     1073745344, 3526,       1073745409, 3632,       1073745458, 3635,
409     1073745472, 3654,       1073745537, 3714,       3716,       1073745543,
410     3720,       3722,       3725,       1073745556, 3735,       1073745561,
411     3743,       1073745569, 3747,       3749,       3751,       1073745578,
412     3755,       1073745581, 3760,       1073745586, 3763,       3773,
413     1073745600, 3780,       3782,       1073745628, 3807,       3840,
414     1073745728, 3911,       1073745737, 3948,       1073745800, 3980,
415     1073745920, 4138,       4159,       1073746000, 4181,       1073746010,
416     4189,       4193,       1073746021, 4198,       1073746030, 4208,
417     1073746037, 4225,       4238,       1073746080, 4293,       4295,
418     4301,       1073746128, 4346,       1073746172, 4680,       1073746506,
419     4685,       1073746512, 4694,       4696,       1073746522, 4701,
420     1073746528, 4744,       1073746570, 4749,       1073746576, 4784,
421     1073746610, 4789,       1073746616, 4798,       4800,       1073746626,
422     4805,       1073746632, 4822,       1073746648, 4880,       1073746706,
423     4885,       1073746712, 4954,       1073746816, 5007,       1073746848,
424     5108,       1073746945, 5740,       1073747567, 5759,       1073747585,
425     5786,       1073747616, 5866,       1073747694, 5880,       1073747712,
426     5900,       1073747726, 5905,       1073747744, 5937,       1073747776,
427     5969,       1073747808, 5996,       1073747822, 6000,       1073747840,
428     6067,       6103,       6108,       1073748000, 6263,       1073748096,
429     6312,       6314,       1073748144, 6389,       1073748224, 6430,
430     1073748304, 6509,       1073748336, 6516,       1073748352, 6571,
431     1073748417, 6599,       1073748480, 6678,       1073748512, 6740,
432     6823,       1073748741, 6963,       1073748805, 6987,       1073748867,
433     7072,       1073748910, 7087,       1073748922, 7141,       1073748992,
434     7203,       1073749069, 7247,       1073749082, 7293,       1073749225,
435     7404,       1073749230, 7409,       1073749237, 7414,       1073749248,
436     7615,       1073749504, 7957,       1073749784, 7965,       1073749792,
437     8005,       1073749832, 8013,       1073749840, 8023,       8025,
438     8027,       8029,       1073749855, 8061,       1073749888, 8116,
439     1073749942, 8124,       8126,       1073749954, 8132,       1073749958,
440     8140,       1073749968, 8147,       1073749974, 8155,       1073749984,
441     8172,       1073750002, 8180,       1073750006, 8188};
442 static const uint16_t kLetterTable1Size = 87;
443 static const int32_t kLetterTable1[87] = {
444     113,        127,        1073741968, 156,        258,        263,
445     1073742090, 275,        277,        1073742105, 285,        292,
446     294,        296,        1073742122, 301,        1073742127, 313,
447     1073742140, 319,        1073742149, 329,        334,        1073742176,
448     392,        1073744896, 3118,       1073744944, 3166,       1073744992,
449     3300,       1073745131, 3310,       1073745138, 3315,       1073745152,
450     3365,       3367,       3373,       1073745200, 3431,       3439,
451     1073745280, 3478,       1073745312, 3494,       1073745320, 3502,
452     1073745328, 3510,       1073745336, 3518,       1073745344, 3526,
453     1073745352, 3534,       1073745360, 3542,       1073745368, 3550,
454     3631,       1073745925, 4103,       1073745953, 4137,       1073745969,
455     4149,       1073745976, 4156,       1073745985, 4246,       1073746077,
456     4255,       1073746081, 4346,       1073746172, 4351,       1073746181,
457     4397,       1073746225, 4494,       1073746336, 4538,       1073746416,
458     4607,       1073746944, 8191};
459 static const uint16_t kLetterTable2Size = 4;
460 static const int32_t kLetterTable2[4] = {1073741824, 3509, 1073745408, 8191};
461 static const uint16_t kLetterTable3Size = 2;
462 static const int32_t kLetterTable3[2] = {1073741824, 8191};
463 static const uint16_t kLetterTable4Size = 2;
464 static const int32_t kLetterTable4[2] = {1073741824, 8140};
465 static const uint16_t kLetterTable5Size = 100;
466 static const int32_t kLetterTable5[100] = {
467     1073741824, 1164,       1073743056, 1277,       1073743104, 1548,
468     1073743376, 1567,       1073743402, 1579,       1073743424, 1646,
469     1073743487, 1693,       1073743520, 1775,       1073743639, 1823,
470     1073743650, 1928,       1073743755, 1934,       1073743760, 1965,
471     1073743792, 1969,       1073743863, 2049,       1073743875, 2053,
472     1073743879, 2058,       1073743884, 2082,       1073743936, 2163,
473     1073744002, 2227,       1073744114, 2295,       2299,       1073744138,
474     2341,       1073744176, 2374,       1073744224, 2428,       1073744260,
475     2482,       2511,       1073744352, 2532,       1073744358, 2543,
476     1073744378, 2558,       1073744384, 2600,       1073744448, 2626,
477     1073744452, 2635,       1073744480, 2678,       2682,       1073744510,
478     2735,       2737,       1073744565, 2742,       1073744569, 2749,
479     2752,       2754,       1073744603, 2781,       1073744608, 2794,
480     1073744626, 2804,       1073744641, 2822,       1073744649, 2830,
481     1073744657, 2838,       1073744672, 2854,       1073744680, 2862,
482     1073744688, 2906,       1073744732, 2911,       1073744740, 2917,
483     1073744832, 3042,       1073744896, 8191};
484 static const uint16_t kLetterTable6Size = 6;
485 static const int32_t kLetterTable6[6] = {1073741824, 6051,       1073747888,
486                                          6086,       1073747915, 6139};
487 static const uint16_t kLetterTable7Size = 48;
488 static const int32_t kLetterTable7[48] = {
489     1073748224, 6765,       1073748592, 6873,       1073748736, 6918,
490     1073748755, 6935,       6941,       1073748767, 6952,       1073748778,
491     6966,       1073748792, 6972,       6974,       1073748800, 6977,
492     1073748803, 6980,       1073748806, 7089,       1073748947, 7485,
493     1073749328, 7567,       1073749394, 7623,       1073749488, 7675,
494     1073749616, 7796,       1073749622, 7932,       1073749793, 7994,
495     1073749825, 8026,       1073749862, 8126,       1073749954, 8135,
496     1073749962, 8143,       1073749970, 8151,       1073749978, 8156};
Is(uchar c)497 bool Letter::Is(uchar c) {
498   int chunk_index = c >> 13;
499   switch (chunk_index) {
500     case 0:
501       return LookupPredicate(kLetterTable0, kLetterTable0Size, c);
502     case 1:
503       return LookupPredicate(kLetterTable1, kLetterTable1Size, c);
504     case 2:
505       return LookupPredicate(kLetterTable2, kLetterTable2Size, c);
506     case 3:
507       return LookupPredicate(kLetterTable3, kLetterTable3Size, c);
508     case 4:
509       return LookupPredicate(kLetterTable4, kLetterTable4Size, c);
510     case 5:
511       return LookupPredicate(kLetterTable5, kLetterTable5Size, c);
512     case 6:
513       return LookupPredicate(kLetterTable6, kLetterTable6Size, c);
514     case 7:
515       return LookupPredicate(kLetterTable7, kLetterTable7Size, c);
516     default:
517       return false;
518   }
519 }
520 #endif
521 
522 #ifndef V8_INTL_SUPPORT
523 // ID_Start:             ((point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo',
524 // 'Nl'] or 'Other_ID_Start' in point.properties) and ('Pattern_Syntax' not in
525 // point.properties) and ('Pattern_White_Space' not in point.properties)) or
526 // ('JS_ID_Start' in point.properties)
527 
528 static const uint16_t kID_StartTable0Size = 434;
529 static const int32_t kID_StartTable0[434] = {
530     36,         1073741889, 90,         92,         95,         1073741921,
531     122,        170,        181,        186,        1073742016, 214,
532     1073742040, 246,        1073742072, 705,        1073742534, 721,
533     1073742560, 740,        748,        750,        1073742704, 884,
534     1073742710, 887,        1073742714, 893,        895,        902,
535     1073742728, 906,        908,        1073742734, 929,        1073742755,
536     1013,       1073742839, 1153,       1073742986, 1327,       1073743153,
537     1366,       1369,       1073743201, 1415,       1073743312, 1514,
538     1073743344, 1522,       1073743392, 1610,       1073743470, 1647,
539     1073743473, 1747,       1749,       1073743589, 1766,       1073743598,
540     1775,       1073743610, 1788,       1791,       1808,       1073743634,
541     1839,       1073743693, 1957,       1969,       1073743818, 2026,
542     1073743860, 2037,       2042,       1073743872, 2069,       2074,
543     2084,       2088,       1073743936, 2136,       1073744032, 2226,
544     1073744132, 2361,       2365,       2384,       1073744216, 2401,
545     1073744241, 2432,       1073744261, 2444,       1073744271, 2448,
546     1073744275, 2472,       1073744298, 2480,       2482,       1073744310,
547     2489,       2493,       2510,       1073744348, 2525,       1073744351,
548     2529,       1073744368, 2545,       1073744389, 2570,       1073744399,
549     2576,       1073744403, 2600,       1073744426, 2608,       1073744434,
550     2611,       1073744437, 2614,       1073744440, 2617,       1073744473,
551     2652,       2654,       1073744498, 2676,       1073744517, 2701,
552     1073744527, 2705,       1073744531, 2728,       1073744554, 2736,
553     1073744562, 2739,       1073744565, 2745,       2749,       2768,
554     1073744608, 2785,       1073744645, 2828,       1073744655, 2832,
555     1073744659, 2856,       1073744682, 2864,       1073744690, 2867,
556     1073744693, 2873,       2877,       1073744732, 2909,       1073744735,
557     2913,       2929,       2947,       1073744773, 2954,       1073744782,
558     2960,       1073744786, 2965,       1073744793, 2970,       2972,
559     1073744798, 2975,       1073744803, 2980,       1073744808, 2986,
560     1073744814, 3001,       3024,       1073744901, 3084,       1073744910,
561     3088,       1073744914, 3112,       1073744938, 3129,       3133,
562     1073744984, 3161,       1073744992, 3169,       1073745029, 3212,
563     1073745038, 3216,       1073745042, 3240,       1073745066, 3251,
564     1073745077, 3257,       3261,       3294,       1073745120, 3297,
565     1073745137, 3314,       1073745157, 3340,       1073745166, 3344,
566     1073745170, 3386,       3389,       3406,       1073745248, 3425,
567     1073745274, 3455,       1073745285, 3478,       1073745306, 3505,
568     1073745331, 3515,       3517,       1073745344, 3526,       1073745409,
569     3632,       1073745458, 3635,       1073745472, 3654,       1073745537,
570     3714,       3716,       1073745543, 3720,       3722,       3725,
571     1073745556, 3735,       1073745561, 3743,       1073745569, 3747,
572     3749,       3751,       1073745578, 3755,       1073745581, 3760,
573     1073745586, 3763,       3773,       1073745600, 3780,       3782,
574     1073745628, 3807,       3840,       1073745728, 3911,       1073745737,
575     3948,       1073745800, 3980,       1073745920, 4138,       4159,
576     1073746000, 4181,       1073746010, 4189,       4193,       1073746021,
577     4198,       1073746030, 4208,       1073746037, 4225,       4238,
578     1073746080, 4293,       4295,       4301,       1073746128, 4346,
579     1073746172, 4680,       1073746506, 4685,       1073746512, 4694,
580     4696,       1073746522, 4701,       1073746528, 4744,       1073746570,
581     4749,       1073746576, 4784,       1073746610, 4789,       1073746616,
582     4798,       4800,       1073746626, 4805,       1073746632, 4822,
583     1073746648, 4880,       1073746706, 4885,       1073746712, 4954,
584     1073746816, 5007,       1073746848, 5108,       1073746945, 5740,
585     1073747567, 5759,       1073747585, 5786,       1073747616, 5866,
586     1073747694, 5880,       1073747712, 5900,       1073747726, 5905,
587     1073747744, 5937,       1073747776, 5969,       1073747808, 5996,
588     1073747822, 6000,       1073747840, 6067,       6103,       6108,
589     1073748000, 6263,       1073748096, 6312,       6314,       1073748144,
590     6389,       1073748224, 6430,       1073748304, 6509,       1073748336,
591     6516,       1073748352, 6571,       1073748417, 6599,       1073748480,
592     6678,       1073748512, 6740,       6823,       1073748741, 6963,
593     1073748805, 6987,       1073748867, 7072,       1073748910, 7087,
594     1073748922, 7141,       1073748992, 7203,       1073749069, 7247,
595     1073749082, 7293,       1073749225, 7404,       1073749230, 7409,
596     1073749237, 7414,       1073749248, 7615,       1073749504, 7957,
597     1073749784, 7965,       1073749792, 8005,       1073749832, 8013,
598     1073749840, 8023,       8025,       8027,       8029,       1073749855,
599     8061,       1073749888, 8116,       1073749942, 8124,       8126,
600     1073749954, 8132,       1073749958, 8140,       1073749968, 8147,
601     1073749974, 8155,       1073749984, 8172,       1073750002, 8180,
602     1073750006, 8188};
603 static const uint16_t kID_StartTable1Size = 84;
604 static const int32_t kID_StartTable1[84] = {
605     113,        127,        1073741968, 156,        258,        263,
606     1073742090, 275,        277,        1073742104, 285,        292,
607     294,        296,        1073742122, 313,        1073742140, 319,
608     1073742149, 329,        334,        1073742176, 392,        1073744896,
609     3118,       1073744944, 3166,       1073744992, 3300,       1073745131,
610     3310,       1073745138, 3315,       1073745152, 3365,       3367,
611     3373,       1073745200, 3431,       3439,       1073745280, 3478,
612     1073745312, 3494,       1073745320, 3502,       1073745328, 3510,
613     1073745336, 3518,       1073745344, 3526,       1073745352, 3534,
614     1073745360, 3542,       1073745368, 3550,       1073745925, 4103,
615     1073745953, 4137,       1073745969, 4149,       1073745976, 4156,
616     1073745985, 4246,       1073746075, 4255,       1073746081, 4346,
617     1073746172, 4351,       1073746181, 4397,       1073746225, 4494,
618     1073746336, 4538,       1073746416, 4607,       1073746944, 8191};
619 static const uint16_t kID_StartTable2Size = 4;
620 static const int32_t kID_StartTable2[4] = {1073741824, 3509, 1073745408, 8191};
621 static const uint16_t kID_StartTable3Size = 2;
622 static const int32_t kID_StartTable3[2] = {1073741824, 8191};
623 static const uint16_t kID_StartTable4Size = 2;
624 static const int32_t kID_StartTable4[2] = {1073741824, 8140};
625 static const uint16_t kID_StartTable5Size = 100;
626 static const int32_t kID_StartTable5[100] = {
627     1073741824, 1164,       1073743056, 1277,       1073743104, 1548,
628     1073743376, 1567,       1073743402, 1579,       1073743424, 1646,
629     1073743487, 1693,       1073743520, 1775,       1073743639, 1823,
630     1073743650, 1928,       1073743755, 1934,       1073743760, 1965,
631     1073743792, 1969,       1073743863, 2049,       1073743875, 2053,
632     1073743879, 2058,       1073743884, 2082,       1073743936, 2163,
633     1073744002, 2227,       1073744114, 2295,       2299,       1073744138,
634     2341,       1073744176, 2374,       1073744224, 2428,       1073744260,
635     2482,       2511,       1073744352, 2532,       1073744358, 2543,
636     1073744378, 2558,       1073744384, 2600,       1073744448, 2626,
637     1073744452, 2635,       1073744480, 2678,       2682,       1073744510,
638     2735,       2737,       1073744565, 2742,       1073744569, 2749,
639     2752,       2754,       1073744603, 2781,       1073744608, 2794,
640     1073744626, 2804,       1073744641, 2822,       1073744649, 2830,
641     1073744657, 2838,       1073744672, 2854,       1073744680, 2862,
642     1073744688, 2906,       1073744732, 2911,       1073744740, 2917,
643     1073744832, 3042,       1073744896, 8191};
644 static const uint16_t kID_StartTable6Size = 6;
645 static const int32_t kID_StartTable6[6] = {1073741824, 6051,       1073747888,
646                                            6086,       1073747915, 6139};
647 static const uint16_t kID_StartTable7Size = 48;
648 static const int32_t kID_StartTable7[48] = {
649     1073748224, 6765,       1073748592, 6873,       1073748736, 6918,
650     1073748755, 6935,       6941,       1073748767, 6952,       1073748778,
651     6966,       1073748792, 6972,       6974,       1073748800, 6977,
652     1073748803, 6980,       1073748806, 7089,       1073748947, 7485,
653     1073749328, 7567,       1073749394, 7623,       1073749488, 7675,
654     1073749616, 7796,       1073749622, 7932,       1073749793, 7994,
655     1073749825, 8026,       1073749862, 8126,       1073749954, 8135,
656     1073749962, 8143,       1073749970, 8151,       1073749978, 8156};
Is(uchar c)657 bool ID_Start::Is(uchar c) {
658   int chunk_index = c >> 13;
659   switch (chunk_index) {
660     case 0:
661       return LookupPredicate(kID_StartTable0, kID_StartTable0Size, c);
662     case 1:
663       return LookupPredicate(kID_StartTable1, kID_StartTable1Size, c);
664     case 2:
665       return LookupPredicate(kID_StartTable2, kID_StartTable2Size, c);
666     case 3:
667       return LookupPredicate(kID_StartTable3, kID_StartTable3Size, c);
668     case 4:
669       return LookupPredicate(kID_StartTable4, kID_StartTable4Size, c);
670     case 5:
671       return LookupPredicate(kID_StartTable5, kID_StartTable5Size, c);
672     case 6:
673       return LookupPredicate(kID_StartTable6, kID_StartTable6Size, c);
674     case 7:
675       return LookupPredicate(kID_StartTable7, kID_StartTable7Size, c);
676     default:
677       return false;
678   }
679 }
680 
681 // ID_Continue:          point.category in ['Nd', 'Mn', 'Mc', 'Pc'] or
682 // 'Other_ID_Continue' in point.properties or 'JS_ID_Continue' in
683 // point.properties
684 
685 static const uint16_t kID_ContinueTable0Size = 315;
686 static const int32_t kID_ContinueTable0[315] = {
687     1073741872, 57,         95,         183,        1073742592, 879,
688     903,        1073742979, 1159,       1073743249, 1469,       1471,
689     1073743297, 1474,       1073743300, 1477,       1479,       1073743376,
690     1562,       1073743435, 1641,       1648,       1073743574, 1756,
691     1073743583, 1764,       1073743591, 1768,       1073743594, 1773,
692     1073743600, 1785,       1809,       1073743664, 1866,       1073743782,
693     1968,       1073743808, 1993,       1073743851, 2035,       1073743894,
694     2073,       1073743899, 2083,       1073743909, 2087,       1073743913,
695     2093,       1073743961, 2139,       1073744100, 2307,       1073744186,
696     2364,       1073744190, 2383,       1073744209, 2391,       1073744226,
697     2403,       1073744230, 2415,       1073744257, 2435,       2492,
698     1073744318, 2500,       1073744327, 2504,       1073744331, 2509,
699     2519,       1073744354, 2531,       1073744358, 2543,       1073744385,
700     2563,       2620,       1073744446, 2626,       1073744455, 2632,
701     1073744459, 2637,       2641,       1073744486, 2673,       2677,
702     1073744513, 2691,       2748,       1073744574, 2757,       1073744583,
703     2761,       1073744587, 2765,       1073744610, 2787,       1073744614,
704     2799,       1073744641, 2819,       2876,       1073744702, 2884,
705     1073744711, 2888,       1073744715, 2893,       1073744726, 2903,
706     1073744738, 2915,       1073744742, 2927,       2946,       1073744830,
707     3010,       1073744838, 3016,       1073744842, 3021,       3031,
708     1073744870, 3055,       1073744896, 3075,       1073744958, 3140,
709     1073744966, 3144,       1073744970, 3149,       1073744981, 3158,
710     1073744994, 3171,       1073744998, 3183,       1073745025, 3203,
711     3260,       1073745086, 3268,       1073745094, 3272,       1073745098,
712     3277,       1073745109, 3286,       1073745122, 3299,       1073745126,
713     3311,       1073745153, 3331,       1073745214, 3396,       1073745222,
714     3400,       1073745226, 3405,       3415,       1073745250, 3427,
715     1073745254, 3439,       1073745282, 3459,       3530,       1073745359,
716     3540,       3542,       1073745368, 3551,       1073745382, 3567,
717     1073745394, 3571,       3633,       1073745460, 3642,       1073745479,
718     3662,       1073745488, 3673,       3761,       1073745588, 3769,
719     1073745595, 3772,       1073745608, 3789,       1073745616, 3801,
720     1073745688, 3865,       1073745696, 3881,       3893,       3895,
721     3897,       1073745726, 3903,       1073745777, 3972,       1073745798,
722     3975,       1073745805, 3991,       1073745817, 4028,       4038,
723     1073745963, 4158,       1073745984, 4169,       1073746006, 4185,
724     1073746014, 4192,       1073746018, 4196,       1073746023, 4205,
725     1073746033, 4212,       1073746050, 4237,       1073746063, 4253,
726     1073746781, 4959,       1073746793, 4977,       1073747730, 5908,
727     1073747762, 5940,       1073747794, 5971,       1073747826, 6003,
728     1073747892, 6099,       6109,       1073747936, 6121,       1073747979,
729     6157,       1073747984, 6169,       6313,       1073748256, 6443,
730     1073748272, 6459,       1073748294, 6479,       1073748400, 6592,
731     1073748424, 6601,       1073748432, 6618,       1073748503, 6683,
732     1073748565, 6750,       1073748576, 6780,       1073748607, 6793,
733     1073748624, 6809,       1073748656, 6845,       1073748736, 6916,
734     1073748788, 6980,       1073748816, 7001,       1073748843, 7027,
735     1073748864, 7042,       1073748897, 7085,       1073748912, 7097,
736     1073748966, 7155,       1073749028, 7223,       1073749056, 7241,
737     1073749072, 7257,       1073749200, 7378,       1073749204, 7400,
738     7405,       1073749234, 7412,       1073749240, 7417,       1073749440,
739     7669,       1073749500, 7679};
740 static const uint16_t kID_ContinueTable1Size = 19;
741 static const int32_t kID_ContinueTable1[19] = {
742     1073741836, 13,   1073741887, 64,         84,
743     1073742032, 220,  225,        1073742053, 240,
744     1073745135, 3313, 3455,       1073745376, 3583,
745     1073745962, 4143, 1073746073, 4250};
746 static const uint16_t kID_ContinueTable5Size = 63;
747 static const int32_t kID_ContinueTable5[63] = {
748     1073743392, 1577,       1647,       1073743476, 1661,       1695,
749     1073743600, 1777,       2050,       2054,       2059,       1073743907,
750     2087,       1073744000, 2177,       1073744052, 2244,       1073744080,
751     2265,       1073744096, 2289,       1073744128, 2313,       1073744166,
752     2349,       1073744199, 2387,       1073744256, 2435,       1073744307,
753     2496,       1073744336, 2521,       2533,       1073744368, 2553,
754     1073744425, 2614,       2627,       1073744460, 2637,       1073744464,
755     2649,       1073744507, 2685,       2736,       1073744562, 2740,
756     1073744567, 2744,       1073744574, 2751,       2753,       1073744619,
757     2799,       1073744629, 2806,       1073744867, 3050,       1073744876,
758     3053,       1073744880, 3065};
759 static const uint16_t kID_ContinueTable7Size = 12;
760 static const int32_t kID_ContinueTable7[12] = {
761     6942, 1073749504, 7695, 1073749536, 7725, 1073749555,
762     7732, 1073749581, 7759, 1073749776, 7961, 7999};
Is(uchar c)763 bool ID_Continue::Is(uchar c) {
764   int chunk_index = c >> 13;
765   switch (chunk_index) {
766     case 0:
767       return LookupPredicate(kID_ContinueTable0, kID_ContinueTable0Size, c);
768     case 1:
769       return LookupPredicate(kID_ContinueTable1, kID_ContinueTable1Size, c);
770     case 5:
771       return LookupPredicate(kID_ContinueTable5, kID_ContinueTable5Size, c);
772     case 7:
773       return LookupPredicate(kID_ContinueTable7, kID_ContinueTable7Size, c);
774     default:
775       return false;
776   }
777 }
778 
779 // WhiteSpace:           (point.category == 'Zs') or ('JS_White_Space' in
780 // point.properties)
781 
782 static const uint16_t kWhiteSpaceTable0Size = 6;
783 static const int32_t kWhiteSpaceTable0[6] = {9, 1073741835, 12, 32, 160, 5760};
784 static const uint16_t kWhiteSpaceTable1Size = 5;
785 static const int32_t kWhiteSpaceTable1[5] = {1073741824, 10, 47, 95, 4096};
786 static const uint16_t kWhiteSpaceTable7Size = 1;
787 static const int32_t kWhiteSpaceTable7[1] = {7935};
Is(uchar c)788 bool WhiteSpace::Is(uchar c) {
789   int chunk_index = c >> 13;
790   switch (chunk_index) {
791     case 0:
792       return LookupPredicate(kWhiteSpaceTable0, kWhiteSpaceTable0Size, c);
793     case 1:
794       return LookupPredicate(kWhiteSpaceTable1, kWhiteSpaceTable1Size, c);
795     case 7:
796       return LookupPredicate(kWhiteSpaceTable7, kWhiteSpaceTable7Size, c);
797     default:
798       return false;
799   }
800 }
801 #endif  // !V8_INTL_SUPPORT
802 
803 #ifndef V8_INTL_SUPPORT
804 static const MultiCharacterSpecialCase<2> kToLowercaseMultiStrings0[2] = {
805     {{105, 775}}, {{kSentinel}}};
806 static const uint16_t kToLowercaseTable0Size = 488;
807 static const int32_t kToLowercaseTable0[976] = {
808     1073741889, 128,   90,         128,   1073742016, 128,   214,        128,
809     1073742040, 128,   222,        128,   256,        4,     258,        4,
810     260,        4,     262,        4,     264,        4,     266,        4,
811     268,        4,     270,        4,     272,        4,     274,        4,
812     276,        4,     278,        4,     280,        4,     282,        4,
813     284,        4,     286,        4,     288,        4,     290,        4,
814     292,        4,     294,        4,     296,        4,     298,        4,
815     300,        4,     302,        4,     304,        1,     306,        4,
816     308,        4,     310,        4,     313,        4,     315,        4,
817     317,        4,     319,        4,     321,        4,     323,        4,
818     325,        4,     327,        4,     330,        4,     332,        4,
819     334,        4,     336,        4,     338,        4,     340,        4,
820     342,        4,     344,        4,     346,        4,     348,        4,
821     350,        4,     352,        4,     354,        4,     356,        4,
822     358,        4,     360,        4,     362,        4,     364,        4,
823     366,        4,     368,        4,     370,        4,     372,        4,
824     374,        4,     376,        -484,  377,        4,     379,        4,
825     381,        4,     385,        840,   386,        4,     388,        4,
826     390,        824,   391,        4,     1073742217, 820,   394,        820,
827     395,        4,     398,        316,   399,        808,   400,        812,
828     401,        4,     403,        820,   404,        828,   406,        844,
829     407,        836,   408,        4,     412,        844,   413,        852,
830     415,        856,   416,        4,     418,        4,     420,        4,
831     422,        872,   423,        4,     425,        872,   428,        4,
832     430,        872,   431,        4,     1073742257, 868,   434,        868,
833     435,        4,     437,        4,     439,        876,   440,        4,
834     444,        4,     452,        8,     453,        4,     455,        8,
835     456,        4,     458,        8,     459,        4,     461,        4,
836     463,        4,     465,        4,     467,        4,     469,        4,
837     471,        4,     473,        4,     475,        4,     478,        4,
838     480,        4,     482,        4,     484,        4,     486,        4,
839     488,        4,     490,        4,     492,        4,     494,        4,
840     497,        8,     498,        4,     500,        4,     502,        -388,
841     503,        -224,  504,        4,     506,        4,     508,        4,
842     510,        4,     512,        4,     514,        4,     516,        4,
843     518,        4,     520,        4,     522,        4,     524,        4,
844     526,        4,     528,        4,     530,        4,     532,        4,
845     534,        4,     536,        4,     538,        4,     540,        4,
846     542,        4,     544,        -520,  546,        4,     548,        4,
847     550,        4,     552,        4,     554,        4,     556,        4,
848     558,        4,     560,        4,     562,        4,     570,        43180,
849     571,        4,     573,        -652,  574,        43168, 577,        4,
850     579,        -780,  580,        276,   581,        284,   582,        4,
851     584,        4,     586,        4,     588,        4,     590,        4,
852     880,        4,     882,        4,     886,        4,     895,        464,
853     902,        152,   1073742728, 148,   906,        148,   908,        256,
854     1073742734, 252,   911,        252,   1073742737, 128,   929,        128,
855     931,        6,     1073742756, 128,   939,        128,   975,        32,
856     984,        4,     986,        4,     988,        4,     990,        4,
857     992,        4,     994,        4,     996,        4,     998,        4,
858     1000,       4,     1002,       4,     1004,       4,     1006,       4,
859     1012,       -240,  1015,       4,     1017,       -28,   1018,       4,
860     1073742845, -520,  1023,       -520,  1073742848, 320,   1039,       320,
861     1073742864, 128,   1071,       128,   1120,       4,     1122,       4,
862     1124,       4,     1126,       4,     1128,       4,     1130,       4,
863     1132,       4,     1134,       4,     1136,       4,     1138,       4,
864     1140,       4,     1142,       4,     1144,       4,     1146,       4,
865     1148,       4,     1150,       4,     1152,       4,     1162,       4,
866     1164,       4,     1166,       4,     1168,       4,     1170,       4,
867     1172,       4,     1174,       4,     1176,       4,     1178,       4,
868     1180,       4,     1182,       4,     1184,       4,     1186,       4,
869     1188,       4,     1190,       4,     1192,       4,     1194,       4,
870     1196,       4,     1198,       4,     1200,       4,     1202,       4,
871     1204,       4,     1206,       4,     1208,       4,     1210,       4,
872     1212,       4,     1214,       4,     1216,       60,    1217,       4,
873     1219,       4,     1221,       4,     1223,       4,     1225,       4,
874     1227,       4,     1229,       4,     1232,       4,     1234,       4,
875     1236,       4,     1238,       4,     1240,       4,     1242,       4,
876     1244,       4,     1246,       4,     1248,       4,     1250,       4,
877     1252,       4,     1254,       4,     1256,       4,     1258,       4,
878     1260,       4,     1262,       4,     1264,       4,     1266,       4,
879     1268,       4,     1270,       4,     1272,       4,     1274,       4,
880     1276,       4,     1278,       4,     1280,       4,     1282,       4,
881     1284,       4,     1286,       4,     1288,       4,     1290,       4,
882     1292,       4,     1294,       4,     1296,       4,     1298,       4,
883     1300,       4,     1302,       4,     1304,       4,     1306,       4,
884     1308,       4,     1310,       4,     1312,       4,     1314,       4,
885     1316,       4,     1318,       4,     1320,       4,     1322,       4,
886     1324,       4,     1326,       4,     1073743153, 192,   1366,       192,
887     1073746080, 29056, 4293,       29056, 4295,       29056, 4301,       29056,
888     7680,       4,     7682,       4,     7684,       4,     7686,       4,
889     7688,       4,     7690,       4,     7692,       4,     7694,       4,
890     7696,       4,     7698,       4,     7700,       4,     7702,       4,
891     7704,       4,     7706,       4,     7708,       4,     7710,       4,
892     7712,       4,     7714,       4,     7716,       4,     7718,       4,
893     7720,       4,     7722,       4,     7724,       4,     7726,       4,
894     7728,       4,     7730,       4,     7732,       4,     7734,       4,
895     7736,       4,     7738,       4,     7740,       4,     7742,       4,
896     7744,       4,     7746,       4,     7748,       4,     7750,       4,
897     7752,       4,     7754,       4,     7756,       4,     7758,       4,
898     7760,       4,     7762,       4,     7764,       4,     7766,       4,
899     7768,       4,     7770,       4,     7772,       4,     7774,       4,
900     7776,       4,     7778,       4,     7780,       4,     7782,       4,
901     7784,       4,     7786,       4,     7788,       4,     7790,       4,
902     7792,       4,     7794,       4,     7796,       4,     7798,       4,
903     7800,       4,     7802,       4,     7804,       4,     7806,       4,
904     7808,       4,     7810,       4,     7812,       4,     7814,       4,
905     7816,       4,     7818,       4,     7820,       4,     7822,       4,
906     7824,       4,     7826,       4,     7828,       4,     7838,       -30460,
907     7840,       4,     7842,       4,     7844,       4,     7846,       4,
908     7848,       4,     7850,       4,     7852,       4,     7854,       4,
909     7856,       4,     7858,       4,     7860,       4,     7862,       4,
910     7864,       4,     7866,       4,     7868,       4,     7870,       4,
911     7872,       4,     7874,       4,     7876,       4,     7878,       4,
912     7880,       4,     7882,       4,     7884,       4,     7886,       4,
913     7888,       4,     7890,       4,     7892,       4,     7894,       4,
914     7896,       4,     7898,       4,     7900,       4,     7902,       4,
915     7904,       4,     7906,       4,     7908,       4,     7910,       4,
916     7912,       4,     7914,       4,     7916,       4,     7918,       4,
917     7920,       4,     7922,       4,     7924,       4,     7926,       4,
918     7928,       4,     7930,       4,     7932,       4,     7934,       4,
919     1073749768, -32,   7951,       -32,   1073749784, -32,   7965,       -32,
920     1073749800, -32,   7983,       -32,   1073749816, -32,   7999,       -32,
921     1073749832, -32,   8013,       -32,   8025,       -32,   8027,       -32,
922     8029,       -32,   8031,       -32,   1073749864, -32,   8047,       -32,
923     1073749896, -32,   8079,       -32,   1073749912, -32,   8095,       -32,
924     1073749928, -32,   8111,       -32,   1073749944, -32,   8121,       -32,
925     1073749946, -296,  8123,       -296,  8124,       -36,   1073749960, -344,
926     8139,       -344,  8140,       -36,   1073749976, -32,   8153,       -32,
927     1073749978, -400,  8155,       -400,  1073749992, -32,   8169,       -32,
928     1073749994, -448,  8171,       -448,  8172,       -28,   1073750008, -512,
929     8185,       -512,  1073750010, -504,  8187,       -504,  8188,       -36};
930 static const uint16_t kToLowercaseMultiStrings0Size = 2;
931 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings1[1] = {
932     {{kSentinel}}};
933 static const uint16_t kToLowercaseTable1Size = 79;
934 static const int32_t kToLowercaseTable1[158] = {
935     294,        -30068, 298,        -33532, 299,  -33048, 306,        112,
936     1073742176, 64,     367,        64,     387,  4,      1073743030, 104,
937     1231,       104,    1073744896, 192,    3118, 192,    3168,       4,
938     3170,       -42972, 3171,       -15256, 3172, -42908, 3175,       4,
939     3177,       4,      3179,       4,      3181, -43120, 3182,       -42996,
940     3183,       -43132, 3184,       -43128, 3186, 4,      3189,       4,
941     1073745022, -43260, 3199,       -43260, 3200, 4,      3202,       4,
942     3204,       4,      3206,       4,      3208, 4,      3210,       4,
943     3212,       4,      3214,       4,      3216, 4,      3218,       4,
944     3220,       4,      3222,       4,      3224, 4,      3226,       4,
945     3228,       4,      3230,       4,      3232, 4,      3234,       4,
946     3236,       4,      3238,       4,      3240, 4,      3242,       4,
947     3244,       4,      3246,       4,      3248, 4,      3250,       4,
948     3252,       4,      3254,       4,      3256, 4,      3258,       4,
949     3260,       4,      3262,       4,      3264, 4,      3266,       4,
950     3268,       4,      3270,       4,      3272, 4,      3274,       4,
951     3276,       4,      3278,       4,      3280, 4,      3282,       4,
952     3284,       4,      3286,       4,      3288, 4,      3290,       4,
953     3292,       4,      3294,       4,      3296, 4,      3298,       4,
954     3307,       4,      3309,       4,      3314, 4};
955 static const uint16_t kToLowercaseMultiStrings1Size = 1;
956 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings5[1] = {
957     {{kSentinel}}};
958 static const uint16_t kToLowercaseTable5Size = 103;
959 static const int32_t kToLowercaseTable5[206] = {
960     1600, 4,       1602, 4,       1604, 4,       1606, 4,       1608, 4,
961     1610, 4,       1612, 4,       1614, 4,       1616, 4,       1618, 4,
962     1620, 4,       1622, 4,       1624, 4,       1626, 4,       1628, 4,
963     1630, 4,       1632, 4,       1634, 4,       1636, 4,       1638, 4,
964     1640, 4,       1642, 4,       1644, 4,       1664, 4,       1666, 4,
965     1668, 4,       1670, 4,       1672, 4,       1674, 4,       1676, 4,
966     1678, 4,       1680, 4,       1682, 4,       1684, 4,       1686, 4,
967     1688, 4,       1690, 4,       1826, 4,       1828, 4,       1830, 4,
968     1832, 4,       1834, 4,       1836, 4,       1838, 4,       1842, 4,
969     1844, 4,       1846, 4,       1848, 4,       1850, 4,       1852, 4,
970     1854, 4,       1856, 4,       1858, 4,       1860, 4,       1862, 4,
971     1864, 4,       1866, 4,       1868, 4,       1870, 4,       1872, 4,
972     1874, 4,       1876, 4,       1878, 4,       1880, 4,       1882, 4,
973     1884, 4,       1886, 4,       1888, 4,       1890, 4,       1892, 4,
974     1894, 4,       1896, 4,       1898, 4,       1900, 4,       1902, 4,
975     1913, 4,       1915, 4,       1917, -141328, 1918, 4,       1920, 4,
976     1922, 4,       1924, 4,       1926, 4,       1931, 4,       1933, -169120,
977     1936, 4,       1938, 4,       1942, 4,       1944, 4,       1946, 4,
978     1948, 4,       1950, 4,       1952, 4,       1954, 4,       1956, 4,
979     1958, 4,       1960, 4,       1962, -169232, 1963, -169276, 1964, -169260,
980     1965, -169220, 1968, -169032, 1969, -169128};
981 static const uint16_t kToLowercaseMultiStrings5Size = 1;
982 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings7[1] = {
983     {{kSentinel}}};
984 static const uint16_t kToLowercaseTable7Size = 2;
985 static const int32_t kToLowercaseTable7[4] = {1073749793, 128, 7994, 128};
986 static const uint16_t kToLowercaseMultiStrings7Size = 1;
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)987 int ToLowercase::Convert(uchar c, uchar n, uchar* result,
988                          bool* allow_caching_ptr) {
989   int chunk_index = c >> 13;
990   switch (chunk_index) {
991     case 0:
992       return LookupMapping<true>(kToLowercaseTable0, kToLowercaseTable0Size,
993                                  kToLowercaseMultiStrings0, c, n, result,
994                                  allow_caching_ptr);
995     case 1:
996       return LookupMapping<true>(kToLowercaseTable1, kToLowercaseTable1Size,
997                                  kToLowercaseMultiStrings1, c, n, result,
998                                  allow_caching_ptr);
999     case 5:
1000       return LookupMapping<true>(kToLowercaseTable5, kToLowercaseTable5Size,
1001                                  kToLowercaseMultiStrings5, c, n, result,
1002                                  allow_caching_ptr);
1003     case 7:
1004       return LookupMapping<true>(kToLowercaseTable7, kToLowercaseTable7Size,
1005                                  kToLowercaseMultiStrings7, c, n, result,
1006                                  allow_caching_ptr);
1007     default:
1008       return 0;
1009   }
1010 }
1011 
1012 static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings0[62] = {
1013     {{83, 83, kSentinel}},    {{700, 78, kSentinel}},
1014     {{74, 780, kSentinel}},   {{921, 776, 769}},
1015     {{933, 776, 769}},        {{1333, 1362, kSentinel}},
1016     {{72, 817, kSentinel}},   {{84, 776, kSentinel}},
1017     {{87, 778, kSentinel}},   {{89, 778, kSentinel}},
1018     {{65, 702, kSentinel}},   {{933, 787, kSentinel}},
1019     {{933, 787, 768}},        {{933, 787, 769}},
1020     {{933, 787, 834}},        {{7944, 921, kSentinel}},
1021     {{7945, 921, kSentinel}}, {{7946, 921, kSentinel}},
1022     {{7947, 921, kSentinel}}, {{7948, 921, kSentinel}},
1023     {{7949, 921, kSentinel}}, {{7950, 921, kSentinel}},
1024     {{7951, 921, kSentinel}}, {{7976, 921, kSentinel}},
1025     {{7977, 921, kSentinel}}, {{7978, 921, kSentinel}},
1026     {{7979, 921, kSentinel}}, {{7980, 921, kSentinel}},
1027     {{7981, 921, kSentinel}}, {{7982, 921, kSentinel}},
1028     {{7983, 921, kSentinel}}, {{8040, 921, kSentinel}},
1029     {{8041, 921, kSentinel}}, {{8042, 921, kSentinel}},
1030     {{8043, 921, kSentinel}}, {{8044, 921, kSentinel}},
1031     {{8045, 921, kSentinel}}, {{8046, 921, kSentinel}},
1032     {{8047, 921, kSentinel}}, {{8122, 921, kSentinel}},
1033     {{913, 921, kSentinel}},  {{902, 921, kSentinel}},
1034     {{913, 834, kSentinel}},  {{913, 834, 921}},
1035     {{8138, 921, kSentinel}}, {{919, 921, kSentinel}},
1036     {{905, 921, kSentinel}},  {{919, 834, kSentinel}},
1037     {{919, 834, 921}},        {{921, 776, 768}},
1038     {{921, 834, kSentinel}},  {{921, 776, 834}},
1039     {{933, 776, 768}},        {{929, 787, kSentinel}},
1040     {{933, 834, kSentinel}},  {{933, 776, 834}},
1041     {{8186, 921, kSentinel}}, {{937, 921, kSentinel}},
1042     {{911, 921, kSentinel}},  {{937, 834, kSentinel}},
1043     {{937, 834, 921}},        {{kSentinel}}};
1044 static const uint16_t kToUppercaseTable0Size = 590;
1045 static const int32_t kToUppercaseTable0[1180] = {
1046     1073741921, -128,   122,        -128,   181,        2972,
1047     223,        1,      1073742048, -128,   246,        -128,
1048     1073742072, -128,   254,        -128,   255,        484,
1049     257,        -4,     259,        -4,     261,        -4,
1050     263,        -4,     265,        -4,     267,        -4,
1051     269,        -4,     271,        -4,     273,        -4,
1052     275,        -4,     277,        -4,     279,        -4,
1053     281,        -4,     283,        -4,     285,        -4,
1054     287,        -4,     289,        -4,     291,        -4,
1055     293,        -4,     295,        -4,     297,        -4,
1056     299,        -4,     301,        -4,     303,        -4,
1057     305,        -928,   307,        -4,     309,        -4,
1058     311,        -4,     314,        -4,     316,        -4,
1059     318,        -4,     320,        -4,     322,        -4,
1060     324,        -4,     326,        -4,     328,        -4,
1061     329,        5,      331,        -4,     333,        -4,
1062     335,        -4,     337,        -4,     339,        -4,
1063     341,        -4,     343,        -4,     345,        -4,
1064     347,        -4,     349,        -4,     351,        -4,
1065     353,        -4,     355,        -4,     357,        -4,
1066     359,        -4,     361,        -4,     363,        -4,
1067     365,        -4,     367,        -4,     369,        -4,
1068     371,        -4,     373,        -4,     375,        -4,
1069     378,        -4,     380,        -4,     382,        -4,
1070     383,        -1200,  384,        780,    387,        -4,
1071     389,        -4,     392,        -4,     396,        -4,
1072     402,        -4,     405,        388,    409,        -4,
1073     410,        652,    414,        520,    417,        -4,
1074     419,        -4,     421,        -4,     424,        -4,
1075     429,        -4,     432,        -4,     436,        -4,
1076     438,        -4,     441,        -4,     445,        -4,
1077     447,        224,    453,        -4,     454,        -8,
1078     456,        -4,     457,        -8,     459,        -4,
1079     460,        -8,     462,        -4,     464,        -4,
1080     466,        -4,     468,        -4,     470,        -4,
1081     472,        -4,     474,        -4,     476,        -4,
1082     477,        -316,   479,        -4,     481,        -4,
1083     483,        -4,     485,        -4,     487,        -4,
1084     489,        -4,     491,        -4,     493,        -4,
1085     495,        -4,     496,        9,      498,        -4,
1086     499,        -8,     501,        -4,     505,        -4,
1087     507,        -4,     509,        -4,     511,        -4,
1088     513,        -4,     515,        -4,     517,        -4,
1089     519,        -4,     521,        -4,     523,        -4,
1090     525,        -4,     527,        -4,     529,        -4,
1091     531,        -4,     533,        -4,     535,        -4,
1092     537,        -4,     539,        -4,     541,        -4,
1093     543,        -4,     547,        -4,     549,        -4,
1094     551,        -4,     553,        -4,     555,        -4,
1095     557,        -4,     559,        -4,     561,        -4,
1096     563,        -4,     572,        -4,     1073742399, 43260,
1097     576,        43260,  578,        -4,     583,        -4,
1098     585,        -4,     587,        -4,     589,        -4,
1099     591,        -4,     592,        43132,  593,        43120,
1100     594,        43128,  595,        -840,   596,        -824,
1101     1073742422, -820,   599,        -820,   601,        -808,
1102     603,        -812,   604,        169276, 608,        -820,
1103     609,        169260, 611,        -828,   613,        169120,
1104     614,        169232, 616,        -836,   617,        -844,
1105     619,        42972,  620,        169220, 623,        -844,
1106     625,        42996,  626,        -852,   629,        -856,
1107     637,        42908,  640,        -872,   643,        -872,
1108     647,        169128, 648,        -872,   649,        -276,
1109     1073742474, -868,   651,        -868,   652,        -284,
1110     658,        -876,   670,        169032, 837,        336,
1111     881,        -4,     883,        -4,     887,        -4,
1112     1073742715, 520,    893,        520,    912,        13,
1113     940,        -152,   1073742765, -148,   943,        -148,
1114     944,        17,     1073742769, -128,   961,        -128,
1115     962,        -124,   1073742787, -128,   971,        -128,
1116     972,        -256,   1073742797, -252,   974,        -252,
1117     976,        -248,   977,        -228,   981,        -188,
1118     982,        -216,   983,        -32,    985,        -4,
1119     987,        -4,     989,        -4,     991,        -4,
1120     993,        -4,     995,        -4,     997,        -4,
1121     999,        -4,     1001,       -4,     1003,       -4,
1122     1005,       -4,     1007,       -4,     1008,       -344,
1123     1009,       -320,   1010,       28,     1011,       -464,
1124     1013,       -384,   1016,       -4,     1019,       -4,
1125     1073742896, -128,   1103,       -128,   1073742928, -320,
1126     1119,       -320,   1121,       -4,     1123,       -4,
1127     1125,       -4,     1127,       -4,     1129,       -4,
1128     1131,       -4,     1133,       -4,     1135,       -4,
1129     1137,       -4,     1139,       -4,     1141,       -4,
1130     1143,       -4,     1145,       -4,     1147,       -4,
1131     1149,       -4,     1151,       -4,     1153,       -4,
1132     1163,       -4,     1165,       -4,     1167,       -4,
1133     1169,       -4,     1171,       -4,     1173,       -4,
1134     1175,       -4,     1177,       -4,     1179,       -4,
1135     1181,       -4,     1183,       -4,     1185,       -4,
1136     1187,       -4,     1189,       -4,     1191,       -4,
1137     1193,       -4,     1195,       -4,     1197,       -4,
1138     1199,       -4,     1201,       -4,     1203,       -4,
1139     1205,       -4,     1207,       -4,     1209,       -4,
1140     1211,       -4,     1213,       -4,     1215,       -4,
1141     1218,       -4,     1220,       -4,     1222,       -4,
1142     1224,       -4,     1226,       -4,     1228,       -4,
1143     1230,       -4,     1231,       -60,    1233,       -4,
1144     1235,       -4,     1237,       -4,     1239,       -4,
1145     1241,       -4,     1243,       -4,     1245,       -4,
1146     1247,       -4,     1249,       -4,     1251,       -4,
1147     1253,       -4,     1255,       -4,     1257,       -4,
1148     1259,       -4,     1261,       -4,     1263,       -4,
1149     1265,       -4,     1267,       -4,     1269,       -4,
1150     1271,       -4,     1273,       -4,     1275,       -4,
1151     1277,       -4,     1279,       -4,     1281,       -4,
1152     1283,       -4,     1285,       -4,     1287,       -4,
1153     1289,       -4,     1291,       -4,     1293,       -4,
1154     1295,       -4,     1297,       -4,     1299,       -4,
1155     1301,       -4,     1303,       -4,     1305,       -4,
1156     1307,       -4,     1309,       -4,     1311,       -4,
1157     1313,       -4,     1315,       -4,     1317,       -4,
1158     1319,       -4,     1321,       -4,     1323,       -4,
1159     1325,       -4,     1327,       -4,     1073743201, -192,
1160     1414,       -192,   1415,       21,     7545,       141328,
1161     7549,       15256,  7681,       -4,     7683,       -4,
1162     7685,       -4,     7687,       -4,     7689,       -4,
1163     7691,       -4,     7693,       -4,     7695,       -4,
1164     7697,       -4,     7699,       -4,     7701,       -4,
1165     7703,       -4,     7705,       -4,     7707,       -4,
1166     7709,       -4,     7711,       -4,     7713,       -4,
1167     7715,       -4,     7717,       -4,     7719,       -4,
1168     7721,       -4,     7723,       -4,     7725,       -4,
1169     7727,       -4,     7729,       -4,     7731,       -4,
1170     7733,       -4,     7735,       -4,     7737,       -4,
1171     7739,       -4,     7741,       -4,     7743,       -4,
1172     7745,       -4,     7747,       -4,     7749,       -4,
1173     7751,       -4,     7753,       -4,     7755,       -4,
1174     7757,       -4,     7759,       -4,     7761,       -4,
1175     7763,       -4,     7765,       -4,     7767,       -4,
1176     7769,       -4,     7771,       -4,     7773,       -4,
1177     7775,       -4,     7777,       -4,     7779,       -4,
1178     7781,       -4,     7783,       -4,     7785,       -4,
1179     7787,       -4,     7789,       -4,     7791,       -4,
1180     7793,       -4,     7795,       -4,     7797,       -4,
1181     7799,       -4,     7801,       -4,     7803,       -4,
1182     7805,       -4,     7807,       -4,     7809,       -4,
1183     7811,       -4,     7813,       -4,     7815,       -4,
1184     7817,       -4,     7819,       -4,     7821,       -4,
1185     7823,       -4,     7825,       -4,     7827,       -4,
1186     7829,       -4,     7830,       25,     7831,       29,
1187     7832,       33,     7833,       37,     7834,       41,
1188     7835,       -236,   7841,       -4,     7843,       -4,
1189     7845,       -4,     7847,       -4,     7849,       -4,
1190     7851,       -4,     7853,       -4,     7855,       -4,
1191     7857,       -4,     7859,       -4,     7861,       -4,
1192     7863,       -4,     7865,       -4,     7867,       -4,
1193     7869,       -4,     7871,       -4,     7873,       -4,
1194     7875,       -4,     7877,       -4,     7879,       -4,
1195     7881,       -4,     7883,       -4,     7885,       -4,
1196     7887,       -4,     7889,       -4,     7891,       -4,
1197     7893,       -4,     7895,       -4,     7897,       -4,
1198     7899,       -4,     7901,       -4,     7903,       -4,
1199     7905,       -4,     7907,       -4,     7909,       -4,
1200     7911,       -4,     7913,       -4,     7915,       -4,
1201     7917,       -4,     7919,       -4,     7921,       -4,
1202     7923,       -4,     7925,       -4,     7927,       -4,
1203     7929,       -4,     7931,       -4,     7933,       -4,
1204     7935,       -4,     1073749760, 32,     7943,       32,
1205     1073749776, 32,     7957,       32,     1073749792, 32,
1206     7975,       32,     1073749808, 32,     7991,       32,
1207     1073749824, 32,     8005,       32,     8016,       45,
1208     8017,       32,     8018,       49,     8019,       32,
1209     8020,       53,     8021,       32,     8022,       57,
1210     8023,       32,     1073749856, 32,     8039,       32,
1211     1073749872, 296,    8049,       296,    1073749874, 344,
1212     8053,       344,    1073749878, 400,    8055,       400,
1213     1073749880, 512,    8057,       512,    1073749882, 448,
1214     8059,       448,    1073749884, 504,    8061,       504,
1215     8064,       61,     8065,       65,     8066,       69,
1216     8067,       73,     8068,       77,     8069,       81,
1217     8070,       85,     8071,       89,     8072,       61,
1218     8073,       65,     8074,       69,     8075,       73,
1219     8076,       77,     8077,       81,     8078,       85,
1220     8079,       89,     8080,       93,     8081,       97,
1221     8082,       101,    8083,       105,    8084,       109,
1222     8085,       113,    8086,       117,    8087,       121,
1223     8088,       93,     8089,       97,     8090,       101,
1224     8091,       105,    8092,       109,    8093,       113,
1225     8094,       117,    8095,       121,    8096,       125,
1226     8097,       129,    8098,       133,    8099,       137,
1227     8100,       141,    8101,       145,    8102,       149,
1228     8103,       153,    8104,       125,    8105,       129,
1229     8106,       133,    8107,       137,    8108,       141,
1230     8109,       145,    8110,       149,    8111,       153,
1231     1073749936, 32,     8113,       32,     8114,       157,
1232     8115,       161,    8116,       165,    8118,       169,
1233     8119,       173,    8124,       161,    8126,       -28820,
1234     8130,       177,    8131,       181,    8132,       185,
1235     8134,       189,    8135,       193,    8140,       181,
1236     1073749968, 32,     8145,       32,     8146,       197,
1237     8147,       13,     8150,       201,    8151,       205,
1238     1073749984, 32,     8161,       32,     8162,       209,
1239     8163,       17,     8164,       213,    8165,       28,
1240     8166,       217,    8167,       221,    8178,       225,
1241     8179,       229,    8180,       233,    8182,       237,
1242     8183,       241,    8188,       229};
1243 static const uint16_t kToUppercaseMultiStrings0Size = 62;
1244 static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings1[1] = {
1245     {{kSentinel}}};
1246 static const uint16_t kToUppercaseTable1Size = 73;
1247 static const int32_t kToUppercaseTable1[146] = {
1248     334,  -112,   1073742192, -64,    383,  -64,   388,  -4, 1073743056, -104,
1249     1257, -104,   1073744944, -192,   3166, -192,  3169, -4, 3173,       -43180,
1250     3174, -43168, 3176,       -4,     3178, -4,    3180, -4, 3187,       -4,
1251     3190, -4,     3201,       -4,     3203, -4,    3205, -4, 3207,       -4,
1252     3209, -4,     3211,       -4,     3213, -4,    3215, -4, 3217,       -4,
1253     3219, -4,     3221,       -4,     3223, -4,    3225, -4, 3227,       -4,
1254     3229, -4,     3231,       -4,     3233, -4,    3235, -4, 3237,       -4,
1255     3239, -4,     3241,       -4,     3243, -4,    3245, -4, 3247,       -4,
1256     3249, -4,     3251,       -4,     3253, -4,    3255, -4, 3257,       -4,
1257     3259, -4,     3261,       -4,     3263, -4,    3265, -4, 3267,       -4,
1258     3269, -4,     3271,       -4,     3273, -4,    3275, -4, 3277,       -4,
1259     3279, -4,     3281,       -4,     3283, -4,    3285, -4, 3287,       -4,
1260     3289, -4,     3291,       -4,     3293, -4,    3295, -4, 3297,       -4,
1261     3299, -4,     3308,       -4,     3310, -4,    3315, -4, 1073745152, -29056,
1262     3365, -29056, 3367,       -29056, 3373, -29056};
1263 static const uint16_t kToUppercaseMultiStrings1Size = 1;
1264 static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings5[1] = {
1265     {{kSentinel}}};
1266 static const uint16_t kToUppercaseTable5Size = 95;
1267 static const int32_t kToUppercaseTable5[190] = {
1268     1601, -4, 1603, -4, 1605, -4, 1607, -4, 1609, -4, 1611, -4, 1613, -4,
1269     1615, -4, 1617, -4, 1619, -4, 1621, -4, 1623, -4, 1625, -4, 1627, -4,
1270     1629, -4, 1631, -4, 1633, -4, 1635, -4, 1637, -4, 1639, -4, 1641, -4,
1271     1643, -4, 1645, -4, 1665, -4, 1667, -4, 1669, -4, 1671, -4, 1673, -4,
1272     1675, -4, 1677, -4, 1679, -4, 1681, -4, 1683, -4, 1685, -4, 1687, -4,
1273     1689, -4, 1691, -4, 1827, -4, 1829, -4, 1831, -4, 1833, -4, 1835, -4,
1274     1837, -4, 1839, -4, 1843, -4, 1845, -4, 1847, -4, 1849, -4, 1851, -4,
1275     1853, -4, 1855, -4, 1857, -4, 1859, -4, 1861, -4, 1863, -4, 1865, -4,
1276     1867, -4, 1869, -4, 1871, -4, 1873, -4, 1875, -4, 1877, -4, 1879, -4,
1277     1881, -4, 1883, -4, 1885, -4, 1887, -4, 1889, -4, 1891, -4, 1893, -4,
1278     1895, -4, 1897, -4, 1899, -4, 1901, -4, 1903, -4, 1914, -4, 1916, -4,
1279     1919, -4, 1921, -4, 1923, -4, 1925, -4, 1927, -4, 1932, -4, 1937, -4,
1280     1939, -4, 1943, -4, 1945, -4, 1947, -4, 1949, -4, 1951, -4, 1953, -4,
1281     1955, -4, 1957, -4, 1959, -4, 1961, -4};
1282 static const uint16_t kToUppercaseMultiStrings5Size = 1;
1283 static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings7[12] = {
1284     {{70, 70, kSentinel}},
1285     {{70, 73, kSentinel}},
1286     {{70, 76, kSentinel}},
1287     {{70, 70, 73}},
1288     {{70, 70, 76}},
1289     {{83, 84, kSentinel}},
1290     {{1348, 1350, kSentinel}},
1291     {{1348, 1333, kSentinel}},
1292     {{1348, 1339, kSentinel}},
1293     {{1358, 1350, kSentinel}},
1294     {{1348, 1341, kSentinel}},
1295     {{kSentinel}}};
1296 static const uint16_t kToUppercaseTable7Size = 14;
1297 static const int32_t kToUppercaseTable7[28] = {
1298     6912, 1,  6913, 5,  6914,       9,    6915, 13,  6916, 17,
1299     6917, 21, 6918, 21, 6931,       25,   6932, 29,  6933, 33,
1300     6934, 37, 6935, 41, 1073749825, -128, 8026, -128};
1301 static const uint16_t kToUppercaseMultiStrings7Size = 12;
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)1302 int ToUppercase::Convert(uchar c, uchar n, uchar* result,
1303                          bool* allow_caching_ptr) {
1304   int chunk_index = c >> 13;
1305   switch (chunk_index) {
1306     case 0:
1307       return LookupMapping<true>(kToUppercaseTable0, kToUppercaseTable0Size,
1308                                  kToUppercaseMultiStrings0, c, n, result,
1309                                  allow_caching_ptr);
1310     case 1:
1311       return LookupMapping<true>(kToUppercaseTable1, kToUppercaseTable1Size,
1312                                  kToUppercaseMultiStrings1, c, n, result,
1313                                  allow_caching_ptr);
1314     case 5:
1315       return LookupMapping<true>(kToUppercaseTable5, kToUppercaseTable5Size,
1316                                  kToUppercaseMultiStrings5, c, n, result,
1317                                  allow_caching_ptr);
1318     case 7:
1319       return LookupMapping<true>(kToUppercaseTable7, kToUppercaseTable7Size,
1320                                  kToUppercaseMultiStrings7, c, n, result,
1321                                  allow_caching_ptr);
1322     default:
1323       return 0;
1324   }
1325 }
1326 
1327 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings0[1] =
1328     {{{kSentinel}}};
1329 static const uint16_t kEcma262CanonicalizeTable0Size = 498;
1330 static const int32_t kEcma262CanonicalizeTable0[996] = {
1331     1073741921, -128,   122,        -128,   181,        2972,
1332     1073742048, -128,   246,        -128,   1073742072, -128,
1333     254,        -128,   255,        484,    257,        -4,
1334     259,        -4,     261,        -4,     263,        -4,
1335     265,        -4,     267,        -4,     269,        -4,
1336     271,        -4,     273,        -4,     275,        -4,
1337     277,        -4,     279,        -4,     281,        -4,
1338     283,        -4,     285,        -4,     287,        -4,
1339     289,        -4,     291,        -4,     293,        -4,
1340     295,        -4,     297,        -4,     299,        -4,
1341     301,        -4,     303,        -4,     307,        -4,
1342     309,        -4,     311,        -4,     314,        -4,
1343     316,        -4,     318,        -4,     320,        -4,
1344     322,        -4,     324,        -4,     326,        -4,
1345     328,        -4,     331,        -4,     333,        -4,
1346     335,        -4,     337,        -4,     339,        -4,
1347     341,        -4,     343,        -4,     345,        -4,
1348     347,        -4,     349,        -4,     351,        -4,
1349     353,        -4,     355,        -4,     357,        -4,
1350     359,        -4,     361,        -4,     363,        -4,
1351     365,        -4,     367,        -4,     369,        -4,
1352     371,        -4,     373,        -4,     375,        -4,
1353     378,        -4,     380,        -4,     382,        -4,
1354     384,        780,    387,        -4,     389,        -4,
1355     392,        -4,     396,        -4,     402,        -4,
1356     405,        388,    409,        -4,     410,        652,
1357     414,        520,    417,        -4,     419,        -4,
1358     421,        -4,     424,        -4,     429,        -4,
1359     432,        -4,     436,        -4,     438,        -4,
1360     441,        -4,     445,        -4,     447,        224,
1361     453,        -4,     454,        -8,     456,        -4,
1362     457,        -8,     459,        -4,     460,        -8,
1363     462,        -4,     464,        -4,     466,        -4,
1364     468,        -4,     470,        -4,     472,        -4,
1365     474,        -4,     476,        -4,     477,        -316,
1366     479,        -4,     481,        -4,     483,        -4,
1367     485,        -4,     487,        -4,     489,        -4,
1368     491,        -4,     493,        -4,     495,        -4,
1369     498,        -4,     499,        -8,     501,        -4,
1370     505,        -4,     507,        -4,     509,        -4,
1371     511,        -4,     513,        -4,     515,        -4,
1372     517,        -4,     519,        -4,     521,        -4,
1373     523,        -4,     525,        -4,     527,        -4,
1374     529,        -4,     531,        -4,     533,        -4,
1375     535,        -4,     537,        -4,     539,        -4,
1376     541,        -4,     543,        -4,     547,        -4,
1377     549,        -4,     551,        -4,     553,        -4,
1378     555,        -4,     557,        -4,     559,        -4,
1379     561,        -4,     563,        -4,     572,        -4,
1380     1073742399, 43260,  576,        43260,  578,        -4,
1381     583,        -4,     585,        -4,     587,        -4,
1382     589,        -4,     591,        -4,     592,        43132,
1383     593,        43120,  594,        43128,  595,        -840,
1384     596,        -824,   1073742422, -820,   599,        -820,
1385     601,        -808,   603,        -812,   604,        169276,
1386     608,        -820,   609,        169260, 611,        -828,
1387     613,        169120, 614,        169232, 616,        -836,
1388     617,        -844,   619,        42972,  620,        169220,
1389     623,        -844,   625,        42996,  626,        -852,
1390     629,        -856,   637,        42908,  640,        -872,
1391     643,        -872,   647,        169128, 648,        -872,
1392     649,        -276,   1073742474, -868,   651,        -868,
1393     652,        -284,   658,        -876,   670,        169032,
1394     837,        336,    881,        -4,     883,        -4,
1395     887,        -4,     1073742715, 520,    893,        520,
1396     940,        -152,   1073742765, -148,   943,        -148,
1397     1073742769, -128,   961,        -128,   962,        -124,
1398     1073742787, -128,   971,        -128,   972,        -256,
1399     1073742797, -252,   974,        -252,   976,        -248,
1400     977,        -228,   981,        -188,   982,        -216,
1401     983,        -32,    985,        -4,     987,        -4,
1402     989,        -4,     991,        -4,     993,        -4,
1403     995,        -4,     997,        -4,     999,        -4,
1404     1001,       -4,     1003,       -4,     1005,       -4,
1405     1007,       -4,     1008,       -344,   1009,       -320,
1406     1010,       28,     1011,       -464,   1013,       -384,
1407     1016,       -4,     1019,       -4,     1073742896, -128,
1408     1103,       -128,   1073742928, -320,   1119,       -320,
1409     1121,       -4,     1123,       -4,     1125,       -4,
1410     1127,       -4,     1129,       -4,     1131,       -4,
1411     1133,       -4,     1135,       -4,     1137,       -4,
1412     1139,       -4,     1141,       -4,     1143,       -4,
1413     1145,       -4,     1147,       -4,     1149,       -4,
1414     1151,       -4,     1153,       -4,     1163,       -4,
1415     1165,       -4,     1167,       -4,     1169,       -4,
1416     1171,       -4,     1173,       -4,     1175,       -4,
1417     1177,       -4,     1179,       -4,     1181,       -4,
1418     1183,       -4,     1185,       -4,     1187,       -4,
1419     1189,       -4,     1191,       -4,     1193,       -4,
1420     1195,       -4,     1197,       -4,     1199,       -4,
1421     1201,       -4,     1203,       -4,     1205,       -4,
1422     1207,       -4,     1209,       -4,     1211,       -4,
1423     1213,       -4,     1215,       -4,     1218,       -4,
1424     1220,       -4,     1222,       -4,     1224,       -4,
1425     1226,       -4,     1228,       -4,     1230,       -4,
1426     1231,       -60,    1233,       -4,     1235,       -4,
1427     1237,       -4,     1239,       -4,     1241,       -4,
1428     1243,       -4,     1245,       -4,     1247,       -4,
1429     1249,       -4,     1251,       -4,     1253,       -4,
1430     1255,       -4,     1257,       -4,     1259,       -4,
1431     1261,       -4,     1263,       -4,     1265,       -4,
1432     1267,       -4,     1269,       -4,     1271,       -4,
1433     1273,       -4,     1275,       -4,     1277,       -4,
1434     1279,       -4,     1281,       -4,     1283,       -4,
1435     1285,       -4,     1287,       -4,     1289,       -4,
1436     1291,       -4,     1293,       -4,     1295,       -4,
1437     1297,       -4,     1299,       -4,     1301,       -4,
1438     1303,       -4,     1305,       -4,     1307,       -4,
1439     1309,       -4,     1311,       -4,     1313,       -4,
1440     1315,       -4,     1317,       -4,     1319,       -4,
1441     1321,       -4,     1323,       -4,     1325,       -4,
1442     1327,       -4,     1073743201, -192,   1414,       -192,
1443     7545,       141328, 7549,       15256,  7681,       -4,
1444     7683,       -4,     7685,       -4,     7687,       -4,
1445     7689,       -4,     7691,       -4,     7693,       -4,
1446     7695,       -4,     7697,       -4,     7699,       -4,
1447     7701,       -4,     7703,       -4,     7705,       -4,
1448     7707,       -4,     7709,       -4,     7711,       -4,
1449     7713,       -4,     7715,       -4,     7717,       -4,
1450     7719,       -4,     7721,       -4,     7723,       -4,
1451     7725,       -4,     7727,       -4,     7729,       -4,
1452     7731,       -4,     7733,       -4,     7735,       -4,
1453     7737,       -4,     7739,       -4,     7741,       -4,
1454     7743,       -4,     7745,       -4,     7747,       -4,
1455     7749,       -4,     7751,       -4,     7753,       -4,
1456     7755,       -4,     7757,       -4,     7759,       -4,
1457     7761,       -4,     7763,       -4,     7765,       -4,
1458     7767,       -4,     7769,       -4,     7771,       -4,
1459     7773,       -4,     7775,       -4,     7777,       -4,
1460     7779,       -4,     7781,       -4,     7783,       -4,
1461     7785,       -4,     7787,       -4,     7789,       -4,
1462     7791,       -4,     7793,       -4,     7795,       -4,
1463     7797,       -4,     7799,       -4,     7801,       -4,
1464     7803,       -4,     7805,       -4,     7807,       -4,
1465     7809,       -4,     7811,       -4,     7813,       -4,
1466     7815,       -4,     7817,       -4,     7819,       -4,
1467     7821,       -4,     7823,       -4,     7825,       -4,
1468     7827,       -4,     7829,       -4,     7835,       -236,
1469     7841,       -4,     7843,       -4,     7845,       -4,
1470     7847,       -4,     7849,       -4,     7851,       -4,
1471     7853,       -4,     7855,       -4,     7857,       -4,
1472     7859,       -4,     7861,       -4,     7863,       -4,
1473     7865,       -4,     7867,       -4,     7869,       -4,
1474     7871,       -4,     7873,       -4,     7875,       -4,
1475     7877,       -4,     7879,       -4,     7881,       -4,
1476     7883,       -4,     7885,       -4,     7887,       -4,
1477     7889,       -4,     7891,       -4,     7893,       -4,
1478     7895,       -4,     7897,       -4,     7899,       -4,
1479     7901,       -4,     7903,       -4,     7905,       -4,
1480     7907,       -4,     7909,       -4,     7911,       -4,
1481     7913,       -4,     7915,       -4,     7917,       -4,
1482     7919,       -4,     7921,       -4,     7923,       -4,
1483     7925,       -4,     7927,       -4,     7929,       -4,
1484     7931,       -4,     7933,       -4,     7935,       -4,
1485     1073749760, 32,     7943,       32,     1073749776, 32,
1486     7957,       32,     1073749792, 32,     7975,       32,
1487     1073749808, 32,     7991,       32,     1073749824, 32,
1488     8005,       32,     8017,       32,     8019,       32,
1489     8021,       32,     8023,       32,     1073749856, 32,
1490     8039,       32,     1073749872, 296,    8049,       296,
1491     1073749874, 344,    8053,       344,    1073749878, 400,
1492     8055,       400,    1073749880, 512,    8057,       512,
1493     1073749882, 448,    8059,       448,    1073749884, 504,
1494     8061,       504,    1073749936, 32,     8113,       32,
1495     8126,       -28820, 1073749968, 32,     8145,       32,
1496     1073749984, 32,     8161,       32,     8165,       28};
1497 static const uint16_t kEcma262CanonicalizeMultiStrings0Size = 1;
1498 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings1[1] =
1499     {{{kSentinel}}};
1500 static const uint16_t kEcma262CanonicalizeTable1Size = 73;
1501 static const int32_t kEcma262CanonicalizeTable1[146] = {
1502     334,  -112,   1073742192, -64,    383,  -64,   388,  -4, 1073743056, -104,
1503     1257, -104,   1073744944, -192,   3166, -192,  3169, -4, 3173,       -43180,
1504     3174, -43168, 3176,       -4,     3178, -4,    3180, -4, 3187,       -4,
1505     3190, -4,     3201,       -4,     3203, -4,    3205, -4, 3207,       -4,
1506     3209, -4,     3211,       -4,     3213, -4,    3215, -4, 3217,       -4,
1507     3219, -4,     3221,       -4,     3223, -4,    3225, -4, 3227,       -4,
1508     3229, -4,     3231,       -4,     3233, -4,    3235, -4, 3237,       -4,
1509     3239, -4,     3241,       -4,     3243, -4,    3245, -4, 3247,       -4,
1510     3249, -4,     3251,       -4,     3253, -4,    3255, -4, 3257,       -4,
1511     3259, -4,     3261,       -4,     3263, -4,    3265, -4, 3267,       -4,
1512     3269, -4,     3271,       -4,     3273, -4,    3275, -4, 3277,       -4,
1513     3279, -4,     3281,       -4,     3283, -4,    3285, -4, 3287,       -4,
1514     3289, -4,     3291,       -4,     3293, -4,    3295, -4, 3297,       -4,
1515     3299, -4,     3308,       -4,     3310, -4,    3315, -4, 1073745152, -29056,
1516     3365, -29056, 3367,       -29056, 3373, -29056};
1517 static const uint16_t kEcma262CanonicalizeMultiStrings1Size = 1;
1518 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings5[1] =
1519     {{{kSentinel}}};
1520 static const uint16_t kEcma262CanonicalizeTable5Size = 95;
1521 static const int32_t kEcma262CanonicalizeTable5[190] = {
1522     1601, -4, 1603, -4, 1605, -4, 1607, -4, 1609, -4, 1611, -4, 1613, -4,
1523     1615, -4, 1617, -4, 1619, -4, 1621, -4, 1623, -4, 1625, -4, 1627, -4,
1524     1629, -4, 1631, -4, 1633, -4, 1635, -4, 1637, -4, 1639, -4, 1641, -4,
1525     1643, -4, 1645, -4, 1665, -4, 1667, -4, 1669, -4, 1671, -4, 1673, -4,
1526     1675, -4, 1677, -4, 1679, -4, 1681, -4, 1683, -4, 1685, -4, 1687, -4,
1527     1689, -4, 1691, -4, 1827, -4, 1829, -4, 1831, -4, 1833, -4, 1835, -4,
1528     1837, -4, 1839, -4, 1843, -4, 1845, -4, 1847, -4, 1849, -4, 1851, -4,
1529     1853, -4, 1855, -4, 1857, -4, 1859, -4, 1861, -4, 1863, -4, 1865, -4,
1530     1867, -4, 1869, -4, 1871, -4, 1873, -4, 1875, -4, 1877, -4, 1879, -4,
1531     1881, -4, 1883, -4, 1885, -4, 1887, -4, 1889, -4, 1891, -4, 1893, -4,
1532     1895, -4, 1897, -4, 1899, -4, 1901, -4, 1903, -4, 1914, -4, 1916, -4,
1533     1919, -4, 1921, -4, 1923, -4, 1925, -4, 1927, -4, 1932, -4, 1937, -4,
1534     1939, -4, 1943, -4, 1945, -4, 1947, -4, 1949, -4, 1951, -4, 1953, -4,
1535     1955, -4, 1957, -4, 1959, -4, 1961, -4};
1536 static const uint16_t kEcma262CanonicalizeMultiStrings5Size = 1;
1537 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings7[1] =
1538     {{{kSentinel}}};
1539 static const uint16_t kEcma262CanonicalizeTable7Size = 2;
1540 static const int32_t kEcma262CanonicalizeTable7[4] = {1073749825, -128, 8026,
1541                                                       -128};
1542 static const uint16_t kEcma262CanonicalizeMultiStrings7Size = 1;
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)1543 int Ecma262Canonicalize::Convert(uchar c, uchar n, uchar* result,
1544                                  bool* allow_caching_ptr) {
1545   int chunk_index = c >> 13;
1546   switch (chunk_index) {
1547     case 0:
1548       return LookupMapping<true>(
1549           kEcma262CanonicalizeTable0, kEcma262CanonicalizeTable0Size,
1550           kEcma262CanonicalizeMultiStrings0, c, n, result, allow_caching_ptr);
1551     case 1:
1552       return LookupMapping<true>(
1553           kEcma262CanonicalizeTable1, kEcma262CanonicalizeTable1Size,
1554           kEcma262CanonicalizeMultiStrings1, c, n, result, allow_caching_ptr);
1555     case 5:
1556       return LookupMapping<true>(
1557           kEcma262CanonicalizeTable5, kEcma262CanonicalizeTable5Size,
1558           kEcma262CanonicalizeMultiStrings5, c, n, result, allow_caching_ptr);
1559     case 7:
1560       return LookupMapping<true>(
1561           kEcma262CanonicalizeTable7, kEcma262CanonicalizeTable7Size,
1562           kEcma262CanonicalizeMultiStrings7, c, n, result, allow_caching_ptr);
1563     default:
1564       return 0;
1565   }
1566 }
1567 
1568 static const MultiCharacterSpecialCase<4>
1569     kEcma262UnCanonicalizeMultiStrings0[507] = {{{65, 97, kSentinel}},
1570                                                 {{90, 122, kSentinel}},
1571                                                 {{181, 924, 956, kSentinel}},
1572                                                 {{192, 224, kSentinel}},
1573                                                 {{214, 246, kSentinel}},
1574                                                 {{216, 248, kSentinel}},
1575                                                 {{222, 254, kSentinel}},
1576                                                 {{255, 376, kSentinel}},
1577                                                 {{256, 257, kSentinel}},
1578                                                 {{258, 259, kSentinel}},
1579                                                 {{260, 261, kSentinel}},
1580                                                 {{262, 263, kSentinel}},
1581                                                 {{264, 265, kSentinel}},
1582                                                 {{266, 267, kSentinel}},
1583                                                 {{268, 269, kSentinel}},
1584                                                 {{270, 271, kSentinel}},
1585                                                 {{272, 273, kSentinel}},
1586                                                 {{274, 275, kSentinel}},
1587                                                 {{276, 277, kSentinel}},
1588                                                 {{278, 279, kSentinel}},
1589                                                 {{280, 281, kSentinel}},
1590                                                 {{282, 283, kSentinel}},
1591                                                 {{284, 285, kSentinel}},
1592                                                 {{286, 287, kSentinel}},
1593                                                 {{288, 289, kSentinel}},
1594                                                 {{290, 291, kSentinel}},
1595                                                 {{292, 293, kSentinel}},
1596                                                 {{294, 295, kSentinel}},
1597                                                 {{296, 297, kSentinel}},
1598                                                 {{298, 299, kSentinel}},
1599                                                 {{300, 301, kSentinel}},
1600                                                 {{302, 303, kSentinel}},
1601                                                 {{306, 307, kSentinel}},
1602                                                 {{308, 309, kSentinel}},
1603                                                 {{310, 311, kSentinel}},
1604                                                 {{313, 314, kSentinel}},
1605                                                 {{315, 316, kSentinel}},
1606                                                 {{317, 318, kSentinel}},
1607                                                 {{319, 320, kSentinel}},
1608                                                 {{321, 322, kSentinel}},
1609                                                 {{323, 324, kSentinel}},
1610                                                 {{325, 326, kSentinel}},
1611                                                 {{327, 328, kSentinel}},
1612                                                 {{330, 331, kSentinel}},
1613                                                 {{332, 333, kSentinel}},
1614                                                 {{334, 335, kSentinel}},
1615                                                 {{336, 337, kSentinel}},
1616                                                 {{338, 339, kSentinel}},
1617                                                 {{340, 341, kSentinel}},
1618                                                 {{342, 343, kSentinel}},
1619                                                 {{344, 345, kSentinel}},
1620                                                 {{346, 347, kSentinel}},
1621                                                 {{348, 349, kSentinel}},
1622                                                 {{350, 351, kSentinel}},
1623                                                 {{352, 353, kSentinel}},
1624                                                 {{354, 355, kSentinel}},
1625                                                 {{356, 357, kSentinel}},
1626                                                 {{358, 359, kSentinel}},
1627                                                 {{360, 361, kSentinel}},
1628                                                 {{362, 363, kSentinel}},
1629                                                 {{364, 365, kSentinel}},
1630                                                 {{366, 367, kSentinel}},
1631                                                 {{368, 369, kSentinel}},
1632                                                 {{370, 371, kSentinel}},
1633                                                 {{372, 373, kSentinel}},
1634                                                 {{374, 375, kSentinel}},
1635                                                 {{377, 378, kSentinel}},
1636                                                 {{379, 380, kSentinel}},
1637                                                 {{381, 382, kSentinel}},
1638                                                 {{384, 579, kSentinel}},
1639                                                 {{385, 595, kSentinel}},
1640                                                 {{386, 387, kSentinel}},
1641                                                 {{388, 389, kSentinel}},
1642                                                 {{390, 596, kSentinel}},
1643                                                 {{391, 392, kSentinel}},
1644                                                 {{393, 598, kSentinel}},
1645                                                 {{394, 599, kSentinel}},
1646                                                 {{395, 396, kSentinel}},
1647                                                 {{398, 477, kSentinel}},
1648                                                 {{399, 601, kSentinel}},
1649                                                 {{400, 603, kSentinel}},
1650                                                 {{401, 402, kSentinel}},
1651                                                 {{403, 608, kSentinel}},
1652                                                 {{404, 611, kSentinel}},
1653                                                 {{405, 502, kSentinel}},
1654                                                 {{406, 617, kSentinel}},
1655                                                 {{407, 616, kSentinel}},
1656                                                 {{408, 409, kSentinel}},
1657                                                 {{410, 573, kSentinel}},
1658                                                 {{412, 623, kSentinel}},
1659                                                 {{413, 626, kSentinel}},
1660                                                 {{414, 544, kSentinel}},
1661                                                 {{415, 629, kSentinel}},
1662                                                 {{416, 417, kSentinel}},
1663                                                 {{418, 419, kSentinel}},
1664                                                 {{420, 421, kSentinel}},
1665                                                 {{422, 640, kSentinel}},
1666                                                 {{423, 424, kSentinel}},
1667                                                 {{425, 643, kSentinel}},
1668                                                 {{428, 429, kSentinel}},
1669                                                 {{430, 648, kSentinel}},
1670                                                 {{431, 432, kSentinel}},
1671                                                 {{433, 650, kSentinel}},
1672                                                 {{434, 651, kSentinel}},
1673                                                 {{435, 436, kSentinel}},
1674                                                 {{437, 438, kSentinel}},
1675                                                 {{439, 658, kSentinel}},
1676                                                 {{440, 441, kSentinel}},
1677                                                 {{444, 445, kSentinel}},
1678                                                 {{447, 503, kSentinel}},
1679                                                 {{452, 453, 454, kSentinel}},
1680                                                 {{455, 456, 457, kSentinel}},
1681                                                 {{458, 459, 460, kSentinel}},
1682                                                 {{461, 462, kSentinel}},
1683                                                 {{463, 464, kSentinel}},
1684                                                 {{465, 466, kSentinel}},
1685                                                 {{467, 468, kSentinel}},
1686                                                 {{469, 470, kSentinel}},
1687                                                 {{471, 472, kSentinel}},
1688                                                 {{473, 474, kSentinel}},
1689                                                 {{475, 476, kSentinel}},
1690                                                 {{478, 479, kSentinel}},
1691                                                 {{480, 481, kSentinel}},
1692                                                 {{482, 483, kSentinel}},
1693                                                 {{484, 485, kSentinel}},
1694                                                 {{486, 487, kSentinel}},
1695                                                 {{488, 489, kSentinel}},
1696                                                 {{490, 491, kSentinel}},
1697                                                 {{492, 493, kSentinel}},
1698                                                 {{494, 495, kSentinel}},
1699                                                 {{497, 498, 499, kSentinel}},
1700                                                 {{500, 501, kSentinel}},
1701                                                 {{504, 505, kSentinel}},
1702                                                 {{506, 507, kSentinel}},
1703                                                 {{508, 509, kSentinel}},
1704                                                 {{510, 511, kSentinel}},
1705                                                 {{512, 513, kSentinel}},
1706                                                 {{514, 515, kSentinel}},
1707                                                 {{516, 517, kSentinel}},
1708                                                 {{518, 519, kSentinel}},
1709                                                 {{520, 521, kSentinel}},
1710                                                 {{522, 523, kSentinel}},
1711                                                 {{524, 525, kSentinel}},
1712                                                 {{526, 527, kSentinel}},
1713                                                 {{528, 529, kSentinel}},
1714                                                 {{530, 531, kSentinel}},
1715                                                 {{532, 533, kSentinel}},
1716                                                 {{534, 535, kSentinel}},
1717                                                 {{536, 537, kSentinel}},
1718                                                 {{538, 539, kSentinel}},
1719                                                 {{540, 541, kSentinel}},
1720                                                 {{542, 543, kSentinel}},
1721                                                 {{546, 547, kSentinel}},
1722                                                 {{548, 549, kSentinel}},
1723                                                 {{550, 551, kSentinel}},
1724                                                 {{552, 553, kSentinel}},
1725                                                 {{554, 555, kSentinel}},
1726                                                 {{556, 557, kSentinel}},
1727                                                 {{558, 559, kSentinel}},
1728                                                 {{560, 561, kSentinel}},
1729                                                 {{562, 563, kSentinel}},
1730                                                 {{570, 11365, kSentinel}},
1731                                                 {{571, 572, kSentinel}},
1732                                                 {{574, 11366, kSentinel}},
1733                                                 {{575, 11390, kSentinel}},
1734                                                 {{576, 11391, kSentinel}},
1735                                                 {{577, 578, kSentinel}},
1736                                                 {{580, 649, kSentinel}},
1737                                                 {{581, 652, kSentinel}},
1738                                                 {{582, 583, kSentinel}},
1739                                                 {{584, 585, kSentinel}},
1740                                                 {{586, 587, kSentinel}},
1741                                                 {{588, 589, kSentinel}},
1742                                                 {{590, 591, kSentinel}},
1743                                                 {{592, 11375, kSentinel}},
1744                                                 {{593, 11373, kSentinel}},
1745                                                 {{594, 11376, kSentinel}},
1746                                                 {{604, 42923, kSentinel}},
1747                                                 {{609, 42924, kSentinel}},
1748                                                 {{613, 42893, kSentinel}},
1749                                                 {{614, 42922, kSentinel}},
1750                                                 {{619, 11362, kSentinel}},
1751                                                 {{620, 42925, kSentinel}},
1752                                                 {{625, 11374, kSentinel}},
1753                                                 {{637, 11364, kSentinel}},
1754                                                 {{647, 42929, kSentinel}},
1755                                                 {{670, 42928, kSentinel}},
1756                                                 {{837, 921, 953, 8126}},
1757                                                 {{880, 881, kSentinel}},
1758                                                 {{882, 883, kSentinel}},
1759                                                 {{886, 887, kSentinel}},
1760                                                 {{891, 1021, kSentinel}},
1761                                                 {{893, 1023, kSentinel}},
1762                                                 {{895, 1011, kSentinel}},
1763                                                 {{902, 940, kSentinel}},
1764                                                 {{904, 941, kSentinel}},
1765                                                 {{906, 943, kSentinel}},
1766                                                 {{908, 972, kSentinel}},
1767                                                 {{910, 973, kSentinel}},
1768                                                 {{911, 974, kSentinel}},
1769                                                 {{913, 945, kSentinel}},
1770                                                 {{914, 946, 976, kSentinel}},
1771                                                 {{915, 947, kSentinel}},
1772                                                 {{916, 948, kSentinel}},
1773                                                 {{917, 949, 1013, kSentinel}},
1774                                                 {{918, 950, kSentinel}},
1775                                                 {{919, 951, kSentinel}},
1776                                                 {{920, 952, 977, kSentinel}},
1777                                                 {{922, 954, 1008, kSentinel}},
1778                                                 {{923, 955, kSentinel}},
1779                                                 {{925, 957, kSentinel}},
1780                                                 {{927, 959, kSentinel}},
1781                                                 {{928, 960, 982, kSentinel}},
1782                                                 {{929, 961, 1009, kSentinel}},
1783                                                 {{931, 962, 963, kSentinel}},
1784                                                 {{932, 964, kSentinel}},
1785                                                 {{933, 965, kSentinel}},
1786                                                 {{934, 966, 981, kSentinel}},
1787                                                 {{935, 967, kSentinel}},
1788                                                 {{939, 971, kSentinel}},
1789                                                 {{975, 983, kSentinel}},
1790                                                 {{984, 985, kSentinel}},
1791                                                 {{986, 987, kSentinel}},
1792                                                 {{988, 989, kSentinel}},
1793                                                 {{990, 991, kSentinel}},
1794                                                 {{992, 993, kSentinel}},
1795                                                 {{994, 995, kSentinel}},
1796                                                 {{996, 997, kSentinel}},
1797                                                 {{998, 999, kSentinel}},
1798                                                 {{1000, 1001, kSentinel}},
1799                                                 {{1002, 1003, kSentinel}},
1800                                                 {{1004, 1005, kSentinel}},
1801                                                 {{1006, 1007, kSentinel}},
1802                                                 {{1010, 1017, kSentinel}},
1803                                                 {{1015, 1016, kSentinel}},
1804                                                 {{1018, 1019, kSentinel}},
1805                                                 {{1024, 1104, kSentinel}},
1806                                                 {{1039, 1119, kSentinel}},
1807                                                 {{1040, 1072, kSentinel}},
1808                                                 {{1071, 1103, kSentinel}},
1809                                                 {{1120, 1121, kSentinel}},
1810                                                 {{1122, 1123, kSentinel}},
1811                                                 {{1124, 1125, kSentinel}},
1812                                                 {{1126, 1127, kSentinel}},
1813                                                 {{1128, 1129, kSentinel}},
1814                                                 {{1130, 1131, kSentinel}},
1815                                                 {{1132, 1133, kSentinel}},
1816                                                 {{1134, 1135, kSentinel}},
1817                                                 {{1136, 1137, kSentinel}},
1818                                                 {{1138, 1139, kSentinel}},
1819                                                 {{1140, 1141, kSentinel}},
1820                                                 {{1142, 1143, kSentinel}},
1821                                                 {{1144, 1145, kSentinel}},
1822                                                 {{1146, 1147, kSentinel}},
1823                                                 {{1148, 1149, kSentinel}},
1824                                                 {{1150, 1151, kSentinel}},
1825                                                 {{1152, 1153, kSentinel}},
1826                                                 {{1162, 1163, kSentinel}},
1827                                                 {{1164, 1165, kSentinel}},
1828                                                 {{1166, 1167, kSentinel}},
1829                                                 {{1168, 1169, kSentinel}},
1830                                                 {{1170, 1171, kSentinel}},
1831                                                 {{1172, 1173, kSentinel}},
1832                                                 {{1174, 1175, kSentinel}},
1833                                                 {{1176, 1177, kSentinel}},
1834                                                 {{1178, 1179, kSentinel}},
1835                                                 {{1180, 1181, kSentinel}},
1836                                                 {{1182, 1183, kSentinel}},
1837                                                 {{1184, 1185, kSentinel}},
1838                                                 {{1186, 1187, kSentinel}},
1839                                                 {{1188, 1189, kSentinel}},
1840                                                 {{1190, 1191, kSentinel}},
1841                                                 {{1192, 1193, kSentinel}},
1842                                                 {{1194, 1195, kSentinel}},
1843                                                 {{1196, 1197, kSentinel}},
1844                                                 {{1198, 1199, kSentinel}},
1845                                                 {{1200, 1201, kSentinel}},
1846                                                 {{1202, 1203, kSentinel}},
1847                                                 {{1204, 1205, kSentinel}},
1848                                                 {{1206, 1207, kSentinel}},
1849                                                 {{1208, 1209, kSentinel}},
1850                                                 {{1210, 1211, kSentinel}},
1851                                                 {{1212, 1213, kSentinel}},
1852                                                 {{1214, 1215, kSentinel}},
1853                                                 {{1216, 1231, kSentinel}},
1854                                                 {{1217, 1218, kSentinel}},
1855                                                 {{1219, 1220, kSentinel}},
1856                                                 {{1221, 1222, kSentinel}},
1857                                                 {{1223, 1224, kSentinel}},
1858                                                 {{1225, 1226, kSentinel}},
1859                                                 {{1227, 1228, kSentinel}},
1860                                                 {{1229, 1230, kSentinel}},
1861                                                 {{1232, 1233, kSentinel}},
1862                                                 {{1234, 1235, kSentinel}},
1863                                                 {{1236, 1237, kSentinel}},
1864                                                 {{1238, 1239, kSentinel}},
1865                                                 {{1240, 1241, kSentinel}},
1866                                                 {{1242, 1243, kSentinel}},
1867                                                 {{1244, 1245, kSentinel}},
1868                                                 {{1246, 1247, kSentinel}},
1869                                                 {{1248, 1249, kSentinel}},
1870                                                 {{1250, 1251, kSentinel}},
1871                                                 {{1252, 1253, kSentinel}},
1872                                                 {{1254, 1255, kSentinel}},
1873                                                 {{1256, 1257, kSentinel}},
1874                                                 {{1258, 1259, kSentinel}},
1875                                                 {{1260, 1261, kSentinel}},
1876                                                 {{1262, 1263, kSentinel}},
1877                                                 {{1264, 1265, kSentinel}},
1878                                                 {{1266, 1267, kSentinel}},
1879                                                 {{1268, 1269, kSentinel}},
1880                                                 {{1270, 1271, kSentinel}},
1881                                                 {{1272, 1273, kSentinel}},
1882                                                 {{1274, 1275, kSentinel}},
1883                                                 {{1276, 1277, kSentinel}},
1884                                                 {{1278, 1279, kSentinel}},
1885                                                 {{1280, 1281, kSentinel}},
1886                                                 {{1282, 1283, kSentinel}},
1887                                                 {{1284, 1285, kSentinel}},
1888                                                 {{1286, 1287, kSentinel}},
1889                                                 {{1288, 1289, kSentinel}},
1890                                                 {{1290, 1291, kSentinel}},
1891                                                 {{1292, 1293, kSentinel}},
1892                                                 {{1294, 1295, kSentinel}},
1893                                                 {{1296, 1297, kSentinel}},
1894                                                 {{1298, 1299, kSentinel}},
1895                                                 {{1300, 1301, kSentinel}},
1896                                                 {{1302, 1303, kSentinel}},
1897                                                 {{1304, 1305, kSentinel}},
1898                                                 {{1306, 1307, kSentinel}},
1899                                                 {{1308, 1309, kSentinel}},
1900                                                 {{1310, 1311, kSentinel}},
1901                                                 {{1312, 1313, kSentinel}},
1902                                                 {{1314, 1315, kSentinel}},
1903                                                 {{1316, 1317, kSentinel}},
1904                                                 {{1318, 1319, kSentinel}},
1905                                                 {{1320, 1321, kSentinel}},
1906                                                 {{1322, 1323, kSentinel}},
1907                                                 {{1324, 1325, kSentinel}},
1908                                                 {{1326, 1327, kSentinel}},
1909                                                 {{1329, 1377, kSentinel}},
1910                                                 {{1366, 1414, kSentinel}},
1911                                                 {{4256, 11520, kSentinel}},
1912                                                 {{4293, 11557, kSentinel}},
1913                                                 {{4295, 11559, kSentinel}},
1914                                                 {{4301, 11565, kSentinel}},
1915                                                 {{7545, 42877, kSentinel}},
1916                                                 {{7549, 11363, kSentinel}},
1917                                                 {{7680, 7681, kSentinel}},
1918                                                 {{7682, 7683, kSentinel}},
1919                                                 {{7684, 7685, kSentinel}},
1920                                                 {{7686, 7687, kSentinel}},
1921                                                 {{7688, 7689, kSentinel}},
1922                                                 {{7690, 7691, kSentinel}},
1923                                                 {{7692, 7693, kSentinel}},
1924                                                 {{7694, 7695, kSentinel}},
1925                                                 {{7696, 7697, kSentinel}},
1926                                                 {{7698, 7699, kSentinel}},
1927                                                 {{7700, 7701, kSentinel}},
1928                                                 {{7702, 7703, kSentinel}},
1929                                                 {{7704, 7705, kSentinel}},
1930                                                 {{7706, 7707, kSentinel}},
1931                                                 {{7708, 7709, kSentinel}},
1932                                                 {{7710, 7711, kSentinel}},
1933                                                 {{7712, 7713, kSentinel}},
1934                                                 {{7714, 7715, kSentinel}},
1935                                                 {{7716, 7717, kSentinel}},
1936                                                 {{7718, 7719, kSentinel}},
1937                                                 {{7720, 7721, kSentinel}},
1938                                                 {{7722, 7723, kSentinel}},
1939                                                 {{7724, 7725, kSentinel}},
1940                                                 {{7726, 7727, kSentinel}},
1941                                                 {{7728, 7729, kSentinel}},
1942                                                 {{7730, 7731, kSentinel}},
1943                                                 {{7732, 7733, kSentinel}},
1944                                                 {{7734, 7735, kSentinel}},
1945                                                 {{7736, 7737, kSentinel}},
1946                                                 {{7738, 7739, kSentinel}},
1947                                                 {{7740, 7741, kSentinel}},
1948                                                 {{7742, 7743, kSentinel}},
1949                                                 {{7744, 7745, kSentinel}},
1950                                                 {{7746, 7747, kSentinel}},
1951                                                 {{7748, 7749, kSentinel}},
1952                                                 {{7750, 7751, kSentinel}},
1953                                                 {{7752, 7753, kSentinel}},
1954                                                 {{7754, 7755, kSentinel}},
1955                                                 {{7756, 7757, kSentinel}},
1956                                                 {{7758, 7759, kSentinel}},
1957                                                 {{7760, 7761, kSentinel}},
1958                                                 {{7762, 7763, kSentinel}},
1959                                                 {{7764, 7765, kSentinel}},
1960                                                 {{7766, 7767, kSentinel}},
1961                                                 {{7768, 7769, kSentinel}},
1962                                                 {{7770, 7771, kSentinel}},
1963                                                 {{7772, 7773, kSentinel}},
1964                                                 {{7774, 7775, kSentinel}},
1965                                                 {{7776, 7777, 7835, kSentinel}},
1966                                                 {{7778, 7779, kSentinel}},
1967                                                 {{7780, 7781, kSentinel}},
1968                                                 {{7782, 7783, kSentinel}},
1969                                                 {{7784, 7785, kSentinel}},
1970                                                 {{7786, 7787, kSentinel}},
1971                                                 {{7788, 7789, kSentinel}},
1972                                                 {{7790, 7791, kSentinel}},
1973                                                 {{7792, 7793, kSentinel}},
1974                                                 {{7794, 7795, kSentinel}},
1975                                                 {{7796, 7797, kSentinel}},
1976                                                 {{7798, 7799, kSentinel}},
1977                                                 {{7800, 7801, kSentinel}},
1978                                                 {{7802, 7803, kSentinel}},
1979                                                 {{7804, 7805, kSentinel}},
1980                                                 {{7806, 7807, kSentinel}},
1981                                                 {{7808, 7809, kSentinel}},
1982                                                 {{7810, 7811, kSentinel}},
1983                                                 {{7812, 7813, kSentinel}},
1984                                                 {{7814, 7815, kSentinel}},
1985                                                 {{7816, 7817, kSentinel}},
1986                                                 {{7818, 7819, kSentinel}},
1987                                                 {{7820, 7821, kSentinel}},
1988                                                 {{7822, 7823, kSentinel}},
1989                                                 {{7824, 7825, kSentinel}},
1990                                                 {{7826, 7827, kSentinel}},
1991                                                 {{7828, 7829, kSentinel}},
1992                                                 {{7840, 7841, kSentinel}},
1993                                                 {{7842, 7843, kSentinel}},
1994                                                 {{7844, 7845, kSentinel}},
1995                                                 {{7846, 7847, kSentinel}},
1996                                                 {{7848, 7849, kSentinel}},
1997                                                 {{7850, 7851, kSentinel}},
1998                                                 {{7852, 7853, kSentinel}},
1999                                                 {{7854, 7855, kSentinel}},
2000                                                 {{7856, 7857, kSentinel}},
2001                                                 {{7858, 7859, kSentinel}},
2002                                                 {{7860, 7861, kSentinel}},
2003                                                 {{7862, 7863, kSentinel}},
2004                                                 {{7864, 7865, kSentinel}},
2005                                                 {{7866, 7867, kSentinel}},
2006                                                 {{7868, 7869, kSentinel}},
2007                                                 {{7870, 7871, kSentinel}},
2008                                                 {{7872, 7873, kSentinel}},
2009                                                 {{7874, 7875, kSentinel}},
2010                                                 {{7876, 7877, kSentinel}},
2011                                                 {{7878, 7879, kSentinel}},
2012                                                 {{7880, 7881, kSentinel}},
2013                                                 {{7882, 7883, kSentinel}},
2014                                                 {{7884, 7885, kSentinel}},
2015                                                 {{7886, 7887, kSentinel}},
2016                                                 {{7888, 7889, kSentinel}},
2017                                                 {{7890, 7891, kSentinel}},
2018                                                 {{7892, 7893, kSentinel}},
2019                                                 {{7894, 7895, kSentinel}},
2020                                                 {{7896, 7897, kSentinel}},
2021                                                 {{7898, 7899, kSentinel}},
2022                                                 {{7900, 7901, kSentinel}},
2023                                                 {{7902, 7903, kSentinel}},
2024                                                 {{7904, 7905, kSentinel}},
2025                                                 {{7906, 7907, kSentinel}},
2026                                                 {{7908, 7909, kSentinel}},
2027                                                 {{7910, 7911, kSentinel}},
2028                                                 {{7912, 7913, kSentinel}},
2029                                                 {{7914, 7915, kSentinel}},
2030                                                 {{7916, 7917, kSentinel}},
2031                                                 {{7918, 7919, kSentinel}},
2032                                                 {{7920, 7921, kSentinel}},
2033                                                 {{7922, 7923, kSentinel}},
2034                                                 {{7924, 7925, kSentinel}},
2035                                                 {{7926, 7927, kSentinel}},
2036                                                 {{7928, 7929, kSentinel}},
2037                                                 {{7930, 7931, kSentinel}},
2038                                                 {{7932, 7933, kSentinel}},
2039                                                 {{7934, 7935, kSentinel}},
2040                                                 {{7936, 7944, kSentinel}},
2041                                                 {{7943, 7951, kSentinel}},
2042                                                 {{7952, 7960, kSentinel}},
2043                                                 {{7957, 7965, kSentinel}},
2044                                                 {{7968, 7976, kSentinel}},
2045                                                 {{7975, 7983, kSentinel}},
2046                                                 {{7984, 7992, kSentinel}},
2047                                                 {{7991, 7999, kSentinel}},
2048                                                 {{8000, 8008, kSentinel}},
2049                                                 {{8005, 8013, kSentinel}},
2050                                                 {{8017, 8025, kSentinel}},
2051                                                 {{8019, 8027, kSentinel}},
2052                                                 {{8021, 8029, kSentinel}},
2053                                                 {{8023, 8031, kSentinel}},
2054                                                 {{8032, 8040, kSentinel}},
2055                                                 {{8039, 8047, kSentinel}},
2056                                                 {{8048, 8122, kSentinel}},
2057                                                 {{8049, 8123, kSentinel}},
2058                                                 {{8050, 8136, kSentinel}},
2059                                                 {{8053, 8139, kSentinel}},
2060                                                 {{8054, 8154, kSentinel}},
2061                                                 {{8055, 8155, kSentinel}},
2062                                                 {{8056, 8184, kSentinel}},
2063                                                 {{8057, 8185, kSentinel}},
2064                                                 {{8058, 8170, kSentinel}},
2065                                                 {{8059, 8171, kSentinel}},
2066                                                 {{8060, 8186, kSentinel}},
2067                                                 {{8061, 8187, kSentinel}},
2068                                                 {{8112, 8120, kSentinel}},
2069                                                 {{8113, 8121, kSentinel}},
2070                                                 {{8144, 8152, kSentinel}},
2071                                                 {{8145, 8153, kSentinel}},
2072                                                 {{8160, 8168, kSentinel}},
2073                                                 {{8161, 8169, kSentinel}},
2074                                                 {{8165, 8172, kSentinel}},
2075                                                 {{kSentinel}}};
2076 static const uint16_t kEcma262UnCanonicalizeTable0Size = 1005;
2077 static const int32_t kEcma262UnCanonicalizeTable0[2010] = {
2078     1073741889, 1,    90,         5,    1073741921, 1,    122,        5,
2079     181,        9,    1073742016, 13,   214,        17,   1073742040, 21,
2080     222,        25,   1073742048, 13,   246,        17,   1073742072, 21,
2081     254,        25,   255,        29,   256,        33,   257,        33,
2082     258,        37,   259,        37,   260,        41,   261,        41,
2083     262,        45,   263,        45,   264,        49,   265,        49,
2084     266,        53,   267,        53,   268,        57,   269,        57,
2085     270,        61,   271,        61,   272,        65,   273,        65,
2086     274,        69,   275,        69,   276,        73,   277,        73,
2087     278,        77,   279,        77,   280,        81,   281,        81,
2088     282,        85,   283,        85,   284,        89,   285,        89,
2089     286,        93,   287,        93,   288,        97,   289,        97,
2090     290,        101,  291,        101,  292,        105,  293,        105,
2091     294,        109,  295,        109,  296,        113,  297,        113,
2092     298,        117,  299,        117,  300,        121,  301,        121,
2093     302,        125,  303,        125,  306,        129,  307,        129,
2094     308,        133,  309,        133,  310,        137,  311,        137,
2095     313,        141,  314,        141,  315,        145,  316,        145,
2096     317,        149,  318,        149,  319,        153,  320,        153,
2097     321,        157,  322,        157,  323,        161,  324,        161,
2098     325,        165,  326,        165,  327,        169,  328,        169,
2099     330,        173,  331,        173,  332,        177,  333,        177,
2100     334,        181,  335,        181,  336,        185,  337,        185,
2101     338,        189,  339,        189,  340,        193,  341,        193,
2102     342,        197,  343,        197,  344,        201,  345,        201,
2103     346,        205,  347,        205,  348,        209,  349,        209,
2104     350,        213,  351,        213,  352,        217,  353,        217,
2105     354,        221,  355,        221,  356,        225,  357,        225,
2106     358,        229,  359,        229,  360,        233,  361,        233,
2107     362,        237,  363,        237,  364,        241,  365,        241,
2108     366,        245,  367,        245,  368,        249,  369,        249,
2109     370,        253,  371,        253,  372,        257,  373,        257,
2110     374,        261,  375,        261,  376,        29,   377,        265,
2111     378,        265,  379,        269,  380,        269,  381,        273,
2112     382,        273,  384,        277,  385,        281,  386,        285,
2113     387,        285,  388,        289,  389,        289,  390,        293,
2114     391,        297,  392,        297,  1073742217, 301,  394,        305,
2115     395,        309,  396,        309,  398,        313,  399,        317,
2116     400,        321,  401,        325,  402,        325,  403,        329,
2117     404,        333,  405,        337,  406,        341,  407,        345,
2118     408,        349,  409,        349,  410,        353,  412,        357,
2119     413,        361,  414,        365,  415,        369,  416,        373,
2120     417,        373,  418,        377,  419,        377,  420,        381,
2121     421,        381,  422,        385,  423,        389,  424,        389,
2122     425,        393,  428,        397,  429,        397,  430,        401,
2123     431,        405,  432,        405,  1073742257, 409,  434,        413,
2124     435,        417,  436,        417,  437,        421,  438,        421,
2125     439,        425,  440,        429,  441,        429,  444,        433,
2126     445,        433,  447,        437,  452,        441,  453,        441,
2127     454,        441,  455,        445,  456,        445,  457,        445,
2128     458,        449,  459,        449,  460,        449,  461,        453,
2129     462,        453,  463,        457,  464,        457,  465,        461,
2130     466,        461,  467,        465,  468,        465,  469,        469,
2131     470,        469,  471,        473,  472,        473,  473,        477,
2132     474,        477,  475,        481,  476,        481,  477,        313,
2133     478,        485,  479,        485,  480,        489,  481,        489,
2134     482,        493,  483,        493,  484,        497,  485,        497,
2135     486,        501,  487,        501,  488,        505,  489,        505,
2136     490,        509,  491,        509,  492,        513,  493,        513,
2137     494,        517,  495,        517,  497,        521,  498,        521,
2138     499,        521,  500,        525,  501,        525,  502,        337,
2139     503,        437,  504,        529,  505,        529,  506,        533,
2140     507,        533,  508,        537,  509,        537,  510,        541,
2141     511,        541,  512,        545,  513,        545,  514,        549,
2142     515,        549,  516,        553,  517,        553,  518,        557,
2143     519,        557,  520,        561,  521,        561,  522,        565,
2144     523,        565,  524,        569,  525,        569,  526,        573,
2145     527,        573,  528,        577,  529,        577,  530,        581,
2146     531,        581,  532,        585,  533,        585,  534,        589,
2147     535,        589,  536,        593,  537,        593,  538,        597,
2148     539,        597,  540,        601,  541,        601,  542,        605,
2149     543,        605,  544,        365,  546,        609,  547,        609,
2150     548,        613,  549,        613,  550,        617,  551,        617,
2151     552,        621,  553,        621,  554,        625,  555,        625,
2152     556,        629,  557,        629,  558,        633,  559,        633,
2153     560,        637,  561,        637,  562,        641,  563,        641,
2154     570,        645,  571,        649,  572,        649,  573,        353,
2155     574,        653,  1073742399, 657,  576,        661,  577,        665,
2156     578,        665,  579,        277,  580,        669,  581,        673,
2157     582,        677,  583,        677,  584,        681,  585,        681,
2158     586,        685,  587,        685,  588,        689,  589,        689,
2159     590,        693,  591,        693,  592,        697,  593,        701,
2160     594,        705,  595,        281,  596,        293,  1073742422, 301,
2161     599,        305,  601,        317,  603,        321,  604,        709,
2162     608,        329,  609,        713,  611,        333,  613,        717,
2163     614,        721,  616,        345,  617,        341,  619,        725,
2164     620,        729,  623,        357,  625,        733,  626,        361,
2165     629,        369,  637,        737,  640,        385,  643,        393,
2166     647,        741,  648,        401,  649,        669,  1073742474, 409,
2167     651,        413,  652,        673,  658,        425,  670,        745,
2168     837,        749,  880,        753,  881,        753,  882,        757,
2169     883,        757,  886,        761,  887,        761,  1073742715, 765,
2170     893,        769,  895,        773,  902,        777,  1073742728, 781,
2171     906,        785,  908,        789,  1073742734, 793,  911,        797,
2172     913,        801,  914,        805,  1073742739, 809,  916,        813,
2173     917,        817,  1073742742, 821,  919,        825,  920,        829,
2174     921,        749,  922,        833,  923,        837,  924,        9,
2175     1073742749, 841,  927,        845,  928,        849,  929,        853,
2176     931,        857,  1073742756, 861,  933,        865,  934,        869,
2177     1073742759, 873,  939,        877,  940,        777,  1073742765, 781,
2178     943,        785,  945,        801,  946,        805,  1073742771, 809,
2179     948,        813,  949,        817,  1073742774, 821,  951,        825,
2180     952,        829,  953,        749,  954,        833,  955,        837,
2181     956,        9,    1073742781, 841,  959,        845,  960,        849,
2182     961,        853,  962,        857,  963,        857,  1073742788, 861,
2183     965,        865,  966,        869,  1073742791, 873,  971,        877,
2184     972,        789,  1073742797, 793,  974,        797,  975,        881,
2185     976,        805,  977,        829,  981,        869,  982,        849,
2186     983,        881,  984,        885,  985,        885,  986,        889,
2187     987,        889,  988,        893,  989,        893,  990,        897,
2188     991,        897,  992,        901,  993,        901,  994,        905,
2189     995,        905,  996,        909,  997,        909,  998,        913,
2190     999,        913,  1000,       917,  1001,       917,  1002,       921,
2191     1003,       921,  1004,       925,  1005,       925,  1006,       929,
2192     1007,       929,  1008,       833,  1009,       853,  1010,       933,
2193     1011,       773,  1013,       817,  1015,       937,  1016,       937,
2194     1017,       933,  1018,       941,  1019,       941,  1073742845, 765,
2195     1023,       769,  1073742848, 945,  1039,       949,  1073742864, 953,
2196     1071,       957,  1073742896, 953,  1103,       957,  1073742928, 945,
2197     1119,       949,  1120,       961,  1121,       961,  1122,       965,
2198     1123,       965,  1124,       969,  1125,       969,  1126,       973,
2199     1127,       973,  1128,       977,  1129,       977,  1130,       981,
2200     1131,       981,  1132,       985,  1133,       985,  1134,       989,
2201     1135,       989,  1136,       993,  1137,       993,  1138,       997,
2202     1139,       997,  1140,       1001, 1141,       1001, 1142,       1005,
2203     1143,       1005, 1144,       1009, 1145,       1009, 1146,       1013,
2204     1147,       1013, 1148,       1017, 1149,       1017, 1150,       1021,
2205     1151,       1021, 1152,       1025, 1153,       1025, 1162,       1029,
2206     1163,       1029, 1164,       1033, 1165,       1033, 1166,       1037,
2207     1167,       1037, 1168,       1041, 1169,       1041, 1170,       1045,
2208     1171,       1045, 1172,       1049, 1173,       1049, 1174,       1053,
2209     1175,       1053, 1176,       1057, 1177,       1057, 1178,       1061,
2210     1179,       1061, 1180,       1065, 1181,       1065, 1182,       1069,
2211     1183,       1069, 1184,       1073, 1185,       1073, 1186,       1077,
2212     1187,       1077, 1188,       1081, 1189,       1081, 1190,       1085,
2213     1191,       1085, 1192,       1089, 1193,       1089, 1194,       1093,
2214     1195,       1093, 1196,       1097, 1197,       1097, 1198,       1101,
2215     1199,       1101, 1200,       1105, 1201,       1105, 1202,       1109,
2216     1203,       1109, 1204,       1113, 1205,       1113, 1206,       1117,
2217     1207,       1117, 1208,       1121, 1209,       1121, 1210,       1125,
2218     1211,       1125, 1212,       1129, 1213,       1129, 1214,       1133,
2219     1215,       1133, 1216,       1137, 1217,       1141, 1218,       1141,
2220     1219,       1145, 1220,       1145, 1221,       1149, 1222,       1149,
2221     1223,       1153, 1224,       1153, 1225,       1157, 1226,       1157,
2222     1227,       1161, 1228,       1161, 1229,       1165, 1230,       1165,
2223     1231,       1137, 1232,       1169, 1233,       1169, 1234,       1173,
2224     1235,       1173, 1236,       1177, 1237,       1177, 1238,       1181,
2225     1239,       1181, 1240,       1185, 1241,       1185, 1242,       1189,
2226     1243,       1189, 1244,       1193, 1245,       1193, 1246,       1197,
2227     1247,       1197, 1248,       1201, 1249,       1201, 1250,       1205,
2228     1251,       1205, 1252,       1209, 1253,       1209, 1254,       1213,
2229     1255,       1213, 1256,       1217, 1257,       1217, 1258,       1221,
2230     1259,       1221, 1260,       1225, 1261,       1225, 1262,       1229,
2231     1263,       1229, 1264,       1233, 1265,       1233, 1266,       1237,
2232     1267,       1237, 1268,       1241, 1269,       1241, 1270,       1245,
2233     1271,       1245, 1272,       1249, 1273,       1249, 1274,       1253,
2234     1275,       1253, 1276,       1257, 1277,       1257, 1278,       1261,
2235     1279,       1261, 1280,       1265, 1281,       1265, 1282,       1269,
2236     1283,       1269, 1284,       1273, 1285,       1273, 1286,       1277,
2237     1287,       1277, 1288,       1281, 1289,       1281, 1290,       1285,
2238     1291,       1285, 1292,       1289, 1293,       1289, 1294,       1293,
2239     1295,       1293, 1296,       1297, 1297,       1297, 1298,       1301,
2240     1299,       1301, 1300,       1305, 1301,       1305, 1302,       1309,
2241     1303,       1309, 1304,       1313, 1305,       1313, 1306,       1317,
2242     1307,       1317, 1308,       1321, 1309,       1321, 1310,       1325,
2243     1311,       1325, 1312,       1329, 1313,       1329, 1314,       1333,
2244     1315,       1333, 1316,       1337, 1317,       1337, 1318,       1341,
2245     1319,       1341, 1320,       1345, 1321,       1345, 1322,       1349,
2246     1323,       1349, 1324,       1353, 1325,       1353, 1326,       1357,
2247     1327,       1357, 1073743153, 1361, 1366,       1365, 1073743201, 1361,
2248     1414,       1365, 1073746080, 1369, 4293,       1373, 4295,       1377,
2249     4301,       1381, 7545,       1385, 7549,       1389, 7680,       1393,
2250     7681,       1393, 7682,       1397, 7683,       1397, 7684,       1401,
2251     7685,       1401, 7686,       1405, 7687,       1405, 7688,       1409,
2252     7689,       1409, 7690,       1413, 7691,       1413, 7692,       1417,
2253     7693,       1417, 7694,       1421, 7695,       1421, 7696,       1425,
2254     7697,       1425, 7698,       1429, 7699,       1429, 7700,       1433,
2255     7701,       1433, 7702,       1437, 7703,       1437, 7704,       1441,
2256     7705,       1441, 7706,       1445, 7707,       1445, 7708,       1449,
2257     7709,       1449, 7710,       1453, 7711,       1453, 7712,       1457,
2258     7713,       1457, 7714,       1461, 7715,       1461, 7716,       1465,
2259     7717,       1465, 7718,       1469, 7719,       1469, 7720,       1473,
2260     7721,       1473, 7722,       1477, 7723,       1477, 7724,       1481,
2261     7725,       1481, 7726,       1485, 7727,       1485, 7728,       1489,
2262     7729,       1489, 7730,       1493, 7731,       1493, 7732,       1497,
2263     7733,       1497, 7734,       1501, 7735,       1501, 7736,       1505,
2264     7737,       1505, 7738,       1509, 7739,       1509, 7740,       1513,
2265     7741,       1513, 7742,       1517, 7743,       1517, 7744,       1521,
2266     7745,       1521, 7746,       1525, 7747,       1525, 7748,       1529,
2267     7749,       1529, 7750,       1533, 7751,       1533, 7752,       1537,
2268     7753,       1537, 7754,       1541, 7755,       1541, 7756,       1545,
2269     7757,       1545, 7758,       1549, 7759,       1549, 7760,       1553,
2270     7761,       1553, 7762,       1557, 7763,       1557, 7764,       1561,
2271     7765,       1561, 7766,       1565, 7767,       1565, 7768,       1569,
2272     7769,       1569, 7770,       1573, 7771,       1573, 7772,       1577,
2273     7773,       1577, 7774,       1581, 7775,       1581, 7776,       1585,
2274     7777,       1585, 7778,       1589, 7779,       1589, 7780,       1593,
2275     7781,       1593, 7782,       1597, 7783,       1597, 7784,       1601,
2276     7785,       1601, 7786,       1605, 7787,       1605, 7788,       1609,
2277     7789,       1609, 7790,       1613, 7791,       1613, 7792,       1617,
2278     7793,       1617, 7794,       1621, 7795,       1621, 7796,       1625,
2279     7797,       1625, 7798,       1629, 7799,       1629, 7800,       1633,
2280     7801,       1633, 7802,       1637, 7803,       1637, 7804,       1641,
2281     7805,       1641, 7806,       1645, 7807,       1645, 7808,       1649,
2282     7809,       1649, 7810,       1653, 7811,       1653, 7812,       1657,
2283     7813,       1657, 7814,       1661, 7815,       1661, 7816,       1665,
2284     7817,       1665, 7818,       1669, 7819,       1669, 7820,       1673,
2285     7821,       1673, 7822,       1677, 7823,       1677, 7824,       1681,
2286     7825,       1681, 7826,       1685, 7827,       1685, 7828,       1689,
2287     7829,       1689, 7835,       1585, 7840,       1693, 7841,       1693,
2288     7842,       1697, 7843,       1697, 7844,       1701, 7845,       1701,
2289     7846,       1705, 7847,       1705, 7848,       1709, 7849,       1709,
2290     7850,       1713, 7851,       1713, 7852,       1717, 7853,       1717,
2291     7854,       1721, 7855,       1721, 7856,       1725, 7857,       1725,
2292     7858,       1729, 7859,       1729, 7860,       1733, 7861,       1733,
2293     7862,       1737, 7863,       1737, 7864,       1741, 7865,       1741,
2294     7866,       1745, 7867,       1745, 7868,       1749, 7869,       1749,
2295     7870,       1753, 7871,       1753, 7872,       1757, 7873,       1757,
2296     7874,       1761, 7875,       1761, 7876,       1765, 7877,       1765,
2297     7878,       1769, 7879,       1769, 7880,       1773, 7881,       1773,
2298     7882,       1777, 7883,       1777, 7884,       1781, 7885,       1781,
2299     7886,       1785, 7887,       1785, 7888,       1789, 7889,       1789,
2300     7890,       1793, 7891,       1793, 7892,       1797, 7893,       1797,
2301     7894,       1801, 7895,       1801, 7896,       1805, 7897,       1805,
2302     7898,       1809, 7899,       1809, 7900,       1813, 7901,       1813,
2303     7902,       1817, 7903,       1817, 7904,       1821, 7905,       1821,
2304     7906,       1825, 7907,       1825, 7908,       1829, 7909,       1829,
2305     7910,       1833, 7911,       1833, 7912,       1837, 7913,       1837,
2306     7914,       1841, 7915,       1841, 7916,       1845, 7917,       1845,
2307     7918,       1849, 7919,       1849, 7920,       1853, 7921,       1853,
2308     7922,       1857, 7923,       1857, 7924,       1861, 7925,       1861,
2309     7926,       1865, 7927,       1865, 7928,       1869, 7929,       1869,
2310     7930,       1873, 7931,       1873, 7932,       1877, 7933,       1877,
2311     7934,       1881, 7935,       1881, 1073749760, 1885, 7943,       1889,
2312     1073749768, 1885, 7951,       1889, 1073749776, 1893, 7957,       1897,
2313     1073749784, 1893, 7965,       1897, 1073749792, 1901, 7975,       1905,
2314     1073749800, 1901, 7983,       1905, 1073749808, 1909, 7991,       1913,
2315     1073749816, 1909, 7999,       1913, 1073749824, 1917, 8005,       1921,
2316     1073749832, 1917, 8013,       1921, 8017,       1925, 8019,       1929,
2317     8021,       1933, 8023,       1937, 8025,       1925, 8027,       1929,
2318     8029,       1933, 8031,       1937, 1073749856, 1941, 8039,       1945,
2319     1073749864, 1941, 8047,       1945, 1073749872, 1949, 8049,       1953,
2320     1073749874, 1957, 8053,       1961, 1073749878, 1965, 8055,       1969,
2321     1073749880, 1973, 8057,       1977, 1073749882, 1981, 8059,       1985,
2322     1073749884, 1989, 8061,       1993, 1073749936, 1997, 8113,       2001,
2323     1073749944, 1997, 8121,       2001, 1073749946, 1949, 8123,       1953,
2324     8126,       749,  1073749960, 1957, 8139,       1961, 1073749968, 2005,
2325     8145,       2009, 1073749976, 2005, 8153,       2009, 1073749978, 1965,
2326     8155,       1969, 1073749984, 2013, 8161,       2017, 8165,       2021,
2327     1073749992, 2013, 8169,       2017, 1073749994, 1981, 8171,       1985,
2328     8172,       2021, 1073750008, 1973, 8185,       1977, 1073750010, 1989,
2329     8187,       1993};
2330 static const uint16_t kEcma262UnCanonicalizeMultiStrings0Size = 507;
2331 static const MultiCharacterSpecialCase<2>
2332     kEcma262UnCanonicalizeMultiStrings1[83] = {
2333         {{8498, 8526}},   {{8544, 8560}},   {{8559, 8575}},   {{8579, 8580}},
2334         {{9398, 9424}},   {{9423, 9449}},   {{11264, 11312}}, {{11310, 11358}},
2335         {{11360, 11361}}, {{619, 11362}},   {{7549, 11363}},  {{637, 11364}},
2336         {{570, 11365}},   {{574, 11366}},   {{11367, 11368}}, {{11369, 11370}},
2337         {{11371, 11372}}, {{593, 11373}},   {{625, 11374}},   {{592, 11375}},
2338         {{594, 11376}},   {{11378, 11379}}, {{11381, 11382}}, {{575, 11390}},
2339         {{576, 11391}},   {{11392, 11393}}, {{11394, 11395}}, {{11396, 11397}},
2340         {{11398, 11399}}, {{11400, 11401}}, {{11402, 11403}}, {{11404, 11405}},
2341         {{11406, 11407}}, {{11408, 11409}}, {{11410, 11411}}, {{11412, 11413}},
2342         {{11414, 11415}}, {{11416, 11417}}, {{11418, 11419}}, {{11420, 11421}},
2343         {{11422, 11423}}, {{11424, 11425}}, {{11426, 11427}}, {{11428, 11429}},
2344         {{11430, 11431}}, {{11432, 11433}}, {{11434, 11435}}, {{11436, 11437}},
2345         {{11438, 11439}}, {{11440, 11441}}, {{11442, 11443}}, {{11444, 11445}},
2346         {{11446, 11447}}, {{11448, 11449}}, {{11450, 11451}}, {{11452, 11453}},
2347         {{11454, 11455}}, {{11456, 11457}}, {{11458, 11459}}, {{11460, 11461}},
2348         {{11462, 11463}}, {{11464, 11465}}, {{11466, 11467}}, {{11468, 11469}},
2349         {{11470, 11471}}, {{11472, 11473}}, {{11474, 11475}}, {{11476, 11477}},
2350         {{11478, 11479}}, {{11480, 11481}}, {{11482, 11483}}, {{11484, 11485}},
2351         {{11486, 11487}}, {{11488, 11489}}, {{11490, 11491}}, {{11499, 11500}},
2352         {{11501, 11502}}, {{11506, 11507}}, {{4256, 11520}},  {{4293, 11557}},
2353         {{4295, 11559}},  {{4301, 11565}},  {{kSentinel}}};
2354 static const uint16_t kEcma262UnCanonicalizeTable1Size = 149;
2355 static const int32_t kEcma262UnCanonicalizeTable1[298] = {
2356     306,        1,   334,        1,   1073742176, 5,   367,  9,
2357     1073742192, 5,   383,        9,   387,        13,  388,  13,
2358     1073743030, 17,  1231,       21,  1073743056, 17,  1257, 21,
2359     1073744896, 25,  3118,       29,  1073744944, 25,  3166, 29,
2360     3168,       33,  3169,       33,  3170,       37,  3171, 41,
2361     3172,       45,  3173,       49,  3174,       53,  3175, 57,
2362     3176,       57,  3177,       61,  3178,       61,  3179, 65,
2363     3180,       65,  3181,       69,  3182,       73,  3183, 77,
2364     3184,       81,  3186,       85,  3187,       85,  3189, 89,
2365     3190,       89,  1073745022, 93,  3199,       97,  3200, 101,
2366     3201,       101, 3202,       105, 3203,       105, 3204, 109,
2367     3205,       109, 3206,       113, 3207,       113, 3208, 117,
2368     3209,       117, 3210,       121, 3211,       121, 3212, 125,
2369     3213,       125, 3214,       129, 3215,       129, 3216, 133,
2370     3217,       133, 3218,       137, 3219,       137, 3220, 141,
2371     3221,       141, 3222,       145, 3223,       145, 3224, 149,
2372     3225,       149, 3226,       153, 3227,       153, 3228, 157,
2373     3229,       157, 3230,       161, 3231,       161, 3232, 165,
2374     3233,       165, 3234,       169, 3235,       169, 3236, 173,
2375     3237,       173, 3238,       177, 3239,       177, 3240, 181,
2376     3241,       181, 3242,       185, 3243,       185, 3244, 189,
2377     3245,       189, 3246,       193, 3247,       193, 3248, 197,
2378     3249,       197, 3250,       201, 3251,       201, 3252, 205,
2379     3253,       205, 3254,       209, 3255,       209, 3256, 213,
2380     3257,       213, 3258,       217, 3259,       217, 3260, 221,
2381     3261,       221, 3262,       225, 3263,       225, 3264, 229,
2382     3265,       229, 3266,       233, 3267,       233, 3268, 237,
2383     3269,       237, 3270,       241, 3271,       241, 3272, 245,
2384     3273,       245, 3274,       249, 3275,       249, 3276, 253,
2385     3277,       253, 3278,       257, 3279,       257, 3280, 261,
2386     3281,       261, 3282,       265, 3283,       265, 3284, 269,
2387     3285,       269, 3286,       273, 3287,       273, 3288, 277,
2388     3289,       277, 3290,       281, 3291,       281, 3292, 285,
2389     3293,       285, 3294,       289, 3295,       289, 3296, 293,
2390     3297,       293, 3298,       297, 3299,       297, 3307, 301,
2391     3308,       301, 3309,       305, 3310,       305, 3314, 309,
2392     3315,       309, 1073745152, 313, 3365,       317, 3367, 321,
2393     3373,       325};
2394 static const uint16_t kEcma262UnCanonicalizeMultiStrings1Size = 83;
2395 static const MultiCharacterSpecialCase<2>
2396     kEcma262UnCanonicalizeMultiStrings5[104] = {
2397         {{42560, 42561}}, {{42562, 42563}}, {{42564, 42565}}, {{42566, 42567}},
2398         {{42568, 42569}}, {{42570, 42571}}, {{42572, 42573}}, {{42574, 42575}},
2399         {{42576, 42577}}, {{42578, 42579}}, {{42580, 42581}}, {{42582, 42583}},
2400         {{42584, 42585}}, {{42586, 42587}}, {{42588, 42589}}, {{42590, 42591}},
2401         {{42592, 42593}}, {{42594, 42595}}, {{42596, 42597}}, {{42598, 42599}},
2402         {{42600, 42601}}, {{42602, 42603}}, {{42604, 42605}}, {{42624, 42625}},
2403         {{42626, 42627}}, {{42628, 42629}}, {{42630, 42631}}, {{42632, 42633}},
2404         {{42634, 42635}}, {{42636, 42637}}, {{42638, 42639}}, {{42640, 42641}},
2405         {{42642, 42643}}, {{42644, 42645}}, {{42646, 42647}}, {{42648, 42649}},
2406         {{42650, 42651}}, {{42786, 42787}}, {{42788, 42789}}, {{42790, 42791}},
2407         {{42792, 42793}}, {{42794, 42795}}, {{42796, 42797}}, {{42798, 42799}},
2408         {{42802, 42803}}, {{42804, 42805}}, {{42806, 42807}}, {{42808, 42809}},
2409         {{42810, 42811}}, {{42812, 42813}}, {{42814, 42815}}, {{42816, 42817}},
2410         {{42818, 42819}}, {{42820, 42821}}, {{42822, 42823}}, {{42824, 42825}},
2411         {{42826, 42827}}, {{42828, 42829}}, {{42830, 42831}}, {{42832, 42833}},
2412         {{42834, 42835}}, {{42836, 42837}}, {{42838, 42839}}, {{42840, 42841}},
2413         {{42842, 42843}}, {{42844, 42845}}, {{42846, 42847}}, {{42848, 42849}},
2414         {{42850, 42851}}, {{42852, 42853}}, {{42854, 42855}}, {{42856, 42857}},
2415         {{42858, 42859}}, {{42860, 42861}}, {{42862, 42863}}, {{42873, 42874}},
2416         {{42875, 42876}}, {{7545, 42877}},  {{42878, 42879}}, {{42880, 42881}},
2417         {{42882, 42883}}, {{42884, 42885}}, {{42886, 42887}}, {{42891, 42892}},
2418         {{613, 42893}},   {{42896, 42897}}, {{42898, 42899}}, {{42902, 42903}},
2419         {{42904, 42905}}, {{42906, 42907}}, {{42908, 42909}}, {{42910, 42911}},
2420         {{42912, 42913}}, {{42914, 42915}}, {{42916, 42917}}, {{42918, 42919}},
2421         {{42920, 42921}}, {{614, 42922}},   {{604, 42923}},   {{609, 42924}},
2422         {{620, 42925}},   {{670, 42928}},   {{647, 42929}},   {{kSentinel}}};
2423 static const uint16_t kEcma262UnCanonicalizeTable5Size = 198;
2424 static const int32_t kEcma262UnCanonicalizeTable5[396] = {
2425     1600, 1,   1601, 1,   1602, 5,   1603, 5,   1604, 9,   1605, 9,   1606, 13,
2426     1607, 13,  1608, 17,  1609, 17,  1610, 21,  1611, 21,  1612, 25,  1613, 25,
2427     1614, 29,  1615, 29,  1616, 33,  1617, 33,  1618, 37,  1619, 37,  1620, 41,
2428     1621, 41,  1622, 45,  1623, 45,  1624, 49,  1625, 49,  1626, 53,  1627, 53,
2429     1628, 57,  1629, 57,  1630, 61,  1631, 61,  1632, 65,  1633, 65,  1634, 69,
2430     1635, 69,  1636, 73,  1637, 73,  1638, 77,  1639, 77,  1640, 81,  1641, 81,
2431     1642, 85,  1643, 85,  1644, 89,  1645, 89,  1664, 93,  1665, 93,  1666, 97,
2432     1667, 97,  1668, 101, 1669, 101, 1670, 105, 1671, 105, 1672, 109, 1673, 109,
2433     1674, 113, 1675, 113, 1676, 117, 1677, 117, 1678, 121, 1679, 121, 1680, 125,
2434     1681, 125, 1682, 129, 1683, 129, 1684, 133, 1685, 133, 1686, 137, 1687, 137,
2435     1688, 141, 1689, 141, 1690, 145, 1691, 145, 1826, 149, 1827, 149, 1828, 153,
2436     1829, 153, 1830, 157, 1831, 157, 1832, 161, 1833, 161, 1834, 165, 1835, 165,
2437     1836, 169, 1837, 169, 1838, 173, 1839, 173, 1842, 177, 1843, 177, 1844, 181,
2438     1845, 181, 1846, 185, 1847, 185, 1848, 189, 1849, 189, 1850, 193, 1851, 193,
2439     1852, 197, 1853, 197, 1854, 201, 1855, 201, 1856, 205, 1857, 205, 1858, 209,
2440     1859, 209, 1860, 213, 1861, 213, 1862, 217, 1863, 217, 1864, 221, 1865, 221,
2441     1866, 225, 1867, 225, 1868, 229, 1869, 229, 1870, 233, 1871, 233, 1872, 237,
2442     1873, 237, 1874, 241, 1875, 241, 1876, 245, 1877, 245, 1878, 249, 1879, 249,
2443     1880, 253, 1881, 253, 1882, 257, 1883, 257, 1884, 261, 1885, 261, 1886, 265,
2444     1887, 265, 1888, 269, 1889, 269, 1890, 273, 1891, 273, 1892, 277, 1893, 277,
2445     1894, 281, 1895, 281, 1896, 285, 1897, 285, 1898, 289, 1899, 289, 1900, 293,
2446     1901, 293, 1902, 297, 1903, 297, 1913, 301, 1914, 301, 1915, 305, 1916, 305,
2447     1917, 309, 1918, 313, 1919, 313, 1920, 317, 1921, 317, 1922, 321, 1923, 321,
2448     1924, 325, 1925, 325, 1926, 329, 1927, 329, 1931, 333, 1932, 333, 1933, 337,
2449     1936, 341, 1937, 341, 1938, 345, 1939, 345, 1942, 349, 1943, 349, 1944, 353,
2450     1945, 353, 1946, 357, 1947, 357, 1948, 361, 1949, 361, 1950, 365, 1951, 365,
2451     1952, 369, 1953, 369, 1954, 373, 1955, 373, 1956, 377, 1957, 377, 1958, 381,
2452     1959, 381, 1960, 385, 1961, 385, 1962, 389, 1963, 393, 1964, 397, 1965, 401,
2453     1968, 405, 1969, 409};
2454 static const uint16_t kEcma262UnCanonicalizeMultiStrings5Size = 104;
2455 static const MultiCharacterSpecialCase<2>
2456     kEcma262UnCanonicalizeMultiStrings7[3] = {
2457         {{65313, 65345}}, {{65338, 65370}}, {{kSentinel}}};
2458 static const uint16_t kEcma262UnCanonicalizeTable7Size = 4;
2459 static const int32_t kEcma262UnCanonicalizeTable7[8] = {1073749793, 1, 7994, 5,
2460                                                         1073749825, 1, 8026, 5};
2461 static const uint16_t kEcma262UnCanonicalizeMultiStrings7Size = 3;
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)2462 int Ecma262UnCanonicalize::Convert(uchar c, uchar n, uchar* result,
2463                                    bool* allow_caching_ptr) {
2464   int chunk_index = c >> 13;
2465   switch (chunk_index) {
2466     case 0:
2467       return LookupMapping<true>(
2468           kEcma262UnCanonicalizeTable0, kEcma262UnCanonicalizeTable0Size,
2469           kEcma262UnCanonicalizeMultiStrings0, c, n, result, allow_caching_ptr);
2470     case 1:
2471       return LookupMapping<true>(
2472           kEcma262UnCanonicalizeTable1, kEcma262UnCanonicalizeTable1Size,
2473           kEcma262UnCanonicalizeMultiStrings1, c, n, result, allow_caching_ptr);
2474     case 5:
2475       return LookupMapping<true>(
2476           kEcma262UnCanonicalizeTable5, kEcma262UnCanonicalizeTable5Size,
2477           kEcma262UnCanonicalizeMultiStrings5, c, n, result, allow_caching_ptr);
2478     case 7:
2479       return LookupMapping<true>(
2480           kEcma262UnCanonicalizeTable7, kEcma262UnCanonicalizeTable7Size,
2481           kEcma262UnCanonicalizeMultiStrings7, c, n, result, allow_caching_ptr);
2482     default:
2483       return 0;
2484   }
2485 }
2486 
2487 static const MultiCharacterSpecialCase<1>
2488     kCanonicalizationRangeMultiStrings0[1] = {{{kSentinel}}};
2489 static const uint16_t kCanonicalizationRangeTable0Size = 70;
2490 static const int32_t kCanonicalizationRangeTable0[140] = {
2491     1073741889, 100, 90,   0, 1073741921, 100, 122,  0,
2492     1073742016, 88,  214,  0, 1073742040, 24,  222,  0,
2493     1073742048, 88,  246,  0, 1073742072, 24,  254,  0,
2494     1073742715, 8,   893,  0, 1073742728, 8,   906,  0,
2495     1073742749, 8,   927,  0, 1073742759, 16,  939,  0,
2496     1073742765, 8,   943,  0, 1073742781, 8,   959,  0,
2497     1073742791, 16,  971,  0, 1073742845, 8,   1023, 0,
2498     1073742848, 60,  1039, 0, 1073742864, 124, 1071, 0,
2499     1073742896, 124, 1103, 0, 1073742928, 60,  1119, 0,
2500     1073743153, 148, 1366, 0, 1073743201, 148, 1414, 0,
2501     1073746080, 148, 4293, 0, 1073749760, 28,  7943, 0,
2502     1073749768, 28,  7951, 0, 1073749776, 20,  7957, 0,
2503     1073749784, 20,  7965, 0, 1073749792, 28,  7975, 0,
2504     1073749800, 28,  7983, 0, 1073749808, 28,  7991, 0,
2505     1073749816, 28,  7999, 0, 1073749824, 20,  8005, 0,
2506     1073749832, 20,  8013, 0, 1073749856, 28,  8039, 0,
2507     1073749864, 28,  8047, 0, 1073749874, 12,  8053, 0,
2508     1073749960, 12,  8139, 0};
2509 static const uint16_t kCanonicalizationRangeMultiStrings0Size = 1;
2510 static const MultiCharacterSpecialCase<1>
2511     kCanonicalizationRangeMultiStrings1[1] = {{{kSentinel}}};
2512 static const uint16_t kCanonicalizationRangeTable1Size = 14;
2513 static const int32_t kCanonicalizationRangeTable1[28] = {
2514     1073742176, 60,  367,  0, 1073742192, 60,  383,  0,
2515     1073743030, 100, 1231, 0, 1073743056, 100, 1257, 0,
2516     1073744896, 184, 3118, 0, 1073744944, 184, 3166, 0,
2517     1073745152, 148, 3365, 0};
2518 static const uint16_t kCanonicalizationRangeMultiStrings1Size = 1;
2519 static const MultiCharacterSpecialCase<1>
2520     kCanonicalizationRangeMultiStrings7[1] = {{{kSentinel}}};
2521 static const uint16_t kCanonicalizationRangeTable7Size = 4;
2522 static const int32_t kCanonicalizationRangeTable7[8] = {
2523     1073749793, 100, 7994, 0, 1073749825, 100, 8026, 0};
2524 static const uint16_t kCanonicalizationRangeMultiStrings7Size = 1;
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)2525 int CanonicalizationRange::Convert(uchar c, uchar n, uchar* result,
2526                                    bool* allow_caching_ptr) {
2527   int chunk_index = c >> 13;
2528   switch (chunk_index) {
2529     case 0:
2530       return LookupMapping<false>(
2531           kCanonicalizationRangeTable0, kCanonicalizationRangeTable0Size,
2532           kCanonicalizationRangeMultiStrings0, c, n, result, allow_caching_ptr);
2533     case 1:
2534       return LookupMapping<false>(
2535           kCanonicalizationRangeTable1, kCanonicalizationRangeTable1Size,
2536           kCanonicalizationRangeMultiStrings1, c, n, result, allow_caching_ptr);
2537     case 7:
2538       return LookupMapping<false>(
2539           kCanonicalizationRangeTable7, kCanonicalizationRangeTable7Size,
2540           kCanonicalizationRangeMultiStrings7, c, n, result, allow_caching_ptr);
2541     default:
2542       return 0;
2543   }
2544 }
2545 
2546 const uchar UnicodeData::kMaxCodePoint = 0xFFFD;
2547 
GetByteCount()2548 int UnicodeData::GetByteCount() {
2549   return kUppercaseTable0Size * sizeof(int32_t) +
2550          kUppercaseTable1Size * sizeof(int32_t) +
2551          kUppercaseTable5Size * sizeof(int32_t) +
2552          kUppercaseTable7Size * sizeof(int32_t) +
2553          kLetterTable0Size * sizeof(int32_t) +
2554          kLetterTable1Size * sizeof(int32_t) +
2555          kLetterTable2Size * sizeof(int32_t) +
2556          kLetterTable3Size * sizeof(int32_t) +
2557          kLetterTable4Size * sizeof(int32_t) +
2558          kLetterTable5Size * sizeof(int32_t) +
2559          kLetterTable6Size * sizeof(int32_t) +
2560          kLetterTable7Size * sizeof(int32_t) +
2561          kID_StartTable0Size * sizeof(int32_t) +
2562          kID_StartTable1Size * sizeof(int32_t) +
2563          kID_StartTable2Size * sizeof(int32_t) +
2564          kID_StartTable3Size * sizeof(int32_t) +
2565          kID_StartTable4Size * sizeof(int32_t) +
2566          kID_StartTable5Size * sizeof(int32_t) +
2567          kID_StartTable6Size * sizeof(int32_t) +
2568          kID_StartTable7Size * sizeof(int32_t) +
2569          kID_ContinueTable0Size * sizeof(int32_t) +
2570          kID_ContinueTable1Size * sizeof(int32_t) +
2571          kID_ContinueTable5Size * sizeof(int32_t) +
2572          kID_ContinueTable7Size * sizeof(int32_t) +
2573          kWhiteSpaceTable0Size * sizeof(int32_t) +
2574          kWhiteSpaceTable1Size * sizeof(int32_t) +
2575          kWhiteSpaceTable7Size * sizeof(int32_t) +
2576          kToLowercaseMultiStrings0Size * sizeof(MultiCharacterSpecialCase<2>) +
2577          kToLowercaseMultiStrings1Size * sizeof(MultiCharacterSpecialCase<1>) +
2578          kToLowercaseMultiStrings5Size * sizeof(MultiCharacterSpecialCase<1>) +
2579          kToLowercaseMultiStrings7Size * sizeof(MultiCharacterSpecialCase<1>) +
2580          kToUppercaseMultiStrings0Size * sizeof(MultiCharacterSpecialCase<3>) +
2581          kToUppercaseMultiStrings1Size * sizeof(MultiCharacterSpecialCase<1>) +
2582          kToUppercaseMultiStrings5Size * sizeof(MultiCharacterSpecialCase<1>) +
2583          kToUppercaseMultiStrings7Size * sizeof(MultiCharacterSpecialCase<3>) +
2584          kEcma262CanonicalizeMultiStrings0Size *
2585              sizeof(MultiCharacterSpecialCase<1>) +
2586          kEcma262CanonicalizeMultiStrings1Size *
2587              sizeof(MultiCharacterSpecialCase<1>) +
2588          kEcma262CanonicalizeMultiStrings5Size *
2589              sizeof(MultiCharacterSpecialCase<1>) +
2590          kEcma262CanonicalizeMultiStrings7Size *
2591              sizeof(MultiCharacterSpecialCase<1>) +
2592          kEcma262UnCanonicalizeMultiStrings0Size *
2593              sizeof(MultiCharacterSpecialCase<4>) +
2594          kEcma262UnCanonicalizeMultiStrings1Size *
2595              sizeof(MultiCharacterSpecialCase<2>) +
2596          kEcma262UnCanonicalizeMultiStrings5Size *
2597              sizeof(MultiCharacterSpecialCase<2>) +
2598          kEcma262UnCanonicalizeMultiStrings7Size *
2599              sizeof(MultiCharacterSpecialCase<2>) +
2600          kCanonicalizationRangeMultiStrings0Size *
2601              sizeof(MultiCharacterSpecialCase<1>) +
2602          kCanonicalizationRangeMultiStrings1Size *
2603              sizeof(MultiCharacterSpecialCase<1>) +
2604          kCanonicalizationRangeMultiStrings7Size *
2605              sizeof(MultiCharacterSpecialCase<1>);
2606 }
2607 #endif  // !V8_INTL_SUPPORT
2608 
2609 }  // namespace unibrow
2610