comparison dep/anitomy/dep/srell/single-header/srell.hpp @ 347:a0aa8c8c4307

dep/anitomy: port to use UCS-4 rather than wide strings rationale: wide strings are not the same on every platform, and might not even be Unicode. (while they usually are, its possible that they are not) I was *going* to change StringToInt to use a string stream, but outputting to an integer doesn't seem to work at all with UCS-4, even though it ought to, so I just rolled my own that uses the arabic digits only.
author Paper <paper@paper.us.eu.org>
date Sun, 23 Jun 2024 10:32:09 -0400
parents
children
comparison
equal deleted inserted replaced
346:e65b89bcc528 347:a0aa8c8c4307
1 /*****************************************************************************
2 **
3 ** SRELL (std::regex-like library) version 4.045
4 **
5 ** Copyright (c) 2012-2024, Nozomu Katoo. All rights reserved.
6 **
7 ** Redistribution and use in source and binary forms, with or without
8 ** modification, are permitted provided that the following conditions are
9 ** met:
10 **
11 ** 1. Redistributions of source code must retain the above copyright notice,
12 ** this list of conditions and the following disclaimer.
13 **
14 ** 2. Redistributions in binary form must reproduce the above copyright
15 ** notice, this list of conditions and the following disclaimer in the
16 ** documentation and/or other materials provided with the distribution.
17 **
18 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
19 ** IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20 ** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 ** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22 ** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 ** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 ** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 ** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 ** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 ** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 **
30 ******************************************************************************
31 **/
32
33 #ifndef SRELL_REGEX_TEMPLATE_LIBRARY
34 #define SRELL_REGEX_TEMPLATE_LIBRARY
35
36 #include <stdexcept>
37 #include <climits>
38 #include <cwchar>
39 #include <string>
40 #include <locale>
41 #include <cstdio>
42 #include <cstdlib>
43 #include <cstring>
44 #include <cstddef>
45 #include <utility>
46 #include <vector>
47 #include <iterator>
48 #include <memory>
49 #include <algorithm>
50
51 #if !defined(SRELL_NO_UNISTACK) && (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSC_VER) && (_MSC_VER >= 1900))
52 #include <type_traits>
53 #define SRELL_HAS_TYPE_TRAITS
54 #endif
55
56 #ifdef __cpp_unicode_characters
57 #ifndef SRELL_CPP11_CHAR1632_ENABLED
58 #define SRELL_CPP11_CHAR1632_ENABLED
59 #endif
60 #endif
61 #ifdef __cpp_initializer_lists
62 #ifndef SRELL_CPP11_INITIALIZER_LIST_ENABLED
63 #define SRELL_CPP11_INITIALIZER_LIST_ENABLED
64 #endif
65 #endif
66 #ifdef __cpp_rvalue_references
67 #ifndef SRELL_CPP11_MOVE_ENABLED
68 #define SRELL_CPP11_MOVE_ENABLED
69 #endif
70 #endif
71 #ifdef SRELL_CPP11_MOVE_ENABLED
72 #if defined(_MSC_VER) && _MSC_VER < 1900
73 #define SRELL_NOEXCEPT
74 #else
75 #define SRELL_NOEXCEPT noexcept
76 #endif
77 #endif
78 #ifdef __cpp_char8_t
79 #ifndef SRELL_CPP20_CHAR8_ENABLED
80 #ifdef __cpp_lib_char8_t
81 #define SRELL_CPP20_CHAR8_ENABLED 2
82 #else
83 #define SRELL_CPP20_CHAR8_ENABLED 1
84 #endif
85 #endif
86 #endif
87
88 // The following SRELL_NO_* macros would be useful when wanting to
89 // reduce the size of a binary by turning off some feature(s).
90
91 #ifdef SRELL_NO_UNICODE_DATA
92
93 // Prevents Unicode data used for icase (case-insensitive) matching
94 // from being output into a resulting binary. In this case only the
95 // ASCII characters are case-folded when icase matching is performed
96 // (i.e., [A-Z] -> [a-z] only).
97 #define SRELL_NO_UNICODE_ICASE
98
99 // Disables the Unicode property (\p{...} and \P{...}) and prevents
100 // Unicode property data from being output into a resulting binary.
101 #define SRELL_NO_UNICODE_PROPERTY
102 #endif
103
104 // Prevents icase matching specific functions into a resulting binary.
105 // In this case the icase flag is ignored and icase matching becomes
106 // unavailable.
107 #ifdef SRELL_NO_ICASE
108 #ifndef SRELL_NO_UNICODE_ICASE
109 #define SRELL_NO_UNICODE_ICASE
110 #endif
111 #endif
112
113 // This macro might be removed in the future.
114 #ifdef SRELL_V1_COMPATIBLE
115 #ifndef SRELL_NO_UNICODE_PROPERTY
116 #define SRELL_NO_UNICODE_PROPERTY
117 #endif
118 #ifndef SRELL_NO_VMODE
119 #define SRELL_NO_VMODE
120 #endif
121 #define SRELL_NO_NAMEDCAPTURE
122 #define SRELL_NO_SINGLELINE
123 //#define SRELL_FIXEDWIDTHLOOKBEHIND
124 // Since version 4.019, SRELL highly depends on the variable-length
125 // lookbehind feature. Uncommenting this line is not recommended.
126 #endif
127
128 namespace srell
129 {
130 // ["regex_constants.h" ...
131
132 namespace regex_constants
133 {
134 enum syntax_option_type
135 {
136 icase = 1 << 1,
137 nosubs = 1 << 2,
138 optimize = 1 << 3,
139 collate = 0,
140 ECMAScript = 1 << 0,
141 basic = 0,
142 extended = 0,
143 awk = 0,
144 grep = 0,
145 egrep = 0,
146 multiline = 1 << 4,
147
148 // SRELL's extension.
149 dotall = 1 << 5, // singleline.
150 unicodesets = 1 << 6,
151
152 // For internal use.
153 back_ = 1 << 7,
154 pflagsmask_ = (1 << 7) - 1
155 };
156
157 inline syntax_option_type operator&(const syntax_option_type left, const syntax_option_type right)
158 {
159 return static_cast<syntax_option_type>(static_cast<int>(left) & static_cast<int>(right));
160 }
161 inline syntax_option_type operator|(const syntax_option_type left, const syntax_option_type right)
162 {
163 return static_cast<syntax_option_type>(static_cast<int>(left) | static_cast<int>(right));
164 }
165 inline syntax_option_type operator^(const syntax_option_type left, const syntax_option_type right)
166 {
167 return static_cast<syntax_option_type>(static_cast<int>(left) ^ static_cast<int>(right));
168 }
169 inline syntax_option_type operator~(const syntax_option_type b)
170 {
171 return static_cast<syntax_option_type>(~static_cast<int>(b));
172 }
173 inline syntax_option_type &operator&=(syntax_option_type &left, const syntax_option_type right)
174 {
175 left = left & right;
176 return left;
177 }
178 inline syntax_option_type &operator|=(syntax_option_type &left, const syntax_option_type right)
179 {
180 left = left | right;
181 return left;
182 }
183 inline syntax_option_type &operator^=(syntax_option_type &left, const syntax_option_type right)
184 {
185 left = left ^ right;
186 return left;
187 }
188 }
189 // namespace regex_constants
190
191 namespace regex_constants
192 {
193 enum match_flag_type
194 {
195 match_default = 0,
196 match_not_bol = 1 << 0,
197 match_not_eol = 1 << 1,
198 match_not_bow = 1 << 2,
199 match_not_eow = 1 << 3,
200 match_any = 1 << 4,
201 match_not_null = 1 << 5,
202 match_continuous = 1 << 6,
203 match_prev_avail = 1 << 7,
204
205 format_default = 0,
206 format_sed = 1 << 8,
207 format_no_copy = 1 << 9,
208 format_first_only = 1 << 10,
209
210 // For internal use.
211 match_match_ = 1 << 11
212 };
213
214 inline match_flag_type operator&(const match_flag_type left, const match_flag_type right)
215 {
216 return static_cast<match_flag_type>(static_cast<int>(left) & static_cast<int>(right));
217 }
218 inline match_flag_type operator|(const match_flag_type left, const match_flag_type right)
219 {
220 return static_cast<match_flag_type>(static_cast<int>(left) | static_cast<int>(right));
221 }
222 inline match_flag_type operator^(const match_flag_type left, const match_flag_type right)
223 {
224 return static_cast<match_flag_type>(static_cast<int>(left) ^ static_cast<int>(right));
225 }
226 inline match_flag_type operator~(const match_flag_type b)
227 {
228 return static_cast<match_flag_type>(~static_cast<int>(b));
229 }
230 inline match_flag_type &operator&=(match_flag_type &left, const match_flag_type right)
231 {
232 left = left & right;
233 return left;
234 }
235 inline match_flag_type &operator|=(match_flag_type &left, const match_flag_type right)
236 {
237 left = left | right;
238 return left;
239 }
240 inline match_flag_type &operator^=(match_flag_type &left, const match_flag_type right)
241 {
242 left = left ^ right;
243 return left;
244 }
245 }
246 // namespace regex_constants
247
248 // 28.5, regex constants:
249 namespace regex_constants
250 {
251 typedef int error_type;
252
253 static const error_type error_collate = 100;
254 static const error_type error_ctype = 101;
255 static const error_type error_escape = 102;
256 static const error_type error_backref = 103;
257 static const error_type error_brack = 104;
258 static const error_type error_paren = 105;
259 static const error_type error_brace = 106;
260 static const error_type error_badbrace = 107;
261 static const error_type error_range = 108;
262 static const error_type error_space = 109;
263 static const error_type error_badrepeat = 110;
264 static const error_type error_complexity = 111;
265 static const error_type error_stack = 112;
266
267 // SRELL's extensions.
268 static const error_type error_utf8 = 113;
269 // The expression contained an invalid UTF-8 sequence.
270
271 static const error_type error_property = 114;
272 // The expression contained an invalid Unicode property name or value.
273
274 static const error_type error_noescape = 115;
275 // (Only in v-mode) ( ) [ ] { } / - \ | need to be escaped in a character class.
276
277 static const error_type error_operator = 116;
278 // (Only in v-mode) A character class contained a reserved double punctuation
279 // operator or different types of operators at the same level, such as [ab--cd].
280
281 static const error_type error_complement = 117;
282 // (Only in v-mode) \P or a negated character class contained a property of strings.
283
284 static const error_type error_modifier = 118;
285 // A specific flag modifier appeared more then once, or the un-bounded form
286 // ((?ism-ism)) appeared at a position other than the beginning of the expression.
287
288 #if defined(SRELL_FIXEDWIDTHLOOKBEHIND)
289 static const error_type error_lookbehind = 200;
290 #endif
291 static const error_type error_internal = 999;
292 }
293 // namespace regex_constants
294
295 // ... "regex_constants.h"]
296 // ["regex_error.hpp" ...
297
298 // 28.6, class regex_error:
299 class regex_error : public std::runtime_error
300 {
301 public:
302
303 explicit regex_error(const regex_constants::error_type ecode)
304 : std::runtime_error("regex_error") // added for error C2512.
305 , ecode_(ecode)
306 {
307 }
308
309 regex_constants::error_type code() const
310 {
311 return ecode_;
312 }
313
314 private:
315
316 regex_constants::error_type ecode_;
317 };
318
319 // ... "regex_error.hpp"]
320 // ["rei_type.h" ...
321
322 namespace re_detail
323 {
324
325 #if defined(SRELL_CPP11_CHAR1632_ENABLED)
326
327 typedef char32_t ui_l32; // uint_least32.
328
329 #elif defined(UINT_MAX) && UINT_MAX >= 0xFFFFFFFF
330
331 typedef unsigned int ui_l32;
332
333 #elif defined(ULONG_MAX) && ULONG_MAX >= 0xFFFFFFFF
334
335 typedef unsigned long ui_l32;
336
337 #else
338 #error could not find a suitable type for 32-bit Unicode integer values.
339 #endif // defined(SRELL_CPP11_CHAR1632_ENABLED)
340 } // namespace re_detail
341
342 // ... "rei_type.h"]
343 // ["rei_constants.h" ...
344
345 namespace re_detail
346 {
347 enum re_state_type
348 {
349 st_character, // 0x00
350 st_character_class, // 0x01
351
352 st_epsilon, // 0x02
353
354 st_check_counter, // 0x03
355 st_increment_counter, // 0x04
356 st_decrement_counter, // 0x05
357 st_save_and_reset_counter, // 0x06
358 st_restore_counter, // 0x07
359
360 st_roundbracket_open, // 0x08
361 st_roundbracket_pop, // 0x09
362 st_roundbracket_close, // 0x0a
363
364 st_repeat_in_push, // 0x0b
365 st_repeat_in_pop, // 0x0c
366 st_check_0_width_repeat, // 0x0d
367
368 st_backreference, // 0x0e
369
370 st_lookaround_open, // 0x0f
371
372 st_lookaround_pop, // 0x10
373
374 st_bol, // 0x11
375 st_eol, // 0x12
376 st_boundary, // 0x13
377
378 st_success, // 0x14
379
380 #if defined(SRELLTEST_NEXTPOS_OPT)
381 st_move_nextpos, // 0x15
382 #endif
383
384 st_lookaround_close = st_success,
385 st_zero_width_boundary = st_lookaround_open,
386 };
387 // re_state_type
388
389 namespace constants
390 {
391 static const ui_l32 unicode_max_codepoint = 0x10ffff;
392 static const ui_l32 invalid_u32value = static_cast<ui_l32>(-1);
393 static const ui_l32 max_u32value = static_cast<ui_l32>(-2);
394 static const ui_l32 ccstr_empty = static_cast<ui_l32>(-1);
395 static const ui_l32 infinity = static_cast<ui_l32>(~0);
396 static const ui_l32 pos_charbits = 21;
397 }
398 // constants
399
400 namespace masks
401 {
402 static const ui_l32 asc_icase = 0x20;
403 static const ui_l32 pos_cf = 0x200000; // 1 << 21.
404 static const ui_l32 pos_char = 0x1fffff;
405 }
406 // masks
407
408 namespace sflags
409 {
410 static const ui_l32 is_not = 1;
411 static const ui_l32 icase = 1;
412 static const ui_l32 multiline = 1;
413 static const ui_l32 backrefno_unresolved = 1 << 1;
414 static const ui_l32 hooking = 1 << 2;
415 static const ui_l32 hookedlast = 1 << 3;
416 static const ui_l32 byn2 = 1 << 4;
417 }
418 // sflags
419
420 namespace meta_char
421 {
422 static const ui_l32 mc_exclam = 0x21; // '!'
423 static const ui_l32 mc_sharp = 0x23; // '#'
424 static const ui_l32 mc_dollar = 0x24; // '$'
425 static const ui_l32 mc_rbraop = 0x28; // '('
426 static const ui_l32 mc_rbracl = 0x29; // ')'
427 static const ui_l32 mc_astrsk = 0x2a; // '*'
428 static const ui_l32 mc_plus = 0x2b; // '+'
429 static const ui_l32 mc_comma = 0x2c; // ','
430 static const ui_l32 mc_minus = 0x2d; // '-'
431 static const ui_l32 mc_period = 0x2e; // '.'
432 static const ui_l32 mc_colon = 0x3a; // ':'
433 static const ui_l32 mc_lt = 0x3c; // '<'
434 static const ui_l32 mc_eq = 0x3d; // '='
435 static const ui_l32 mc_gt = 0x3e; // '>'
436 static const ui_l32 mc_query = 0x3f; // '?'
437 static const ui_l32 mc_sbraop = 0x5b; // '['
438 static const ui_l32 mc_escape = 0x5c; // '\\'
439 static const ui_l32 mc_sbracl = 0x5d; // ']'
440 static const ui_l32 mc_caret = 0x5e; // '^'
441 static const ui_l32 mc_cbraop = 0x7b; // '{'
442 static const ui_l32 mc_bar = 0x7c; // '|'
443 static const ui_l32 mc_cbracl = 0x7d; // '}'
444 }
445 // meta_char
446
447 namespace char_ctrl
448 {
449 static const ui_l32 cc_nul = 0x00; // '\0' //0x00:NUL
450 static const ui_l32 cc_bs = 0x08; // '\b' //0x08:BS
451 static const ui_l32 cc_htab = 0x09; // '\t' //0x09:HT
452 static const ui_l32 cc_nl = 0x0a; // '\n' //0x0a:LF
453 static const ui_l32 cc_vtab = 0x0b; // '\v' //0x0b:VT
454 static const ui_l32 cc_ff = 0x0c; // '\f' //0x0c:FF
455 static const ui_l32 cc_cr = 0x0d; // '\r' //0x0d:CR
456 }
457 // char_ctrl
458
459 namespace char_alnum
460 {
461 static const ui_l32 ch_0 = 0x30; // '0'
462 static const ui_l32 ch_1 = 0x31; // '1'
463 static const ui_l32 ch_7 = 0x37; // '7'
464 static const ui_l32 ch_8 = 0x38; // '8'
465 static const ui_l32 ch_9 = 0x39; // '9'
466 static const ui_l32 ch_A = 0x41; // 'A'
467 static const ui_l32 ch_B = 0x42; // 'B'
468 static const ui_l32 ch_D = 0x44; // 'D'
469 static const ui_l32 ch_F = 0x46; // 'F'
470 static const ui_l32 ch_P = 0x50; // 'P'
471 static const ui_l32 ch_S = 0x53; // 'S'
472 static const ui_l32 ch_W = 0x57; // 'W'
473 static const ui_l32 ch_Z = 0x5a; // 'Z'
474 static const ui_l32 ch_a = 0x61; // 'a'
475 static const ui_l32 ch_b = 0x62; // 'b'
476 static const ui_l32 ch_c = 0x63; // 'c'
477 static const ui_l32 ch_d = 0x64; // 'd'
478 static const ui_l32 ch_f = 0x66; // 'f'
479 static const ui_l32 ch_i = 0x69; // 'i'
480 static const ui_l32 ch_k = 0x6b; // 'k'
481 static const ui_l32 ch_m = 0x6d; // 'm'
482 static const ui_l32 ch_n = 0x6e; // 'n'
483 static const ui_l32 ch_p = 0x70; // 'p'
484 static const ui_l32 ch_q = 0x71; // 'q'
485 static const ui_l32 ch_r = 0x72; // 'r'
486 static const ui_l32 ch_s = 0x73; // 's'
487 static const ui_l32 ch_t = 0x74; // 't'
488 static const ui_l32 ch_u = 0x75; // 'u'
489 static const ui_l32 ch_v = 0x76; // 'v'
490 static const ui_l32 ch_w = 0x77; // 'w'
491 static const ui_l32 ch_x = 0x78; // 'x'
492 static const ui_l32 ch_z = 0x7a; // 'z'
493 }
494 // char_alnum
495
496 namespace char_other
497 {
498 static const ui_l32 co_sp = 0x20; // ' '
499 static const ui_l32 co_perc = 0x25; // '%'
500 static const ui_l32 co_amp = 0x26; // '&'
501 static const ui_l32 co_apos = 0x27; // '\''
502 static const ui_l32 co_slash = 0x2f; // '/'
503 static const ui_l32 co_smcln = 0x3b; // ';'
504 static const ui_l32 co_atmrk = 0x40; // '@'
505 static const ui_l32 co_ll = 0x5f; // '_'
506 static const ui_l32 co_grav = 0x60; // '`'
507 static const ui_l32 co_tilde = 0x7e; // '~'
508 }
509 // char_other
510
511 namespace epsilon_type // Used only in the pattern compiler.
512 {
513 static const ui_l32 et_dfastrsk = 0x40; // '@'
514 static const ui_l32 et_ccastrsk = 0x2a; // '*'
515 static const ui_l32 et_alt = 0x7c; // '|'
516 static const ui_l32 et_ncgopen = 0x3a; // ':'
517 static const ui_l32 et_ncgclose = 0x3b; // ';'
518 static const ui_l32 et_jmpinlp = 0x2b; // '+'
519 static const ui_l32 et_brnchend = 0x2f; // '/'
520 static const ui_l32 et_fmrbckrf = 0x5c; // '\\'
521 static const ui_l32 et_bo1fmrbr = 0x31; // '1'
522 static const ui_l32 et_bo2skpd = 0x21; // '!'
523 static const ui_l32 et_bo2fmrbr = 0x32; // '2'
524 static const ui_l32 et_rvfmrcg = 0x28; // '('
525 static const ui_l32 et_mfrfmrcg = 0x29; // ')'
526 static const ui_l32 et_aofmrast = 0x78; // 'x'
527 }
528 // epsilon_type
529 }
530 // namespace re_detail
531
532 // ... "rei_constants.h"]
533 // ["rei_utf_traits.hpp" ...
534
535 namespace re_detail
536 {
537
538 #if defined(_MSC_VER)
539 #define SRELL_FORCEINLINE __forceinline
540 #elif defined(__GNUC__)
541 #define SRELL_FORCEINLINE __attribute__((always_inline))
542 #else
543 #define SRELL_FORCEINLINE
544 #endif
545
546 template <typename charT>
547 struct utf_traits_core
548 {
549 public:
550
551 typedef charT char_type;
552
553 static const std::size_t maxseqlen = 1;
554 static const int utftype = 0;
555
556 static const ui_l32 one = 1;
557 static const ui_l32 charbit = (sizeof (charT) * CHAR_BIT) > 21 ? 21 : (sizeof (charT) * CHAR_BIT);
558 static const ui_l32 bitsetsize = one << (charbit > 18 ? 18 : charbit);
559 static const ui_l32 bitsetmask = bitsetsize - 1;
560 static const ui_l32 maxcpvalue = charbit == 21 ? 0x10ffff : ((one << charbit) - 1);
561
562 // *iter
563 template <typename ForwardIterator>
564 static ui_l32 codepoint(ForwardIterator begin, const ForwardIterator /* end */)
565 {
566 return static_cast<ui_l32>(*begin);
567 // Caller is responsible for begin != end.
568 }
569
570 // *iter++
571 template <typename ForwardIterator>
572 static ui_l32 codepoint_inc(ForwardIterator &begin, const ForwardIterator /* end */)
573 {
574 return static_cast<ui_l32>(*begin++);
575 // Caller is responsible for begin != end.
576 }
577
578 // iter2 = iter; return *--iter2;
579 template <typename BidirectionalIterator>
580 static ui_l32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator /* begin */)
581 {
582 return static_cast<ui_l32>(*--cur);
583 }
584
585 // *--iter
586 template <typename BidirectionalIterator>
587 static ui_l32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator /* begin */)
588 {
589 return static_cast<ui_l32>(*--cur);
590 // Caller is responsible for cur != begin.
591 }
592
593 #if !defined(SRELLDBG_NO_BMH)
594
595 template <typename charT2>
596 static bool is_trailing(const charT2 /* cu */)
597 {
598 return false;
599 }
600
601 #endif // !defined(SRELLDBG_NO_BMH)
602
603 static ui_l32 to_codeunits(charT out[maxseqlen], ui_l32 cp)
604 {
605 out[0] = static_cast<charT>(cp);
606 return 1;
607 }
608
609 static ui_l32 firstcodeunit(const ui_l32 cp)
610 {
611 return cp;
612 }
613 };
614 template <typename charT> const std::size_t utf_traits_core<charT>::maxseqlen;
615 template <typename charT> const int utf_traits_core<charT>::utftype;
616 template <typename charT> const ui_l32 utf_traits_core<charT>::charbit;
617 template <typename charT> const ui_l32 utf_traits_core<charT>::bitsetsize;
618 template <typename charT> const ui_l32 utf_traits_core<charT>::bitsetmask;
619 template <typename charT> const ui_l32 utf_traits_core<charT>::maxcpvalue;
620 // utf_traits_core
621
622 // common and utf-32.
623 template <typename charT>
624 struct utf_traits : public utf_traits_core<charT>
625 {
626 static const int utftype = 32;
627 };
628 template <typename charT> const int utf_traits<charT>::utftype;
629 // utf_traits
630
631 // utf-8 specific.
632 template <typename charT>
633 struct utf8_traits : public utf_traits_core<charT>
634 {
635 public:
636
637 // utf-8 specific.
638 static const std::size_t maxseqlen = 4;
639 static const int utftype = 8;
640
641 static const ui_l32 charbit = 8;
642 static const ui_l32 bitsetsize = 0x100;
643 static const ui_l32 bitsetmask = 0xff;
644 static const ui_l32 maxcpvalue = 0x10ffff;
645
646 template <typename ForwardIterator>
647 static SRELL_FORCEINLINE ui_l32 codepoint(ForwardIterator begin, const ForwardIterator end)
648 {
649 ui_l32 codepoint = static_cast<ui_l32>(*begin & 0xff);
650
651 if ((codepoint & 0x80) == 0) // 1 octet.
652 return codepoint;
653
654 if (++begin != end && codepoint >= 0xc0 && (*begin & 0xc0) == 0x80)
655 {
656 codepoint = static_cast<ui_l32>((codepoint << 6) | (*begin & 0x3f));
657
658 if ((codepoint & 0x800) == 0) // 2 octets.
659 return static_cast<ui_l32>(codepoint & 0x7ff);
660
661 if (++begin != end && (*begin & 0xc0) == 0x80)
662 {
663 codepoint = static_cast<ui_l32>((codepoint << 6) | (*begin & 0x3f));
664
665 if ((codepoint & 0x10000) == 0) // 3 octets.
666 return static_cast<ui_l32>(codepoint & 0xffff);
667
668 if (++begin != end && (*begin & 0xc0) == 0x80)
669 {
670 codepoint = static_cast<ui_l32>((codepoint << 6) | (*begin & 0x3f));
671
672 if (codepoint <= 0x3dfffff) // 4 octets.
673 return static_cast<ui_l32>(codepoint & 0x1fffff);
674 }
675 }
676 }
677 // else // 80-bf, f8-ff: invalid.
678
679 return re_detail::constants::invalid_u32value;
680 }
681
682 template <typename ForwardIterator>
683 static SRELL_FORCEINLINE ui_l32 codepoint_inc(ForwardIterator &begin, const ForwardIterator end)
684 {
685 ui_l32 codepoint = static_cast<ui_l32>(*begin++ & 0xff);
686
687 if ((codepoint & 0x80) == 0) // 1 octet.
688 return codepoint;
689
690 // if (begin != end && (0x7f00 & (1 << ((codepoint >> 3) & 0xf))) && (*begin & 0xc0) == 0x80) // c0, c8, d0, d8, e0, e8, f0.
691 if (begin != end && codepoint >= 0xc0 && (*begin & 0xc0) == 0x80)
692 {
693 codepoint = static_cast<ui_l32>((codepoint << 6) | (*begin++ & 0x3f));
694
695 // 11 ?aaa aabb bbbb
696 if ((codepoint & 0x800) == 0) // 2 octets.
697 return static_cast<ui_l32>(codepoint & 0x7ff);
698 // c080-c1bf: invalid. 00-7F.
699 // c280-dfbf: valid. 080-7FF.
700
701 // 11 1aaa aabb bbbb
702 if (begin != end && (*begin & 0xc0) == 0x80)
703 {
704 codepoint = static_cast<ui_l32>((codepoint << 6) | (*begin++ & 0x3f));
705
706 // 111? aaaa bbbb bbcc cccc
707 if ((codepoint & 0x10000) == 0) // 3 octets.
708 return static_cast<ui_l32>(codepoint & 0xffff);
709 // e08080-e09fbf: invalid. 000-7FF.
710 // e0a080-efbfbf: valid. 0800-FFFF.
711
712 // 1111 aaaa bbbb bbcc cccc
713 if (begin != end && (*begin & 0xc0) == 0x80)
714 {
715 codepoint = static_cast<ui_l32>((codepoint << 6) | (*begin++ & 0x3f));
716 // f0808080-f08fbfbf: invalid. 0000-FFFF.
717 // f0908080-f3bfbfbf: valid. 10000-FFFFF.
718 // f4808080-f48fbfbf: valid. 100000-10FFFF.
719 // f4908080-f4bfbfbf: invalid. 110000-13FFFF.
720 // f5808080-f7bfbfbf: invalid. 140000-1FFFFF.
721
722 // 11 11?a aabb bbbb cccc ccdd dddd
723 if (codepoint <= 0x3dfffff) // 4 octets.
724 return static_cast<ui_l32>(codepoint & 0x1fffff);
725 // 11 110a aabb bbbb cccc ccdd dddd
726 }
727 }
728 }
729 // else // 80-bf, f8-ff: invalid.
730
731 return re_detail::constants::invalid_u32value;
732 }
733
734 template <typename BidirectionalIterator>
735 static SRELL_FORCEINLINE ui_l32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator begin)
736 {
737 ui_l32 codepoint = static_cast<ui_l32>(*--cur);
738
739 if ((codepoint & 0x80) == 0)
740 return static_cast<ui_l32>(codepoint & 0xff);
741
742 if ((codepoint & 0x40) == 0 && cur != begin)
743 {
744 codepoint = static_cast<ui_l32>((codepoint & 0x3f) | (*--cur << 6));
745
746 if ((codepoint & 0x3800) == 0x3000) // 2 octets.
747 return static_cast<ui_l32>(codepoint & 0x7ff);
748
749 if ((codepoint & 0x3000) == 0x2000 && cur != begin)
750 {
751 codepoint = static_cast<ui_l32>((codepoint & 0xfff) | (*--cur << 12));
752
753 if ((codepoint & 0xf0000) == 0xe0000) // 3 octets.
754 return static_cast<ui_l32>(codepoint & 0xffff);
755
756 if ((codepoint & 0xc0000) == 0x80000 && cur != begin)
757 {
758 if ((*--cur & 0xf8) == 0xf0) // 4 octets.
759 return static_cast<ui_l32>((codepoint & 0x3ffff) | ((*cur & 7) << 18));
760 }
761 }
762 }
763 return re_detail::constants::invalid_u32value;
764 }
765
766 template <typename BidirectionalIterator>
767 static SRELL_FORCEINLINE ui_l32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator begin)
768 {
769 ui_l32 codepoint = static_cast<ui_l32>(*--cur);
770
771 if ((codepoint & 0x80) == 0)
772 return static_cast<ui_l32>(codepoint & 0xff);
773
774 if ((codepoint & 0x40) == 0 && cur != begin)
775 {
776 codepoint = static_cast<ui_l32>((codepoint & 0x3f) | (*--cur << 6));
777
778 // 11 0bbb bbaa aaaa?
779 if ((codepoint & 0x3800) == 0x3000) // 2 octets.
780 return static_cast<ui_l32>(codepoint & 0x7ff);
781
782 // 10 bbbb bbaa aaaa?
783 if ((codepoint & 0x3000) == 0x2000 && cur != begin) // [\x80-\xbf]{2}.
784 {
785 codepoint = static_cast<ui_l32>((codepoint & 0xfff) | (*--cur << 12));
786
787 // 1110 cccc bbbb bbaa aaaa?
788 if ((codepoint & 0xf0000) == 0xe0000) // 3 octets.
789 return static_cast<ui_l32>(codepoint & 0xffff);
790
791 // 10cc cccc bbbb bbaa aaaa?
792 if ((codepoint & 0xc0000) == 0x80000 && cur != begin) // [\x80-\xbf]{3}.
793 {
794 if ((*--cur & 0xf8) == 0xf0) // 4 octets.
795 return static_cast<ui_l32>((codepoint & 0x3ffff) | ((*cur & 7) << 18));
796 // d ddcc cccc bbbb bbaa aaaa
797 }
798 }
799 }
800 return re_detail::constants::invalid_u32value;
801 }
802
803 #if !defined(SRELLDBG_NO_BMH)
804
805 template <typename charT2>
806 static bool is_trailing(const charT2 cu)
807 {
808 return (cu & 0xc0) == 0x80;
809 }
810
811 #endif // !defined(SRELLDBG_NO_BMH)
812
813 static ui_l32 to_codeunits(charT out[maxseqlen], ui_l32 cp)
814 {
815 if (cp < 0x80)
816 {
817 out[0] = static_cast<charT>(cp);
818 return 1;
819 }
820 else if (cp < 0x800)
821 {
822 out[0] = static_cast<charT>(((cp >> 6) & 0x1f) | 0xc0);
823 out[1] = static_cast<charT>((cp & 0x3f) | 0x80);
824 return 2;
825 }
826 else if (cp < 0x10000)
827 {
828 out[0] = static_cast<charT>(((cp >> 12) & 0x0f) | 0xe0);
829 out[1] = static_cast<charT>(((cp >> 6) & 0x3f) | 0x80);
830 out[2] = static_cast<charT>((cp & 0x3f) | 0x80);
831 return 3;
832 }
833 // else // if (cp < 0x110000)
834
835 out[0] = static_cast<charT>(((cp >> 18) & 0x07) | 0xf0);
836 out[1] = static_cast<charT>(((cp >> 12) & 0x3f) | 0x80);
837 out[2] = static_cast<charT>(((cp >> 6) & 0x3f) | 0x80);
838 out[3] = static_cast<charT>((cp & 0x3f) | 0x80);
839 return 4;
840 }
841
842 static ui_l32 firstcodeunit(const ui_l32 cp)
843 {
844 if (cp < 0x80)
845 return cp;
846
847 if (cp < 0x800)
848 return static_cast<ui_l32>(((cp >> 6) & 0x1f) | 0xc0);
849
850 if (cp < 0x10000)
851 return static_cast<ui_l32>(((cp >> 12) & 0x0f) | 0xe0);
852
853 return static_cast<ui_l32>(((cp >> 18) & 0x07) | 0xf0);
854 }
855 };
856 template <typename charT> const std::size_t utf8_traits<charT>::maxseqlen;
857 template <typename charT> const int utf8_traits<charT>::utftype;
858 template <typename charT> const ui_l32 utf8_traits<charT>::charbit;
859 template <typename charT> const ui_l32 utf8_traits<charT>::bitsetsize;
860 template <typename charT> const ui_l32 utf8_traits<charT>::bitsetmask;
861 template <typename charT> const ui_l32 utf8_traits<charT>::maxcpvalue;
862 // utf8_traits
863
864 // utf-16 specific.
865 template <typename charT>
866 struct utf16_traits : public utf_traits_core<charT>
867 {
868 public:
869
870 // utf-16 specific.
871 static const std::size_t maxseqlen = 2;
872 static const int utftype = 16;
873
874 static const ui_l32 charbit = 16;
875 static const ui_l32 bitsetsize = 0x10000;
876 static const ui_l32 bitsetmask = 0xffff;
877 static const ui_l32 maxcpvalue = 0x10ffff;
878
879 template <typename ForwardIterator>
880 static SRELL_FORCEINLINE ui_l32 codepoint(ForwardIterator begin, const ForwardIterator end)
881 {
882 const ui_l32 codeunit = *begin;
883
884 if ((codeunit & 0xdc00) != 0xd800)
885 return static_cast<ui_l32>(codeunit & 0xffff);
886
887 if (++begin != end && (*begin & 0xdc00) == 0xdc00)
888 return static_cast<ui_l32>((((codeunit & 0x3ff) << 10) | (*begin & 0x3ff)) + 0x10000);
889
890 return static_cast<ui_l32>(codeunit & 0xffff);
891 }
892
893 template <typename ForwardIterator>
894 static SRELL_FORCEINLINE ui_l32 codepoint_inc(ForwardIterator &begin, const ForwardIterator end)
895 {
896 const ui_l32 codeunit = *begin++;
897
898 if ((codeunit & 0xdc00) != 0xd800)
899 return static_cast<ui_l32>(codeunit & 0xffff);
900
901 if (begin != end && (*begin & 0xdc00) == 0xdc00)
902 return static_cast<ui_l32>((((codeunit & 0x3ff) << 10) | (*begin++ & 0x3ff)) + 0x10000);
903
904 return static_cast<ui_l32>(codeunit & 0xffff);
905 }
906
907 template <typename BidirectionalIterator>
908 static SRELL_FORCEINLINE ui_l32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator begin)
909 {
910 const ui_l32 codeunit = *--cur;
911
912 if ((codeunit & 0xdc00) != 0xdc00 || cur == begin)
913 return static_cast<ui_l32>(codeunit & 0xffff);
914
915 if ((*--cur & 0xdc00) == 0xd800)
916 return static_cast<ui_l32>((((*cur & 0x3ff) << 10) | (codeunit & 0x3ff)) + 0x10000);
917
918 return static_cast<ui_l32>(codeunit & 0xffff);
919 }
920
921 template <typename BidirectionalIterator>
922 static SRELL_FORCEINLINE ui_l32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator begin)
923 {
924 const ui_l32 codeunit = *--cur;
925
926 if ((codeunit & 0xdc00) != 0xdc00 || cur == begin)
927 return static_cast<ui_l32>(codeunit & 0xffff);
928
929 if ((*--cur & 0xdc00) == 0xd800)
930 return static_cast<ui_l32>((((*cur & 0x3ff) << 10) | (codeunit & 0x3ff)) + 0x10000);
931 //else // (codeunit & 0xdc00) == 0xdc00 && (*cur & 0xdc00) != 0xd800
932
933 ++cur;
934
935 return static_cast<ui_l32>(codeunit & 0xffff);
936 }
937
938 #if !defined(SRELLDBG_NO_BMH)
939
940 template <typename charT2>
941 static bool is_trailing(const charT2 cu)
942 {
943 return (cu & 0xdc00) == 0xdc00;
944 }
945
946 #endif // !defined(SRELLDBG_NO_BMH)
947
948 static ui_l32 to_codeunits(charT out[maxseqlen], ui_l32 cp)
949 {
950 if (cp < 0x10000)
951 {
952 out[0] = static_cast<charT>(cp);
953 return 1;
954 }
955 // else // if (cp < 0x110000)
956
957 cp -= 0x10000;
958 out[0] = static_cast<charT>(((cp >> 10) & 0x3ff) | 0xd800);
959 out[1] = static_cast<charT>((cp & 0x3ff) | 0xdc00);
960 return 2;
961 }
962
963 static ui_l32 firstcodeunit(const ui_l32 cp)
964 {
965 if (cp < 0x10000)
966 return cp;
967
968 return static_cast<ui_l32>((cp >> 10) + 0xd7c0);
969 // aaaaa bbbbcccc ddddeeee -> AA AAbb bbcc/cc dddd eeee where AAAA = aaaaa - 1.
970 }
971 };
972 template <typename charT> const std::size_t utf16_traits<charT>::maxseqlen;
973 template <typename charT> const int utf16_traits<charT>::utftype;
974 template <typename charT> const ui_l32 utf16_traits<charT>::charbit;
975 template <typename charT> const ui_l32 utf16_traits<charT>::bitsetsize;
976 template <typename charT> const ui_l32 utf16_traits<charT>::bitsetmask;
977 template <typename charT> const ui_l32 utf16_traits<charT>::maxcpvalue;
978 // utf16_traits
979
980 // specialisation for char.
981 template <>
982 struct utf_traits<char> : public utf_traits_core<char>
983 {
984 public:
985
986 template <typename ForwardIterator>
987 static ui_l32 codepoint(ForwardIterator begin, const ForwardIterator /* end */)
988 {
989 return static_cast<ui_l32>(static_cast<unsigned char>(*begin));
990 }
991
992 template <typename ForwardIterator>
993 static ui_l32 codepoint_inc(ForwardIterator &begin, const ForwardIterator /* end */)
994 {
995 return static_cast<ui_l32>(static_cast<unsigned char>(*begin++));
996 }
997
998 template <typename BidirectionalIterator>
999 static ui_l32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator /* begin */)
1000 {
1001 return static_cast<ui_l32>(static_cast<unsigned char>(*--cur));
1002 }
1003
1004 template <typename BidirectionalIterator>
1005 static ui_l32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator /* begin */)
1006 {
1007 return static_cast<ui_l32>(static_cast<unsigned char>(*--cur));
1008 }
1009
1010 #if !defined(SRELLDBG_NO_BMH)
1011 #endif // !defined(SRELLDBG_NO_BMH)
1012 }; // utf_traits<char>
1013
1014 // specialisation for signed char.
1015 template <>
1016 struct utf_traits<signed char> : public utf_traits<char>
1017 {
1018 };
1019
1020 // (signed) short, (signed) int, (signed) long, (signed) long long, ...
1021
1022 #if defined(SRELL_CPP11_CHAR1632_ENABLED)
1023 template <>
1024 struct utf_traits<char16_t> : public utf16_traits<char16_t>
1025 {
1026 };
1027 #endif
1028
1029 #if defined(SRELL_CPP20_CHAR8_ENABLED)
1030 template <>
1031 struct utf_traits<char8_t> : public utf8_traits<char8_t>
1032 {
1033 };
1034 #endif
1035
1036 } // re_detail
1037
1038 // ... "rei_utf_traits.hpp"]
1039 // ["regex_traits.hpp" ...
1040
1041 // 28.7, class template regex_traits:
1042 template <class charT>
1043 struct regex_traits
1044 {
1045 public:
1046
1047 typedef charT char_type;
1048 typedef std::basic_string<char_type> string_type;
1049 typedef std::locale locale_type;
1050 // typedef bitmask_type char_class_type;
1051 typedef int char_class_type;
1052
1053 typedef re_detail::utf_traits<charT> utf_traits;
1054
1055 public:
1056
1057 // regex_traits();
1058
1059 static std::size_t length(const char_type *p)
1060 {
1061 return std::char_traits<charT>::length(p);
1062 }
1063
1064 charT translate(const charT c) const
1065 {
1066 return c;
1067 }
1068
1069 charT translate_nocase(const charT c) const
1070 {
1071 return c;
1072 }
1073
1074 template <class ForwardIterator>
1075 string_type transform(ForwardIterator first, ForwardIterator last) const
1076 {
1077 return string_type(first, last);
1078 }
1079
1080 template <class ForwardIterator>
1081 string_type transform_primary(ForwardIterator first, ForwardIterator last) const
1082 {
1083 return string_type(first, last);
1084 }
1085
1086 template <class ForwardIterator>
1087 string_type lookup_collatename(ForwardIterator first, ForwardIterator last) const
1088 {
1089 return string_type(first, last);
1090 }
1091
1092 template <class ForwardIterator>
1093 char_class_type lookup_classname(ForwardIterator /* first */, ForwardIterator /* last */, bool /* icase */ = false) const
1094 {
1095 return static_cast<char_class_type>(0);
1096 }
1097
1098 bool isctype(const charT /* c */, const char_class_type /* f */) const
1099 {
1100 return false;
1101 }
1102
1103 int value(const charT /* ch */, const int /* radix */) const
1104 {
1105 return -1;
1106 }
1107
1108 locale_type imbue(const locale_type /* l */)
1109 {
1110 return locale_type();
1111 }
1112
1113 locale_type getloc() const
1114 {
1115 return locale_type();
1116 }
1117 }; // regex_traits
1118
1119 template <class charT>
1120 struct u8regex_traits : public regex_traits<charT>
1121 {
1122 typedef re_detail::utf8_traits<charT> utf_traits;
1123 };
1124
1125 template <class charT>
1126 struct u16regex_traits : public regex_traits<charT>
1127 {
1128 typedef re_detail::utf16_traits<charT> utf_traits;
1129 };
1130
1131 // ... "regex_traits.hpp"]
1132 // ["rei_memory.hpp" ...
1133
1134 namespace re_detail
1135 {
1136 /*
1137 * Similar to std::basic_string, except for:
1138 * a. only allocates memory, does not initialise it.
1139 * b. uses realloc() to avoid moving data as much as possible when
1140 * resizing an allocated buffer.
1141 */
1142 template <typename ElemT>
1143 class simple_array
1144 {
1145 public:
1146
1147 typedef ElemT value_type;
1148 typedef std::size_t size_type;
1149 typedef ElemT &reference;
1150 typedef const ElemT &const_reference;
1151 typedef ElemT *pointer;
1152 typedef const ElemT *const_pointer;
1153
1154 static const size_type npos = static_cast<size_type>(-1);
1155
1156 public:
1157
1158 simple_array()
1159 : buffer_(NULL)
1160 , size_(0)
1161 , capacity_(0)
1162 {
1163 }
1164
1165 simple_array(const size_type initsize)
1166 : buffer_(NULL)
1167 , size_(0)
1168 , capacity_(0)
1169 {
1170 if (initsize)
1171 {
1172 buffer_ = static_cast<pointer>(std::malloc(initsize * sizeof (ElemT)));
1173
1174 if (buffer_ != NULL)
1175 size_ = capacity_ = initsize;
1176 else
1177 throw std::bad_alloc();
1178 }
1179 }
1180
1181 simple_array(const simple_array &right, size_type pos, size_type len = npos)
1182 : buffer_(NULL)
1183 , size_(0)
1184 , capacity_(0)
1185 {
1186 if (pos > right.size_)
1187 pos = right.size_;
1188
1189 {
1190 const size_type len2 = right.size_ - pos;
1191 if (len > len2)
1192 len = len2;
1193 }
1194
1195 if (len)
1196 {
1197 buffer_ = static_cast<pointer>(std::malloc(len * sizeof (ElemT)));
1198
1199 if (buffer_ != NULL)
1200 {
1201 for (capacity_ = len; size_ < capacity_;)
1202 buffer_[size_++] = right[pos++];
1203 }
1204 else
1205 {
1206 throw std::bad_alloc();
1207 }
1208 }
1209 }
1210
1211 simple_array(const simple_array &right)
1212 : buffer_(NULL)
1213 , size_(0)
1214 , capacity_(0)
1215 {
1216 operator=(right);
1217 }
1218
1219 #if defined(SRELL_CPP11_MOVE_ENABLED)
1220 simple_array(simple_array &&right) SRELL_NOEXCEPT
1221 : buffer_(right.buffer_)
1222 , size_(right.size_)
1223 , capacity_(right.capacity_)
1224 {
1225 right.size_ = 0;
1226 right.capacity_ = 0;
1227 right.buffer_ = NULL;
1228 }
1229 #endif
1230
1231 simple_array &operator=(const simple_array &right)
1232 {
1233 if (this != &right)
1234 {
1235 resize(right.size_);
1236 for (size_type i = 0; i < right.size_; ++i)
1237 buffer_[i] = right.buffer_[i];
1238 }
1239 return *this;
1240 }
1241
1242 #if defined(SRELL_CPP11_MOVE_ENABLED)
1243 simple_array &operator=(simple_array &&right) SRELL_NOEXCEPT
1244 {
1245 if (this != &right)
1246 {
1247 if (this->buffer_ != NULL)
1248 std::free(this->buffer_);
1249
1250 this->size_ = right.size_;
1251 this->capacity_ = right.capacity_;
1252 this->buffer_ = right.buffer_;
1253
1254 right.size_ = 0;
1255 right.capacity_ = 0;
1256 right.buffer_ = NULL;
1257 }
1258 return *this;
1259 }
1260 #endif
1261
1262 ~simple_array()
1263 {
1264 if (buffer_ != NULL)
1265 std::free(buffer_);
1266 }
1267
1268 size_type size() const
1269 {
1270 return size_;
1271 }
1272
1273 void clear()
1274 {
1275 size_ = 0;
1276 }
1277
1278 void resize(const size_type newsize)
1279 {
1280 if (newsize > capacity_)
1281 reserve(newsize);
1282
1283 size_ = newsize;
1284 }
1285
1286 void resize(const size_type newsize, const ElemT &type)
1287 {
1288 size_type oldsize = size_;
1289
1290 resize(newsize);
1291 for (; oldsize < size_; ++oldsize)
1292 buffer_[oldsize] = type;
1293 }
1294
1295 reference operator[](const size_type pos)
1296 {
1297 return buffer_[pos];
1298 }
1299
1300 const_reference operator[](const size_type pos) const
1301 {
1302 return buffer_[pos];
1303 }
1304
1305 void push_back(const_reference n)
1306 {
1307 const size_type oldsize = size_;
1308
1309 if (++size_ > capacity_)
1310 reserve(size_);
1311
1312 buffer_[oldsize] = n;
1313 }
1314
1315 void push_backncr(const ElemT e)
1316 {
1317 push_back(e);
1318 }
1319
1320 const_reference back() const
1321 {
1322 return buffer_[size_ - 1];
1323 }
1324
1325 reference back()
1326 {
1327 return buffer_[size_ - 1];
1328 }
1329
1330 void pop_back()
1331 {
1332 --size_;
1333 }
1334
1335 simple_array &operator+=(const simple_array &right)
1336 {
1337 return append(right);
1338 }
1339
1340 simple_array &append(const size_type size, const ElemT &type)
1341 {
1342 resize(size_ + size, type);
1343 return *this;
1344 }
1345
1346 simple_array &append(const simple_array &right)
1347 {
1348 size_type oldsize = size_;
1349
1350 resize(size_ + right.size_);
1351 for (size_type i = 0; i < right.size_; ++i, ++oldsize)
1352 buffer_[oldsize] = right.buffer_[i];
1353
1354 return *this;
1355 }
1356
1357 simple_array &append(const simple_array &right, size_type pos, size_type len /* = npos */)
1358 {
1359 {
1360 const size_type len2 = right.size_ - pos;
1361 if (len > len2)
1362 len = len2;
1363 }
1364
1365 size_type oldsize = size_;
1366
1367 resize(size_ + len);
1368 len += pos; // end.
1369 for (; pos < len; ++oldsize, ++pos)
1370 buffer_[oldsize] = right.buffer_[pos];
1371
1372 return *this;
1373 }
1374
1375 void erase(const size_type pos)
1376 {
1377 if (pos < size_)
1378 {
1379 std::memmove(buffer_ + pos, buffer_ + pos + 1, (size_ - pos - 1) * sizeof (ElemT));
1380 --size_;
1381 }
1382 }
1383 void erase(const size_type pos, const size_type len)
1384 {
1385 if (pos < size_)
1386 {
1387 size_type rmndr = size_ - pos;
1388
1389 if (rmndr > len)
1390 {
1391 rmndr -= len;
1392 std::memmove(buffer_ + pos, buffer_ + pos + len, rmndr * sizeof (ElemT));
1393 size_ -= len;
1394 }
1395 else
1396 size_ = pos;
1397 }
1398 }
1399
1400 // For rei_compiler class.
1401 void insert(const size_type pos, const ElemT &type)
1402 {
1403 move_forward(pos, 1);
1404 buffer_[pos] = type;
1405 }
1406
1407 void insert(size_type pos, const simple_array &right)
1408 {
1409 move_forward(pos, right.size_);
1410 for (size_type i = 0; i < right.size_; ++i, ++pos)
1411 buffer_[pos] = right.buffer_[i];
1412 }
1413
1414 void insert(size_type destpos, const simple_array &right, size_type srcpos, size_type srclen = npos)
1415 {
1416 {
1417 const size_type len2 = right.size_ - srcpos;
1418 if (srclen > len2)
1419 srclen = len2;
1420 }
1421
1422 move_forward(destpos, srclen);
1423 srclen += srcpos; // srcend.
1424 for (; srcpos < srclen; ++destpos, ++srcpos)
1425 buffer_[destpos] = right.buffer_[srcpos];
1426 }
1427
1428 simple_array &replace(size_type pos, size_type count, const simple_array &right)
1429 {
1430 if (count < right.size_)
1431 move_forward(pos + count, right.size_ - count);
1432 else if (count > right.size_)
1433 {
1434 const pointer base = buffer_ + pos;
1435
1436 std::memmove(base + right.size_, base + count, (size_ - pos - count) * sizeof (ElemT));
1437 size_ -= count - right.size_;
1438 }
1439
1440 for (size_type i = 0; i < right.size_; ++pos, ++i)
1441 buffer_[pos] = right[i];
1442
1443 return *this;
1444 }
1445
1446 size_type find(const value_type c, size_type pos = 0) const
1447 {
1448 for (; pos <= size_; ++pos)
1449 if (buffer_[pos] == c)
1450 return pos;
1451
1452 return npos;
1453 }
1454
1455 const_pointer data() const
1456 {
1457 return buffer_;
1458 }
1459
1460 size_type max_size() const
1461 {
1462 return maxsize_;
1463 }
1464
1465 void swap(simple_array &right)
1466 {
1467 if (this != &right)
1468 {
1469 const pointer tmpbuffer = this->buffer_;
1470 const size_type tmpsize = this->size_;
1471 const size_type tmpcapacity = this->capacity_;
1472
1473 this->buffer_ = right.buffer_;
1474 this->size_ = right.size_;
1475 this->capacity_ = right.capacity_;
1476
1477 right.buffer_ = tmpbuffer;
1478 right.size_ = tmpsize;
1479 right.capacity_ = tmpcapacity;
1480 }
1481 }
1482
1483 protected:
1484
1485 void reserve(const size_type newsize)
1486 {
1487 if (newsize <= maxsize_)
1488 {
1489 // capacity_ = newsize + (newsize >> 1); // newsize * 1.5.
1490 capacity_ = ((newsize >> 8) + 1) << 8; // Round up to a multiple of 256.
1491
1492 if (capacity_ > maxsize_)
1493 capacity_ = maxsize_;
1494
1495 const size_type newsize_in_byte = capacity_ * sizeof (ElemT);
1496 const pointer oldbuffer = buffer_;
1497
1498 buffer_ = static_cast<pointer>(std::realloc(buffer_, newsize_in_byte));
1499 if (buffer_ != NULL)
1500 return;
1501
1502 // Even if realloc() failed, already-existing buffer remains valid.
1503 std::free(oldbuffer);
1504 // buffer_ = NULL;
1505 size_ = capacity_ = 0;
1506 }
1507 throw std::bad_alloc();
1508 }
1509
1510 void move_forward(const size_type pos, const size_type count)
1511 {
1512 const size_type oldsize = size_;
1513
1514 resize(size_ + count);
1515
1516 if (pos < oldsize)
1517 {
1518 const pointer base = buffer_ + pos;
1519
1520 std::memmove(base + count, base, (oldsize - pos) * sizeof (ElemT));
1521 }
1522 }
1523
1524 protected:
1525
1526 pointer buffer_;
1527 size_type size_;
1528 size_type capacity_;
1529
1530 // static const size_type maxsize_ = (npos - sizeof (simple_array)) / sizeof (ElemT);
1531 static const size_type maxsize_ = (npos - sizeof (pointer) - sizeof (size_type) * 2) / sizeof (ElemT) / 2;
1532 };
1533 template <typename ElemT>
1534 const typename simple_array<ElemT>::size_type simple_array<ElemT>::npos;
1535 // simple_array
1536
1537 struct simple_stack : protected simple_array<char>
1538 {
1539 using simple_array<char>::size_type;
1540 using simple_array<char>::clear;
1541 using simple_array<char>::size;
1542 using simple_array<char>::resize;
1543
1544 template <typename T>
1545 void push_back_t(const T &n)
1546 {
1547 const size_type oldsize = size_;
1548
1549 size_ += (sizeof (T) + sizeof (void *) - 1) / sizeof (void *) * sizeof (void *);
1550 if (size_ > capacity_)
1551 reserve(size_);
1552
1553 *reinterpret_cast<T *>(buffer_ + oldsize) = n;
1554 }
1555
1556 template <typename T>
1557 T pop_back_t()
1558 {
1559 size_ -= (sizeof (T) + sizeof (void *) - 1) / sizeof (void *) * sizeof (void *);
1560 return *reinterpret_cast<const T *>(buffer_ + size_);
1561 }
1562
1563 size_type capacity() const
1564 {
1565 return capacity_;
1566 }
1567
1568 #if 0
1569
1570 template <typename Type>
1571 const Type &back_t() const
1572 {
1573 return *reinterpret_cast<const Type *>(buffer_ + size_ - sizeof (Type));
1574 }
1575 #endif
1576 };
1577 // simple_stack
1578
1579 } // namespace re_detail
1580
1581 // ... "rei_memory.hpp"]
1582 // ["rei_bitset.hpp" ...
1583
1584 namespace re_detail
1585 {
1586
1587 // Always uses a heap instead of the stack.
1588 template <const std::size_t Bits>
1589 class bitset
1590 {
1591 private:
1592
1593 typedef unsigned long array_type;
1594
1595 public:
1596
1597 bitset()
1598 : buffer_(static_cast<array_type *>(std::malloc(size_in_byte_)))
1599 {
1600 if (buffer_ != NULL)
1601 {
1602 reset();
1603 return;
1604 }
1605 throw std::bad_alloc();
1606 }
1607
1608 bitset(const bitset &right)
1609 : buffer_(static_cast<array_type *>(std::malloc(size_in_byte_)))
1610 {
1611 if (buffer_ != NULL)
1612 {
1613 operator=(right);
1614 return;
1615 }
1616 throw std::bad_alloc();
1617 }
1618
1619 #if defined(SRELL_CPP11_MOVE_ENABLED)
1620 bitset(bitset &&right) SRELL_NOEXCEPT
1621 : buffer_(right.buffer_)
1622 {
1623 right.buffer_ = NULL;
1624 }
1625 #endif
1626
1627 bitset &operator=(const bitset &right)
1628 {
1629 if (this != &right)
1630 {
1631 std::memcpy(buffer_, right.buffer_, size_in_byte_);
1632 }
1633 return *this;
1634 }
1635
1636 #if defined(SRELL_CPP11_MOVE_ENABLED)
1637 bitset &operator=(bitset &&right) SRELL_NOEXCEPT
1638 {
1639 if (this != &right)
1640 {
1641 if (this->buffer_ != NULL)
1642 std::free(this->buffer_);
1643
1644 this->buffer_ = right.buffer_;
1645 right.buffer_ = NULL;
1646 }
1647 return *this;
1648 }
1649 #endif
1650
1651 ~bitset()
1652 {
1653 if (buffer_ != NULL)
1654 std::free(buffer_);
1655 }
1656
1657 bitset &reset()
1658 {
1659 std::memset(buffer_, 0, size_in_byte_);
1660 return *this;
1661 }
1662
1663 bitset &reset(const std::size_t bit)
1664 {
1665 buffer_[bit / bits_per_elem_] &= ~(1ul << (bit & bitmask_));
1666 return *this;
1667 }
1668
1669 bitset &set(const std::size_t bit)
1670 {
1671 buffer_[bit / bits_per_elem_] |= (1ul << (bit & bitmask_));
1672 return *this;
1673 }
1674
1675 bool test(const std::size_t bit) const
1676 {
1677 return ((buffer_[bit / bits_per_elem_] >> (bit & bitmask_)) & 1) != 0;
1678 }
1679
1680 void swap(bitset &right)
1681 {
1682 if (this != &right)
1683 {
1684 array_type *const tmpbuffer = this->buffer_;
1685 this->buffer_ = right.buffer_;
1686 right.buffer_ = tmpbuffer;
1687 }
1688 }
1689
1690 private:
1691
1692 #if defined(__cpp_constexpr)
1693 static constexpr std::size_t pow2leN(const std::size_t n, const std::size_t p2)
1694 {
1695 return ((p2 << 1) == 0 || (p2 << 1) > n) ? p2 : pow2leN(n, p2 << 1);
1696 }
1697 static const std::size_t bits_per_elem_ = pow2leN(CHAR_BIT * sizeof (array_type), 8);
1698 #else
1699 static const std::size_t bpe_tmp_ = CHAR_BIT * sizeof (array_type);
1700 static const std::size_t bits_per_elem_ = bpe_tmp_ >= 64 ? 64 : (bpe_tmp_ >= 32 ? 32 : (bpe_tmp_ >= 16 ? 16 : 8));
1701 #endif
1702 static const std::size_t bitmask_ = bits_per_elem_ - 1;
1703 static const std::size_t arraylength_ = (Bits + bitmask_) / bits_per_elem_;
1704 static const std::size_t size_in_byte_ = arraylength_ * sizeof (array_type);
1705
1706 array_type *buffer_;
1707 };
1708
1709 } // namespace re_detail
1710
1711 // ... "rei_bitset.hpp"]
1712 // ["rei_ucf.hpp" ...
1713
1714 namespace re_detail
1715 {
1716
1717 #if !defined(SRELL_NO_UNICODE_ICASE)
1718
1719 namespace ucf_constants
1720 {
1721
1722 // ["srell_ucfdata2.h" ...
1723 // CaseFolding-15.1.0.txt
1724 // Date: 2023-05-12, 21:53:10 GMT
1725 // © 2023 Unicode®, Inc.
1726 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
1727 // For terms of use, see https://www.unicode.org/terms_of_use.html
1728
1729 template <typename T2, typename T3>
1730 struct unicode_casefolding
1731 {
1732 static const T2 ucf_maxcodepoint = 0x1E921;
1733 static const T3 ucf_deltatablesize = 0x1A00;
1734 static const T2 rev_maxcodepoint = 0x1E943;
1735 static const T3 rev_indextablesize = 0x1C00;
1736 static const T3 rev_charsettablesize = 4312; // 1 + 1427 * 2 + 1457
1737 static const T3 rev_maxset = 4;
1738 static const T2 eos = 0;
1739
1740 static const T2 ucf_deltatable[];
1741 static const T3 ucf_segmenttable[];
1742 static const T3 rev_indextable[];
1743 static const T3 rev_segmenttable[];
1744 static const T2 rev_charsettable[];
1745 };
1746 template <typename T2, typename T3>
1747 const T2 unicode_casefolding<T2, T3>::ucf_maxcodepoint;
1748 template <typename T2, typename T3>
1749 const T3 unicode_casefolding<T2, T3>::ucf_deltatablesize;
1750 template <typename T2, typename T3>
1751 const T2 unicode_casefolding<T2, T3>::rev_maxcodepoint;
1752 template <typename T2, typename T3>
1753 const T3 unicode_casefolding<T2, T3>::rev_indextablesize;
1754 template <typename T2, typename T3>
1755 const T3 unicode_casefolding<T2, T3>::rev_charsettablesize;
1756 template <typename T2, typename T3>
1757 const T3 unicode_casefolding<T2, T3>::rev_maxset;
1758 template <typename T2, typename T3>
1759 const T2 unicode_casefolding<T2, T3>::eos;
1760
1761 template <typename T2, typename T3>
1762 const T2 unicode_casefolding<T2, T3>::ucf_deltatable[] =
1763 {
1764 // For common (0)
1765 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1766 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1767 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1768 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1769 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1770 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1771 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1772 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1773 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1774 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1775 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1776 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1777 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1778 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1779 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1780 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1781
1782 // For u+00xx (256)
1783 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1784 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1785 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1786 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1787 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1788 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0,
1789 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1790 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1791 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1792 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1793 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1794 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1795 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1796 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
1797 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1798 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1799
1800 // For u+01xx (512)
1801 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1802 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1803 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1804 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,
1805 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0,
1806 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1807 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1808 1, 0, 1, 0, 1, 0, 1, 0, static_cast<T2>(-121), 1, 0, 1, 0, 1, 0, static_cast<T2>(-268),
1809 0, 210, 1, 0, 1, 0, 206, 1, 0, 205, 205, 1, 0, 0, 79, 202,
1810 203, 1, 0, 205, 207, 0, 211, 209, 1, 0, 0, 0, 211, 213, 0, 214,
1811 1, 0, 1, 0, 1, 0, 218, 1, 0, 218, 0, 0, 1, 0, 218, 1,
1812 0, 217, 217, 1, 0, 1, 0, 219, 1, 0, 0, 0, 1, 0, 0, 0,
1813 0, 0, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 0, 1,
1814 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0,
1815 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1816 0, 2, 1, 0, 1, 0, static_cast<T2>(-97), static_cast<T2>(-56), 1, 0, 1, 0, 1, 0, 1, 0,
1817
1818 // For u+02xx (768)
1819 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1820 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1821 static_cast<T2>(-130), 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1822 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10795, 1, 0, static_cast<T2>(-163), 10792, 0,
1823 0, 1, 0, static_cast<T2>(-195), 69, 71, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1824 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1825 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1826 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1827 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1828 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1829 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1830 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1831 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1832 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1833 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1834 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1835
1836 // For u+03xx (1024)
1837 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1838 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1839 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1840 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1841 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1842 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1843 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1844 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 116,
1845 0, 0, 0, 0, 0, 0, 38, 0, 37, 37, 37, 0, 64, 0, 63, 63,
1846 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1847 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0,
1848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1849 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
1850 static_cast<T2>(-30), static_cast<T2>(-25), 0, 0, 0, static_cast<T2>(-15), static_cast<T2>(-22), 0, 1, 0, 1, 0, 1, 0, 1, 0,
1851 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1852 static_cast<T2>(-54), static_cast<T2>(-48), 0, 0, static_cast<T2>(-60), static_cast<T2>(-64), 0, 1, 0, static_cast<T2>(-7), 1, 0, 0, static_cast<T2>(-130), static_cast<T2>(-130), static_cast<T2>(-130),
1853
1854 // For u+04xx (1280)
1855 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
1856 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1857 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1859 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1860 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1861 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1862 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1863 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
1864 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1865 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1866 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1867 15, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0,
1868 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1869 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1870 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1871
1872 // For u+05xx (1536)
1873 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1874 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1875 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1876 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1877 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1878 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1879 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1880 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1881 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1882 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1883 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1884 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1885 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1886 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1887 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1888 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1889
1890 // For u+10xx (1792)
1891 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1892 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1893 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1894 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1895 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1896 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1897 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1898 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1899 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1900 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1901 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264,
1902 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264,
1903 7264, 7264, 7264, 7264, 7264, 7264, 0, 7264, 0, 0, 0, 0, 0, 7264, 0, 0,
1904 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1905 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1906 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1907
1908 // For u+13xx (2048)
1909 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1910 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1911 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1912 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1913 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1914 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1916 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1917 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1918 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1919 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1920 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1921 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1922 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1923 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1924 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), 0, 0,
1925
1926 // For u+1Cxx (2304)
1927 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1928 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1929 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1930 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1931 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1932 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1933 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1934 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1935 static_cast<T2>(-6222), static_cast<T2>(-6221), static_cast<T2>(-6212), static_cast<T2>(-6210), static_cast<T2>(-6210), static_cast<T2>(-6211), static_cast<T2>(-6204), static_cast<T2>(-6180), 35267, 0, 0, 0, 0, 0, 0, 0,
1936 static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008),
1937 static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008),
1938 static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), 0, 0, static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008),
1939 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1940 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1941 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1942 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1943
1944 // For u+1Exx (2560)
1945 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1946 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1947 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1948 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1949 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1950 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1951 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1952 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1953 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1954 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, static_cast<T2>(-58), 0, 0, static_cast<T2>(-7615), 0,
1955 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1956 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1957 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1958 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1959 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1960 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1961
1962 // For u+1Fxx (2816)
1963 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
1964 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), 0, 0,
1965 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
1966 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
1967 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), 0, 0,
1968 0, 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), 0, static_cast<T2>(-8), 0, static_cast<T2>(-8), 0, static_cast<T2>(-8),
1969 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
1970 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1971 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
1972 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
1973 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
1974 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-74), static_cast<T2>(-74), static_cast<T2>(-9), 0, static_cast<T2>(-7173), 0,
1975 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-86), static_cast<T2>(-86), static_cast<T2>(-86), static_cast<T2>(-86), static_cast<T2>(-9), 0, 0, 0,
1976 0, 0, 0, static_cast<T2>(-7235), 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-100), static_cast<T2>(-100), 0, 0, 0, 0,
1977 0, 0, 0, static_cast<T2>(-7219), 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-112), static_cast<T2>(-112), static_cast<T2>(-7), 0, 0, 0,
1978 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-128), static_cast<T2>(-128), static_cast<T2>(-126), static_cast<T2>(-126), static_cast<T2>(-9), 0, 0, 0,
1979
1980 // For u+21xx (3072)
1981 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1982 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1983 0, 0, 0, 0, 0, 0, static_cast<T2>(-7517), 0, 0, 0, static_cast<T2>(-8383), static_cast<T2>(-8262), 0, 0, 0, 0,
1984 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1985 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1986 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1987 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1988 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1989 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1990 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1991 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1992 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1993 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1994 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1995 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1996 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1997
1998 // For u+24xx (3328)
1999 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2000 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2001 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2002 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2003 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2004 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2005 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2006 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2007 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2008 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2009 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2010 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
2011 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
2012 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2013 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2014 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2015
2016 // For u+2Cxx (3584)
2017 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
2018 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
2019 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
2020 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2021 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2022 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2023 1, 0, static_cast<T2>(-10743), static_cast<T2>(-3814), static_cast<T2>(-10727), 0, 0, 1, 0, 1, 0, 1, 0, static_cast<T2>(-10780), static_cast<T2>(-10749), static_cast<T2>(-10783),
2024 static_cast<T2>(-10782), 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-10815), static_cast<T2>(-10815),
2025 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2026 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2027 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2028 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2029 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2030 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2031 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
2032 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2033
2034 // For u+A6xx (3840)
2035 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2036 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2037 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2038 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2039 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2040 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2041 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
2042 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2043 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2044 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
2045 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2046 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2047 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2048 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2049 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2050 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2051
2052 // For u+A7xx (4096)
2053 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2054 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2055 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2056 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2057 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2058 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2059 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2060 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, static_cast<T2>(-35332), 1, 0,
2061 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, static_cast<T2>(-42280), 0, 0,
2062 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2063 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, static_cast<T2>(-42308), static_cast<T2>(-42319), static_cast<T2>(-42315), static_cast<T2>(-42305), static_cast<T2>(-42308), 0,
2064 static_cast<T2>(-42258), static_cast<T2>(-42282), static_cast<T2>(-42261), 928, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
2065 1, 0, 1, 0, static_cast<T2>(-48), static_cast<T2>(-42307), static_cast<T2>(-35384), 1, 0, 1, 0, 0, 0, 0, 0, 0,
2066 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
2067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2068 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2069
2070 // For u+ABxx (4352)
2071 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2072 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2073 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2074 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2075 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2076 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2077 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2078 static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
2079 static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
2080 static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
2081 static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
2082 static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
2083 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2084 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2085 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2086 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2087
2088 // For u+FBxx (4608)
2089 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2090 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2091 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2092 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2093 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2094 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2095 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2096 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2097 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2098 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2099 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2100 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2101 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2102 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2103 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2104 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2105
2106 // For u+FFxx (4864)
2107 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2109 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
2110 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0,
2111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2115 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2118 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2123
2124 // For u+104xx (5120)
2125 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
2126 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
2127 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0,
2128 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2129 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2130 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2131 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2132 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2133 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2134 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2135 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2136 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
2137 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
2138 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2139 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2140 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2141
2142 // For u+105xx (5376)
2143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2145 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2147 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2148 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2149 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2150 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39,
2151 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39,
2152 39, 39, 39, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2153 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2154 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2155 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2156 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2157 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2158 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2159
2160 // For u+10Cxx (5632)
2161 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2162 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2163 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2164 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2166 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2169 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2170 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2171 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2172 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2173 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2174 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2176 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2177
2178 // For u+118xx (5888)
2179 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2180 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2181 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2182 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2183 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2184 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2185 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2186 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2187 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2188 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2189 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
2190 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
2191 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2192 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2193 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2194 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2195
2196 // For u+16Exx (6144)
2197 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2198 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2199 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2200 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2201 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
2202 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
2203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2204 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2205 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2206 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2208 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2209 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2210 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2211 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2213
2214 // For u+1E9xx (6400)
2215 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
2216 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
2217 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2219 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2220 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2221 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2222 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2225 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2227 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2229 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2230 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2231 };
2232
2233 template <typename T2, typename T3>
2234 const T3 unicode_casefolding<T2, T3>::ucf_segmenttable[] =
2235 {
2236 256, 512, 768, 1024, 1280, 1536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2237 1792, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 0, 2560, 2816,
2238 0, 3072, 0, 0, 3328, 0, 0, 0, 0, 0, 0, 0, 3584, 0, 0, 0,
2239 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2241 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2242 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2243 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2244 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2245 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2246 0, 0, 0, 0, 0, 0, 3840, 4096, 0, 0, 0, 4352, 0, 0, 0, 0,
2247 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2248 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2249 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2250 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2251 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4608, 0, 0, 0, 4864,
2252 0, 0, 0, 0, 5120, 5376, 0, 0, 0, 0, 0, 0, 5632, 0, 0, 0,
2253 0, 0, 0, 0, 0, 0, 0, 0, 5888, 0, 0, 0, 0, 0, 0, 0,
2254 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2255 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6144, 0,
2259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2262 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2263 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2264 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2265 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2266 0, 0, 0, 0, 0, 0, 0, 0, 0, 6400
2267 };
2268
2269 template <typename T2, typename T3>
2270 const T3 unicode_casefolding<T2, T3>::rev_indextable[] =
2271 {
2272 // For common (0)
2273 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2274 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2275 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2276 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2277 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2282 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2283 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2284 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2285 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2286 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2287 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2288 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2289
2290 // For u+00xx (256)
2291 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2293 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2295 0, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 35, 38, 41, 44,
2296 47, 50, 53, 56, 60, 63, 66, 69, 72, 75, 78, 0, 0, 0, 0, 0,
2297 0, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 35, 38, 41, 44,
2298 47, 50, 53, 56, 60, 63, 66, 69, 72, 75, 78, 0, 0, 0, 0, 0,
2299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2300 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2302 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2303 85, 88, 91, 94, 97, 100, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131,
2304 134, 137, 140, 143, 146, 149, 152, 0, 155, 158, 161, 164, 167, 170, 173, 1924,
2305 85, 88, 91, 94, 97, 100, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131,
2306 134, 137, 140, 143, 146, 149, 152, 0, 155, 158, 161, 164, 167, 170, 173, 350,
2307
2308 // For u+21xx (512)
2309 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2310 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2311 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 31, 100, 0, 0, 0, 0,
2312 0, 0, 2365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2313 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2365, 0,
2314 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2315 2368, 2371, 2374, 2377, 2380, 2383, 2386, 2389, 2392, 2395, 2398, 2401, 2404, 2407, 2410, 2413,
2316 2368, 2371, 2374, 2377, 2380, 2383, 2386, 2389, 2392, 2395, 2398, 2401, 2404, 2407, 2410, 2413,
2317 0, 0, 0, 2416, 2416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2318 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2320 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2321 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2322 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2323 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2324 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2325
2326 // For u+01xx (768)
2327 176, 176, 179, 179, 182, 182, 185, 185, 188, 188, 191, 191, 194, 194, 197, 197,
2328 200, 200, 203, 203, 206, 206, 209, 209, 212, 212, 215, 215, 218, 218, 221, 221,
2329 224, 224, 227, 227, 230, 230, 233, 233, 236, 236, 239, 239, 242, 242, 245, 245,
2330 0, 0, 248, 248, 251, 251, 254, 254, 0, 257, 257, 260, 260, 263, 263, 266,
2331 266, 269, 269, 272, 272, 275, 275, 278, 278, 0, 281, 281, 284, 284, 287, 287,
2332 290, 290, 293, 293, 296, 296, 299, 299, 302, 302, 305, 305, 308, 308, 311, 311,
2333 314, 314, 317, 317, 320, 320, 323, 323, 326, 326, 329, 329, 332, 332, 335, 335,
2334 338, 338, 341, 341, 344, 344, 347, 347, 350, 353, 353, 356, 356, 359, 359, 56,
2335 651, 362, 365, 365, 368, 368, 371, 374, 374, 377, 380, 383, 383, 0, 386, 389,
2336 392, 395, 395, 398, 401, 540, 404, 407, 410, 410, 642, 0, 413, 416, 606, 419,
2337 422, 422, 425, 425, 428, 428, 431, 434, 434, 437, 0, 0, 440, 440, 443, 446,
2338 446, 449, 452, 455, 455, 458, 458, 461, 464, 464, 0, 0, 467, 467, 0, 543,
2339 0, 0, 0, 0, 470, 470, 470, 474, 474, 474, 478, 478, 478, 482, 482, 485,
2340 485, 488, 488, 491, 491, 494, 494, 497, 497, 500, 500, 503, 503, 386, 506, 506,
2341 509, 509, 512, 512, 515, 515, 518, 518, 521, 521, 524, 524, 527, 527, 530, 530,
2342 0, 533, 533, 533, 537, 537, 540, 543, 546, 546, 549, 549, 552, 552, 555, 555,
2343
2344 // For u+03xx (1024)
2345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2346 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2347 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2348 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2349 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2350 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2351 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2352 680, 680, 683, 683, 0, 0, 686, 686, 0, 0, 0, 843, 846, 849, 0, 689,
2353 0, 0, 0, 0, 0, 0, 692, 0, 695, 698, 701, 0, 704, 0, 707, 710,
2354 2317, 713, 716, 720, 723, 726, 730, 733, 736, 675, 741, 745, 81, 748, 751, 754,
2355 757, 761, 0, 765, 769, 772, 775, 779, 782, 785, 789, 792, 692, 695, 698, 701,
2356 2332, 713, 716, 720, 723, 726, 730, 733, 736, 675, 741, 745, 81, 748, 751, 754,
2357 757, 761, 765, 765, 769, 772, 775, 779, 782, 785, 789, 792, 704, 707, 710, 795,
2358 716, 736, 0, 0, 0, 775, 757, 795, 798, 798, 801, 801, 804, 804, 807, 807,
2359 810, 810, 813, 813, 816, 816, 819, 819, 822, 822, 825, 825, 828, 828, 831, 831,
2360 741, 761, 837, 689, 736, 726, 0, 834, 834, 837, 840, 840, 0, 843, 846, 849,
2361
2362 // For u+02xx (1280)
2363 558, 558, 561, 561, 564, 564, 567, 567, 570, 570, 573, 573, 576, 576, 579, 579,
2364 582, 582, 585, 585, 588, 588, 591, 591, 594, 594, 597, 597, 600, 600, 603, 603,
2365 606, 0, 609, 609, 612, 612, 615, 615, 618, 618, 621, 621, 624, 624, 627, 627,
2366 630, 630, 633, 633, 0, 0, 0, 0, 0, 0, 636, 639, 639, 642, 645, 2680,
2367 2683, 648, 648, 651, 654, 657, 660, 660, 663, 663, 666, 666, 669, 669, 672, 672,
2368 2668, 2662, 2671, 362, 371, 0, 377, 380, 0, 389, 0, 392, 3136, 0, 0, 0,
2369 398, 3139, 0, 401, 0, 3094, 3133, 0, 407, 404, 3145, 2644, 3142, 0, 0, 413,
2370 0, 2665, 416, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 2650, 0, 0,
2371 431, 0, 3187, 437, 0, 0, 0, 3151, 443, 654, 449, 452, 657, 0, 0, 0,
2372 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3154, 3148, 0,
2373 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2374 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2375 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2376 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2377 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2378 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2379
2380 // For u+2Cxx (1536)
2381 2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536, 2539, 2542,
2382 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2587, 2590,
2383 2593, 2596, 2599, 2602, 2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, 2635, 2638,
2384 2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536, 2539, 2542,
2385 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2587, 2590,
2386 2593, 2596, 2599, 2602, 2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, 2635, 2638,
2387 2641, 2641, 2644, 2647, 2650, 636, 645, 2653, 2653, 2656, 2656, 2659, 2659, 2662, 2665, 2668,
2388 2671, 0, 2674, 2674, 0, 2677, 2677, 0, 0, 0, 0, 0, 0, 0, 2680, 2683,
2389 2686, 2686, 2689, 2689, 2692, 2692, 2695, 2695, 2698, 2698, 2701, 2701, 2704, 2704, 2707, 2707,
2390 2710, 2710, 2713, 2713, 2716, 2716, 2719, 2719, 2722, 2722, 2725, 2725, 2728, 2728, 2731, 2731,
2391 2734, 2734, 2737, 2737, 2740, 2740, 2743, 2743, 2746, 2746, 2749, 2749, 2752, 2752, 2755, 2755,
2392 2758, 2758, 2761, 2761, 2764, 2764, 2767, 2767, 2770, 2770, 2773, 2773, 2776, 2776, 2779, 2779,
2393 2782, 2782, 2785, 2785, 2788, 2788, 2791, 2791, 2794, 2794, 2797, 2797, 2800, 2800, 2803, 2803,
2394 2806, 2806, 2809, 2809, 2812, 2812, 2815, 2815, 2818, 2818, 2821, 2821, 2824, 2824, 2827, 2827,
2395 2830, 2830, 2833, 2833, 0, 0, 0, 0, 0, 0, 0, 2836, 2836, 2839, 2839, 0,
2396 0, 0, 2842, 2842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2397
2398 // For u+1Fxx (1792)
2399 2071, 2074, 2077, 2080, 2083, 2086, 2089, 2092, 2071, 2074, 2077, 2080, 2083, 2086, 2089, 2092,
2400 2095, 2098, 2101, 2104, 2107, 2110, 0, 0, 2095, 2098, 2101, 2104, 2107, 2110, 0, 0,
2401 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134, 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134,
2402 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158,
2403 2161, 2164, 2167, 2170, 2173, 2176, 0, 0, 2161, 2164, 2167, 2170, 2173, 2176, 0, 0,
2404 0, 2179, 0, 2182, 0, 2185, 0, 2188, 0, 2179, 0, 2182, 0, 2185, 0, 2188,
2405 2191, 2194, 2197, 2200, 2203, 2206, 2209, 2212, 2191, 2194, 2197, 2200, 2203, 2206, 2209, 2212,
2406 2293, 2296, 2302, 2305, 2308, 2311, 2326, 2329, 2350, 2353, 2341, 2344, 2356, 2359, 0, 0,
2407 2215, 2218, 2221, 2224, 2227, 2230, 2233, 2236, 2215, 2218, 2221, 2224, 2227, 2230, 2233, 2236,
2408 2239, 2242, 2245, 2248, 2251, 2254, 2257, 2260, 2239, 2242, 2245, 2248, 2251, 2254, 2257, 2260,
2409 2263, 2266, 2269, 2272, 2275, 2278, 2281, 2284, 2263, 2266, 2269, 2272, 2275, 2278, 2281, 2284,
2410 2287, 2290, 0, 2299, 0, 0, 0, 0, 2287, 2290, 2293, 2296, 2299, 0, 675, 0,
2411 0, 0, 0, 2314, 0, 0, 0, 0, 2302, 2305, 2308, 2311, 2314, 0, 0, 0,
2412 2320, 2323, 0, 2317, 0, 0, 0, 0, 2320, 2323, 2326, 2329, 0, 0, 0, 0,
2413 2335, 2338, 0, 2332, 0, 2347, 0, 0, 2335, 2338, 2341, 2344, 2347, 0, 0, 0,
2414 0, 0, 0, 2362, 0, 0, 0, 0, 2350, 2353, 2356, 2359, 2362, 0, 0, 0,
2415
2416 // For u+04xx (2048)
2417 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897,
2418 900, 903, 906, 910, 913, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 948,
2419 951, 954, 958, 963, 966, 969, 972, 975, 978, 981, 984, 988, 991, 994, 997, 1000,
2420 900, 903, 906, 910, 913, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 948,
2421 951, 954, 958, 963, 966, 969, 972, 975, 978, 981, 984, 988, 991, 994, 997, 1000,
2422 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897,
2423 1003, 1003, 1006, 1006, 1010, 1010, 1013, 1013, 1016, 1016, 1019, 1019, 1022, 1022, 1025, 1025,
2424 1028, 1028, 1031, 1031, 1034, 1034, 1037, 1037, 1040, 1040, 1043, 1043, 1046, 1046, 1049, 1049,
2425 1052, 1052, 0, 0, 0, 0, 0, 0, 0, 0, 1055, 1055, 1058, 1058, 1061, 1061,
2426 1064, 1064, 1067, 1067, 1070, 1070, 1073, 1073, 1076, 1076, 1079, 1079, 1082, 1082, 1085, 1085,
2427 1088, 1088, 1091, 1091, 1094, 1094, 1097, 1097, 1100, 1100, 1103, 1103, 1106, 1106, 1109, 1109,
2428 1112, 1112, 1115, 1115, 1118, 1118, 1121, 1121, 1124, 1124, 1127, 1127, 1130, 1130, 1133, 1133,
2429 1136, 1139, 1139, 1142, 1142, 1145, 1145, 1148, 1148, 1151, 1151, 1154, 1154, 1157, 1157, 1136,
2430 1160, 1160, 1163, 1163, 1166, 1166, 1169, 1169, 1172, 1172, 1175, 1175, 1178, 1178, 1181, 1181,
2431 1184, 1184, 1187, 1187, 1190, 1190, 1193, 1193, 1196, 1196, 1199, 1199, 1202, 1202, 1205, 1205,
2432 1208, 1208, 1211, 1211, 1214, 1214, 1217, 1217, 1220, 1220, 1223, 1223, 1226, 1226, 1229, 1229,
2433
2434 // For u+1Cxx (2304)
2435 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2436 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2437 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2438 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2439 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2440 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2441 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2442 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2443 906, 913, 944, 954, 958, 958, 984, 1006, 1556, 0, 0, 0, 0, 0, 0, 0,
2444 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605,
2445 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653,
2446 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 0, 0, 1689, 1692, 1695,
2447 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2449 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2451
2452 // For u+05xx (2560)
2453 1232, 1232, 1235, 1235, 1238, 1238, 1241, 1241, 1244, 1244, 1247, 1247, 1250, 1250, 1253, 1253,
2454 1256, 1256, 1259, 1259, 1262, 1262, 1265, 1265, 1268, 1268, 1271, 1271, 1274, 1274, 1277, 1277,
2455 1280, 1280, 1283, 1283, 1286, 1286, 1289, 1289, 1292, 1292, 1295, 1295, 1298, 1298, 1301, 1301,
2456 0, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346,
2457 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394,
2458 1397, 1400, 1403, 1406, 1409, 1412, 1415, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2459 0, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346,
2460 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394,
2461 1397, 1400, 1403, 1406, 1409, 1412, 1415, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2462 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2463 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2464 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2465 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2466 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2467 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2468 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2469
2470 // For u+2Dxx (2816)
2471 1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 1460, 1463,
2472 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511,
2473 1514, 1517, 1520, 1523, 1526, 1529, 0, 1532, 0, 0, 0, 0, 0, 1535, 0, 0,
2474 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2475 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2476 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2477 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2478 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2479 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2480 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2481 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2482 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2483 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2484 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2485 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2486 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2487
2488 // For u+10xx (3072)
2489 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2490 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2491 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2492 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2493 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2494 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2495 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2496 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2497 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2498 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2499 1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 1460, 1463,
2500 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511,
2501 1514, 1517, 1520, 1523, 1526, 1529, 0, 1532, 0, 0, 0, 0, 0, 1535, 0, 0,
2502 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605,
2503 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653,
2504 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 0, 0, 1689, 1692, 1695,
2505
2506 // For u+13xx (3328)
2507 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2508 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2509 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2510 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2511 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2512 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2513 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2514 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2515 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2516 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2517 3211, 3214, 3217, 3220, 3223, 3226, 3229, 3232, 3235, 3238, 3241, 3244, 3247, 3250, 3253, 3256,
2518 3259, 3262, 3265, 3268, 3271, 3274, 3277, 3280, 3283, 3286, 3289, 3292, 3295, 3298, 3301, 3304,
2519 3307, 3310, 3313, 3316, 3319, 3322, 3325, 3328, 3331, 3334, 3337, 3340, 3343, 3346, 3349, 3352,
2520 3355, 3358, 3361, 3364, 3367, 3370, 3373, 3376, 3379, 3382, 3385, 3388, 3391, 3394, 3397, 3400,
2521 3403, 3406, 3409, 3412, 3415, 3418, 3421, 3424, 3427, 3430, 3433, 3436, 3439, 3442, 3445, 3448,
2522 1538, 1541, 1544, 1547, 1550, 1553, 0, 0, 1538, 1541, 1544, 1547, 1550, 1553, 0, 0,
2523
2524 // For u+A6xx (3584)
2525 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2526 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2527 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2528 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2529 2845, 2845, 2848, 2848, 2851, 2851, 2854, 2854, 2857, 2857, 1556, 1556, 2860, 2860, 2863, 2863,
2530 2866, 2866, 2869, 2869, 2872, 2872, 2875, 2875, 2878, 2878, 2881, 2881, 2884, 2884, 2887, 2887,
2531 2890, 2890, 2893, 2893, 2896, 2896, 2899, 2899, 2902, 2902, 2905, 2905, 2908, 2908, 0, 0,
2532 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2533 2911, 2911, 2914, 2914, 2917, 2917, 2920, 2920, 2923, 2923, 2926, 2926, 2929, 2929, 2932, 2932,
2534 2935, 2935, 2938, 2938, 2941, 2941, 2944, 2944, 2947, 2947, 2950, 2950, 0, 0, 0, 0,
2535 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2536 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2537 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2538 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2539 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2540 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2541
2542 // For u+1Exx (3840)
2543 1698, 1698, 1701, 1701, 1704, 1704, 1707, 1707, 1710, 1710, 1713, 1713, 1716, 1716, 1719, 1719,
2544 1722, 1722, 1725, 1725, 1728, 1728, 1731, 1731, 1734, 1734, 1737, 1737, 1740, 1740, 1743, 1743,
2545 1746, 1746, 1749, 1749, 1752, 1752, 1755, 1755, 1758, 1758, 1761, 1761, 1764, 1764, 1767, 1767,
2546 1770, 1770, 1773, 1773, 1776, 1776, 1779, 1779, 1782, 1782, 1785, 1785, 1788, 1788, 1791, 1791,
2547 1794, 1794, 1797, 1797, 1800, 1800, 1803, 1803, 1806, 1806, 1809, 1809, 1812, 1812, 1815, 1815,
2548 1818, 1818, 1821, 1821, 1824, 1824, 1827, 1827, 1830, 1830, 1833, 1833, 1836, 1836, 1839, 1839,
2549 1842, 1842, 1846, 1846, 1849, 1849, 1852, 1852, 1855, 1855, 1858, 1858, 1861, 1861, 1864, 1864,
2550 1867, 1867, 1870, 1870, 1873, 1873, 1876, 1876, 1879, 1879, 1882, 1882, 1885, 1885, 1888, 1888,
2551 1891, 1891, 1894, 1894, 1897, 1897, 1900, 1900, 1903, 1903, 1906, 1906, 1909, 1909, 1912, 1912,
2552 1915, 1915, 1918, 1918, 1921, 1921, 0, 0, 0, 0, 0, 1842, 0, 0, 1924, 0,
2553 1927, 1927, 1930, 1930, 1933, 1933, 1936, 1936, 1939, 1939, 1942, 1942, 1945, 1945, 1948, 1948,
2554 1951, 1951, 1954, 1954, 1957, 1957, 1960, 1960, 1963, 1963, 1966, 1966, 1969, 1969, 1972, 1972,
2555 1975, 1975, 1978, 1978, 1981, 1981, 1984, 1984, 1987, 1987, 1990, 1990, 1993, 1993, 1996, 1996,
2556 1999, 1999, 2002, 2002, 2005, 2005, 2008, 2008, 2011, 2011, 2014, 2014, 2017, 2017, 2020, 2020,
2557 2023, 2023, 2026, 2026, 2029, 2029, 2032, 2032, 2035, 2035, 2038, 2038, 2041, 2041, 2044, 2044,
2558 2047, 2047, 2050, 2050, 2053, 2053, 2056, 2056, 2059, 2059, 2062, 2062, 2065, 2065, 2068, 2068,
2559
2560 // For u+24xx (4096)
2561 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2562 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2563 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2564 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2565 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2566 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2567 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2568 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2569 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2570 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2571 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2572 0, 0, 0, 0, 0, 0, 2419, 2422, 2425, 2428, 2431, 2434, 2437, 2440, 2443, 2446,
2573 2449, 2452, 2455, 2458, 2461, 2464, 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 2491, 2494,
2574 2419, 2422, 2425, 2428, 2431, 2434, 2437, 2440, 2443, 2446, 2449, 2452, 2455, 2458, 2461, 2464,
2575 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 2491, 2494, 0, 0, 0, 0, 0, 0,
2576 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2577
2578 // For u+1Dxx (4352)
2579 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2581 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2582 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2583 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2584 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2585 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2586 0, 0, 0, 0, 0, 0, 0, 0, 0, 3073, 0, 0, 0, 2647, 0, 0,
2587 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3190, 0,
2588 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2589 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2590 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2591 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2592 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2593 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2594 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2595
2596 // For u+A7xx (4608)
2597 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2598 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2599 0, 0, 2953, 2953, 2956, 2956, 2959, 2959, 2962, 2962, 2965, 2965, 2968, 2968, 2971, 2971,
2600 0, 0, 2974, 2974, 2977, 2977, 2980, 2980, 2983, 2983, 2986, 2986, 2989, 2989, 2992, 2992,
2601 2995, 2995, 2998, 2998, 3001, 3001, 3004, 3004, 3007, 3007, 3010, 3010, 3013, 3013, 3016, 3016,
2602 3019, 3019, 3022, 3022, 3025, 3025, 3028, 3028, 3031, 3031, 3034, 3034, 3037, 3037, 3040, 3040,
2603 3043, 3043, 3046, 3046, 3049, 3049, 3052, 3052, 3055, 3055, 3058, 3058, 3061, 3061, 3064, 3064,
2604 0, 0, 0, 0, 0, 0, 0, 0, 0, 3067, 3067, 3070, 3070, 3073, 3076, 3076,
2605 3079, 3079, 3082, 3082, 3085, 3085, 3088, 3088, 0, 0, 0, 3091, 3091, 3094, 0, 0,
2606 3097, 3097, 3100, 3100, 3184, 0, 3103, 3103, 3106, 3106, 3109, 3109, 3112, 3112, 3115, 3115,
2607 3118, 3118, 3121, 3121, 3124, 3124, 3127, 3127, 3130, 3130, 3133, 3136, 3139, 3142, 3145, 0,
2608 3148, 3151, 3154, 3157, 3160, 3160, 3163, 3163, 3166, 3166, 3169, 3169, 3172, 3172, 3175, 3175,
2609 3178, 3178, 3181, 3181, 3184, 3187, 3190, 3193, 3193, 3196, 3196, 0, 0, 0, 0, 0,
2610 3199, 3199, 0, 0, 0, 0, 3202, 3202, 3205, 3205, 0, 0, 0, 0, 0, 0,
2611 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2612 0, 0, 0, 0, 0, 3208, 3208, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2613
2614 // For u+ABxx (4864)
2615 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2616 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2617 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2618 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2619 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2620 0, 0, 0, 3157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2621 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2622 3211, 3214, 3217, 3220, 3223, 3226, 3229, 3232, 3235, 3238, 3241, 3244, 3247, 3250, 3253, 3256,
2623 3259, 3262, 3265, 3268, 3271, 3274, 3277, 3280, 3283, 3286, 3289, 3292, 3295, 3298, 3301, 3304,
2624 3307, 3310, 3313, 3316, 3319, 3322, 3325, 3328, 3331, 3334, 3337, 3340, 3343, 3346, 3349, 3352,
2625 3355, 3358, 3361, 3364, 3367, 3370, 3373, 3376, 3379, 3382, 3385, 3388, 3391, 3394, 3397, 3400,
2626 3403, 3406, 3409, 3412, 3415, 3418, 3421, 3424, 3427, 3430, 3433, 3436, 3439, 3442, 3445, 3448,
2627 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2628 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2629 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2630 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2631
2632 // For u+FBxx (5120)
2633 0, 0, 0, 0, 0, 3451, 3451, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2634 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2635 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2636 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2637 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2638 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2639 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2640 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2641 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2642 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2643 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2644 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2645 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2646 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2647 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2648 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2649
2650 // For u+FFxx (5376)
2651 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2652 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2653 0, 3454, 3457, 3460, 3463, 3466, 3469, 3472, 3475, 3478, 3481, 3484, 3487, 3490, 3493, 3496,
2654 3499, 3502, 3505, 3508, 3511, 3514, 3517, 3520, 3523, 3526, 3529, 0, 0, 0, 0, 0,
2655 0, 3454, 3457, 3460, 3463, 3466, 3469, 3472, 3475, 3478, 3481, 3484, 3487, 3490, 3493, 3496,
2656 3499, 3502, 3505, 3508, 3511, 3514, 3517, 3520, 3523, 3526, 3529, 0, 0, 0, 0, 0,
2657 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2658 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2659 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2660 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2661 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2662 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2663 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2664 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2665 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2666 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2667
2668 // For u+104xx (5632)
2669 3532, 3535, 3538, 3541, 3544, 3547, 3550, 3553, 3556, 3559, 3562, 3565, 3568, 3571, 3574, 3577,
2670 3580, 3583, 3586, 3589, 3592, 3595, 3598, 3601, 3604, 3607, 3610, 3613, 3616, 3619, 3622, 3625,
2671 3628, 3631, 3634, 3637, 3640, 3643, 3646, 3649, 3532, 3535, 3538, 3541, 3544, 3547, 3550, 3553,
2672 3556, 3559, 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3583, 3586, 3589, 3592, 3595, 3598, 3601,
2673 3604, 3607, 3610, 3613, 3616, 3619, 3622, 3625, 3628, 3631, 3634, 3637, 3640, 3643, 3646, 3649,
2674 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2675 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2676 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2677 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2678 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2679 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2680 3652, 3655, 3658, 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697,
2681 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721, 3724, 3727, 3730, 3733, 3736, 3739, 3742, 3745,
2682 3748, 3751, 3754, 3757, 0, 0, 0, 0, 3652, 3655, 3658, 3661, 3664, 3667, 3670, 3673,
2683 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721,
2684 3724, 3727, 3730, 3733, 3736, 3739, 3742, 3745, 3748, 3751, 3754, 3757, 0, 0, 0, 0,
2685
2686 // For u+105xx (5888)
2687 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2688 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2689 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2690 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2691 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2692 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2693 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2694 3760, 3763, 3766, 3769, 3772, 3775, 3778, 3781, 3784, 3787, 3790, 0, 3793, 3796, 3799, 3802,
2695 3805, 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, 3832, 3835, 0, 3838, 3841, 3844, 3847,
2696 3850, 3853, 3856, 0, 3859, 3862, 0, 3760, 3763, 3766, 3769, 3772, 3775, 3778, 3781, 3784,
2697 3787, 3790, 0, 3793, 3796, 3799, 3802, 3805, 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829,
2698 3832, 3835, 0, 3838, 3841, 3844, 3847, 3850, 3853, 3856, 0, 3859, 3862, 0, 0, 0,
2699 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2700 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2701 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2702 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2703
2704 // For u+10Cxx (6144)
2705 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2706 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2707 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2708 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2709 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2711 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2712 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2713 3865, 3868, 3871, 3874, 3877, 3880, 3883, 3886, 3889, 3892, 3895, 3898, 3901, 3904, 3907, 3910,
2714 3913, 3916, 3919, 3922, 3925, 3928, 3931, 3934, 3937, 3940, 3943, 3946, 3949, 3952, 3955, 3958,
2715 3961, 3964, 3967, 3970, 3973, 3976, 3979, 3982, 3985, 3988, 3991, 3994, 3997, 4000, 4003, 4006,
2716 4009, 4012, 4015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2717 3865, 3868, 3871, 3874, 3877, 3880, 3883, 3886, 3889, 3892, 3895, 3898, 3901, 3904, 3907, 3910,
2718 3913, 3916, 3919, 3922, 3925, 3928, 3931, 3934, 3937, 3940, 3943, 3946, 3949, 3952, 3955, 3958,
2719 3961, 3964, 3967, 3970, 3973, 3976, 3979, 3982, 3985, 3988, 3991, 3994, 3997, 4000, 4003, 4006,
2720 4009, 4012, 4015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2721
2722 // For u+118xx (6400)
2723 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2724 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2725 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2726 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2727 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2728 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2729 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2730 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2731 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2732 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2733 4018, 4021, 4024, 4027, 4030, 4033, 4036, 4039, 4042, 4045, 4048, 4051, 4054, 4057, 4060, 4063,
2734 4066, 4069, 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, 4096, 4099, 4102, 4105, 4108, 4111,
2735 4018, 4021, 4024, 4027, 4030, 4033, 4036, 4039, 4042, 4045, 4048, 4051, 4054, 4057, 4060, 4063,
2736 4066, 4069, 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, 4096, 4099, 4102, 4105, 4108, 4111,
2737 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2738 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2739
2740 // For u+16Exx (6656)
2741 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2742 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2743 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2744 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2745 4114, 4117, 4120, 4123, 4126, 4129, 4132, 4135, 4138, 4141, 4144, 4147, 4150, 4153, 4156, 4159,
2746 4162, 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, 4189, 4192, 4195, 4198, 4201, 4204, 4207,
2747 4114, 4117, 4120, 4123, 4126, 4129, 4132, 4135, 4138, 4141, 4144, 4147, 4150, 4153, 4156, 4159,
2748 4162, 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, 4189, 4192, 4195, 4198, 4201, 4204, 4207,
2749 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2750 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2751 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2752 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2753 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2754 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2755 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2756 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2757
2758 // For u+1E9xx (6912)
2759 4210, 4213, 4216, 4219, 4222, 4225, 4228, 4231, 4234, 4237, 4240, 4243, 4246, 4249, 4252, 4255,
2760 4258, 4261, 4264, 4267, 4270, 4273, 4276, 4279, 4282, 4285, 4288, 4291, 4294, 4297, 4300, 4303,
2761 4306, 4309, 4210, 4213, 4216, 4219, 4222, 4225, 4228, 4231, 4234, 4237, 4240, 4243, 4246, 4249,
2762 4252, 4255, 4258, 4261, 4264, 4267, 4270, 4273, 4276, 4279, 4282, 4285, 4288, 4291, 4294, 4297,
2763 4300, 4303, 4306, 4309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2764 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2765 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2766 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2767 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2768 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2769 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2770 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2771 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2772 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2773 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2774 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2775 };
2776
2777 template <typename T2, typename T3>
2778 const T3 unicode_casefolding<T2, T3>::rev_segmenttable[] =
2779 {
2780 256, 768, 1280, 1024, 2048, 2560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2781 3072, 0, 0, 3328, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 4352, 3840, 1792,
2782 0, 512, 0, 0, 4096, 0, 0, 0, 0, 0, 0, 0, 1536, 2816, 0, 0,
2783 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2784 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2785 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2786 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2787 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2788 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2789 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2790 0, 0, 0, 0, 0, 0, 3584, 4608, 0, 0, 0, 4864, 0, 0, 0, 0,
2791 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2792 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2793 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2794 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5120, 0, 0, 0, 5376,
2796 0, 0, 0, 0, 5632, 5888, 0, 0, 0, 0, 0, 0, 6144, 0, 0, 0,
2797 0, 0, 0, 0, 0, 0, 0, 0, 6400, 0, 0, 0, 0, 0, 0, 0,
2798 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2799 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2800 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2801 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2802 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6656, 0,
2803 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2804 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2805 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2806 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2807 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2808 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2809 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2810 0, 0, 0, 0, 0, 0, 0, 0, 0, 6912
2811 };
2812
2813 template <typename T2, typename T3>
2814 const T2 unicode_casefolding<T2, T3>::rev_charsettable[] =
2815 {
2816 eos, // 0
2817 0x0061, 0x0041, eos,
2818 0x0062, 0x0042, eos,
2819 0x0063, 0x0043, eos,
2820 0x0064, 0x0044, eos, // 10
2821 0x0065, 0x0045, eos,
2822 0x0066, 0x0046, eos,
2823 0x0067, 0x0047, eos,
2824 0x0068, 0x0048, eos, // 22
2825 0x0069, 0x0049, eos,
2826 0x006A, 0x004A, eos,
2827 0x006B, 0x004B, 0x212A, eos, // 31
2828 0x006C, 0x004C, eos,
2829 0x006D, 0x004D, eos,
2830 0x006E, 0x004E, eos, // 41
2831 0x006F, 0x004F, eos,
2832 0x0070, 0x0050, eos,
2833 0x0071, 0x0051, eos, // 50
2834 0x0072, 0x0052, eos,
2835 0x0073, 0x0053, 0x017F, eos,
2836 0x0074, 0x0054, eos, // 60
2837 0x0075, 0x0055, eos,
2838 0x0076, 0x0056, eos,
2839 0x0077, 0x0057, eos,
2840 0x0078, 0x0058, eos, // 72
2841 0x0079, 0x0059, eos,
2842 0x007A, 0x005A, eos,
2843 0x03BC, 0x00B5, 0x039C, eos, // 81
2844 0x00E0, 0x00C0, eos,
2845 0x00E1, 0x00C1, eos,
2846 0x00E2, 0x00C2, eos, // 91
2847 0x00E3, 0x00C3, eos,
2848 0x00E4, 0x00C4, eos,
2849 0x00E5, 0x00C5, 0x212B, eos, // 100
2850 0x00E6, 0x00C6, eos,
2851 0x00E7, 0x00C7, eos,
2852 0x00E8, 0x00C8, eos, // 110
2853 0x00E9, 0x00C9, eos,
2854 0x00EA, 0x00CA, eos,
2855 0x00EB, 0x00CB, eos,
2856 0x00EC, 0x00CC, eos, // 122
2857 0x00ED, 0x00CD, eos,
2858 0x00EE, 0x00CE, eos,
2859 0x00EF, 0x00CF, eos, // 131
2860 0x00F0, 0x00D0, eos,
2861 0x00F1, 0x00D1, eos,
2862 0x00F2, 0x00D2, eos, // 140
2863 0x00F3, 0x00D3, eos,
2864 0x00F4, 0x00D4, eos,
2865 0x00F5, 0x00D5, eos,
2866 0x00F6, 0x00D6, eos, // 152
2867 0x00F8, 0x00D8, eos,
2868 0x00F9, 0x00D9, eos,
2869 0x00FA, 0x00DA, eos, // 161
2870 0x00FB, 0x00DB, eos,
2871 0x00FC, 0x00DC, eos,
2872 0x00FD, 0x00DD, eos, // 170
2873 0x00FE, 0x00DE, eos,
2874 0x0101, 0x0100, eos,
2875 0x0103, 0x0102, eos,
2876 0x0105, 0x0104, eos, // 182
2877 0x0107, 0x0106, eos,
2878 0x0109, 0x0108, eos,
2879 0x010B, 0x010A, eos, // 191
2880 0x010D, 0x010C, eos,
2881 0x010F, 0x010E, eos,
2882 0x0111, 0x0110, eos, // 200
2883 0x0113, 0x0112, eos,
2884 0x0115, 0x0114, eos,
2885 0x0117, 0x0116, eos,
2886 0x0119, 0x0118, eos, // 212
2887 0x011B, 0x011A, eos,
2888 0x011D, 0x011C, eos,
2889 0x011F, 0x011E, eos, // 221
2890 0x0121, 0x0120, eos,
2891 0x0123, 0x0122, eos,
2892 0x0125, 0x0124, eos, // 230
2893 0x0127, 0x0126, eos,
2894 0x0129, 0x0128, eos,
2895 0x012B, 0x012A, eos,
2896 0x012D, 0x012C, eos, // 242
2897 0x012F, 0x012E, eos,
2898 0x0133, 0x0132, eos,
2899 0x0135, 0x0134, eos, // 251
2900 0x0137, 0x0136, eos,
2901 0x013A, 0x0139, eos,
2902 0x013C, 0x013B, eos, // 260
2903 0x013E, 0x013D, eos,
2904 0x0140, 0x013F, eos,
2905 0x0142, 0x0141, eos,
2906 0x0144, 0x0143, eos, // 272
2907 0x0146, 0x0145, eos,
2908 0x0148, 0x0147, eos,
2909 0x014B, 0x014A, eos, // 281
2910 0x014D, 0x014C, eos,
2911 0x014F, 0x014E, eos,
2912 0x0151, 0x0150, eos, // 290
2913 0x0153, 0x0152, eos,
2914 0x0155, 0x0154, eos,
2915 0x0157, 0x0156, eos,
2916 0x0159, 0x0158, eos, // 302
2917 0x015B, 0x015A, eos,
2918 0x015D, 0x015C, eos,
2919 0x015F, 0x015E, eos, // 311
2920 0x0161, 0x0160, eos,
2921 0x0163, 0x0162, eos,
2922 0x0165, 0x0164, eos, // 320
2923 0x0167, 0x0166, eos,
2924 0x0169, 0x0168, eos,
2925 0x016B, 0x016A, eos,
2926 0x016D, 0x016C, eos, // 332
2927 0x016F, 0x016E, eos,
2928 0x0171, 0x0170, eos,
2929 0x0173, 0x0172, eos, // 341
2930 0x0175, 0x0174, eos,
2931 0x0177, 0x0176, eos,
2932 0x00FF, 0x0178, eos, // 350
2933 0x017A, 0x0179, eos,
2934 0x017C, 0x017B, eos,
2935 0x017E, 0x017D, eos,
2936 0x0253, 0x0181, eos, // 362
2937 0x0183, 0x0182, eos,
2938 0x0185, 0x0184, eos,
2939 0x0254, 0x0186, eos, // 371
2940 0x0188, 0x0187, eos,
2941 0x0256, 0x0189, eos,
2942 0x0257, 0x018A, eos, // 380
2943 0x018C, 0x018B, eos,
2944 0x01DD, 0x018E, eos,
2945 0x0259, 0x018F, eos,
2946 0x025B, 0x0190, eos, // 392
2947 0x0192, 0x0191, eos,
2948 0x0260, 0x0193, eos,
2949 0x0263, 0x0194, eos, // 401
2950 0x0269, 0x0196, eos,
2951 0x0268, 0x0197, eos,
2952 0x0199, 0x0198, eos, // 410
2953 0x026F, 0x019C, eos,
2954 0x0272, 0x019D, eos,
2955 0x0275, 0x019F, eos,
2956 0x01A1, 0x01A0, eos, // 422
2957 0x01A3, 0x01A2, eos,
2958 0x01A5, 0x01A4, eos,
2959 0x0280, 0x01A6, eos, // 431
2960 0x01A8, 0x01A7, eos,
2961 0x0283, 0x01A9, eos,
2962 0x01AD, 0x01AC, eos, // 440
2963 0x0288, 0x01AE, eos,
2964 0x01B0, 0x01AF, eos,
2965 0x028A, 0x01B1, eos,
2966 0x028B, 0x01B2, eos, // 452
2967 0x01B4, 0x01B3, eos,
2968 0x01B6, 0x01B5, eos,
2969 0x0292, 0x01B7, eos, // 461
2970 0x01B9, 0x01B8, eos,
2971 0x01BD, 0x01BC, eos,
2972 0x01C6, 0x01C4, 0x01C5, eos, // 470
2973 0x01C9, 0x01C7, 0x01C8, eos,
2974 0x01CC, 0x01CA, 0x01CB, eos,
2975 0x01CE, 0x01CD, eos, // 482
2976 0x01D0, 0x01CF, eos,
2977 0x01D2, 0x01D1, eos,
2978 0x01D4, 0x01D3, eos, // 491
2979 0x01D6, 0x01D5, eos,
2980 0x01D8, 0x01D7, eos,
2981 0x01DA, 0x01D9, eos, // 500
2982 0x01DC, 0x01DB, eos,
2983 0x01DF, 0x01DE, eos,
2984 0x01E1, 0x01E0, eos,
2985 0x01E3, 0x01E2, eos, // 512
2986 0x01E5, 0x01E4, eos,
2987 0x01E7, 0x01E6, eos,
2988 0x01E9, 0x01E8, eos, // 521
2989 0x01EB, 0x01EA, eos,
2990 0x01ED, 0x01EC, eos,
2991 0x01EF, 0x01EE, eos, // 530
2992 0x01F3, 0x01F1, 0x01F2, eos,
2993 0x01F5, 0x01F4, eos,
2994 0x0195, 0x01F6, eos, // 540
2995 0x01BF, 0x01F7, eos,
2996 0x01F9, 0x01F8, eos,
2997 0x01FB, 0x01FA, eos,
2998 0x01FD, 0x01FC, eos, // 552
2999 0x01FF, 0x01FE, eos,
3000 0x0201, 0x0200, eos,
3001 0x0203, 0x0202, eos, // 561
3002 0x0205, 0x0204, eos,
3003 0x0207, 0x0206, eos,
3004 0x0209, 0x0208, eos, // 570
3005 0x020B, 0x020A, eos,
3006 0x020D, 0x020C, eos,
3007 0x020F, 0x020E, eos,
3008 0x0211, 0x0210, eos, // 582
3009 0x0213, 0x0212, eos,
3010 0x0215, 0x0214, eos,
3011 0x0217, 0x0216, eos, // 591
3012 0x0219, 0x0218, eos,
3013 0x021B, 0x021A, eos,
3014 0x021D, 0x021C, eos, // 600
3015 0x021F, 0x021E, eos,
3016 0x019E, 0x0220, eos,
3017 0x0223, 0x0222, eos,
3018 0x0225, 0x0224, eos, // 612
3019 0x0227, 0x0226, eos,
3020 0x0229, 0x0228, eos,
3021 0x022B, 0x022A, eos, // 621
3022 0x022D, 0x022C, eos,
3023 0x022F, 0x022E, eos,
3024 0x0231, 0x0230, eos, // 630
3025 0x0233, 0x0232, eos,
3026 0x2C65, 0x023A, eos,
3027 0x023C, 0x023B, eos,
3028 0x019A, 0x023D, eos, // 642
3029 0x2C66, 0x023E, eos,
3030 0x0242, 0x0241, eos,
3031 0x0180, 0x0243, eos, // 651
3032 0x0289, 0x0244, eos,
3033 0x028C, 0x0245, eos,
3034 0x0247, 0x0246, eos, // 660
3035 0x0249, 0x0248, eos,
3036 0x024B, 0x024A, eos,
3037 0x024D, 0x024C, eos,
3038 0x024F, 0x024E, eos, // 672
3039 0x03B9, 0x0345, 0x0399, 0x1FBE, eos,
3040 0x0371, 0x0370, eos, // 680
3041 0x0373, 0x0372, eos,
3042 0x0377, 0x0376, eos,
3043 0x03F3, 0x037F, eos,
3044 0x03AC, 0x0386, eos, // 692
3045 0x03AD, 0x0388, eos,
3046 0x03AE, 0x0389, eos,
3047 0x03AF, 0x038A, eos, // 701
3048 0x03CC, 0x038C, eos,
3049 0x03CD, 0x038E, eos,
3050 0x03CE, 0x038F, eos, // 710
3051 0x03B1, 0x0391, eos,
3052 0x03B2, 0x0392, 0x03D0, eos,
3053 0x03B3, 0x0393, eos, // 720
3054 0x03B4, 0x0394, eos,
3055 0x03B5, 0x0395, 0x03F5, eos,
3056 0x03B6, 0x0396, eos, // 730
3057 0x03B7, 0x0397, eos,
3058 0x03B8, 0x0398, 0x03D1, 0x03F4, eos,
3059 0x03BA, 0x039A, 0x03F0, eos, // 741
3060 0x03BB, 0x039B, eos,
3061 0x03BD, 0x039D, eos,
3062 0x03BE, 0x039E, eos, // 751
3063 0x03BF, 0x039F, eos,
3064 0x03C0, 0x03A0, 0x03D6, eos,
3065 0x03C1, 0x03A1, 0x03F1, eos, // 761
3066 0x03C3, 0x03A3, 0x03C2, eos,
3067 0x03C4, 0x03A4, eos,
3068 0x03C5, 0x03A5, eos, // 772
3069 0x03C6, 0x03A6, 0x03D5, eos,
3070 0x03C7, 0x03A7, eos,
3071 0x03C8, 0x03A8, eos, // 782
3072 0x03C9, 0x03A9, 0x2126, eos,
3073 0x03CA, 0x03AA, eos,
3074 0x03CB, 0x03AB, eos, // 792
3075 0x03D7, 0x03CF, eos,
3076 0x03D9, 0x03D8, eos,
3077 0x03DB, 0x03DA, eos, // 801
3078 0x03DD, 0x03DC, eos,
3079 0x03DF, 0x03DE, eos,
3080 0x03E1, 0x03E0, eos, // 810
3081 0x03E3, 0x03E2, eos,
3082 0x03E5, 0x03E4, eos,
3083 0x03E7, 0x03E6, eos,
3084 0x03E9, 0x03E8, eos, // 822
3085 0x03EB, 0x03EA, eos,
3086 0x03ED, 0x03EC, eos,
3087 0x03EF, 0x03EE, eos, // 831
3088 0x03F8, 0x03F7, eos,
3089 0x03F2, 0x03F9, eos,
3090 0x03FB, 0x03FA, eos, // 840
3091 0x037B, 0x03FD, eos,
3092 0x037C, 0x03FE, eos,
3093 0x037D, 0x03FF, eos,
3094 0x0450, 0x0400, eos, // 852
3095 0x0451, 0x0401, eos,
3096 0x0452, 0x0402, eos,
3097 0x0453, 0x0403, eos, // 861
3098 0x0454, 0x0404, eos,
3099 0x0455, 0x0405, eos,
3100 0x0456, 0x0406, eos, // 870
3101 0x0457, 0x0407, eos,
3102 0x0458, 0x0408, eos,
3103 0x0459, 0x0409, eos,
3104 0x045A, 0x040A, eos, // 882
3105 0x045B, 0x040B, eos,
3106 0x045C, 0x040C, eos,
3107 0x045D, 0x040D, eos, // 891
3108 0x045E, 0x040E, eos,
3109 0x045F, 0x040F, eos,
3110 0x0430, 0x0410, eos, // 900
3111 0x0431, 0x0411, eos,
3112 0x0432, 0x0412, 0x1C80, eos,
3113 0x0433, 0x0413, eos, // 910
3114 0x0434, 0x0414, 0x1C81, eos,
3115 0x0435, 0x0415, eos,
3116 0x0436, 0x0416, eos, // 920
3117 0x0437, 0x0417, eos,
3118 0x0438, 0x0418, eos,
3119 0x0439, 0x0419, eos,
3120 0x043A, 0x041A, eos, // 932
3121 0x043B, 0x041B, eos,
3122 0x043C, 0x041C, eos,
3123 0x043D, 0x041D, eos, // 941
3124 0x043E, 0x041E, 0x1C82, eos,
3125 0x043F, 0x041F, eos,
3126 0x0440, 0x0420, eos, // 951
3127 0x0441, 0x0421, 0x1C83, eos,
3128 0x0442, 0x0422, 0x1C84, 0x1C85, eos,
3129 0x0443, 0x0423, eos, // 963
3130 0x0444, 0x0424, eos,
3131 0x0445, 0x0425, eos,
3132 0x0446, 0x0426, eos, // 972
3133 0x0447, 0x0427, eos,
3134 0x0448, 0x0428, eos,
3135 0x0449, 0x0429, eos, // 981
3136 0x044A, 0x042A, 0x1C86, eos,
3137 0x044B, 0x042B, eos,
3138 0x044C, 0x042C, eos, // 991
3139 0x044D, 0x042D, eos,
3140 0x044E, 0x042E, eos,
3141 0x044F, 0x042F, eos, // 1000
3142 0x0461, 0x0460, eos,
3143 0x0463, 0x0462, 0x1C87, eos,
3144 0x0465, 0x0464, eos, // 1010
3145 0x0467, 0x0466, eos,
3146 0x0469, 0x0468, eos,
3147 0x046B, 0x046A, eos,
3148 0x046D, 0x046C, eos, // 1022
3149 0x046F, 0x046E, eos,
3150 0x0471, 0x0470, eos,
3151 0x0473, 0x0472, eos, // 1031
3152 0x0475, 0x0474, eos,
3153 0x0477, 0x0476, eos,
3154 0x0479, 0x0478, eos, // 1040
3155 0x047B, 0x047A, eos,
3156 0x047D, 0x047C, eos,
3157 0x047F, 0x047E, eos,
3158 0x0481, 0x0480, eos, // 1052
3159 0x048B, 0x048A, eos,
3160 0x048D, 0x048C, eos,
3161 0x048F, 0x048E, eos, // 1061
3162 0x0491, 0x0490, eos,
3163 0x0493, 0x0492, eos,
3164 0x0495, 0x0494, eos, // 1070
3165 0x0497, 0x0496, eos,
3166 0x0499, 0x0498, eos,
3167 0x049B, 0x049A, eos,
3168 0x049D, 0x049C, eos, // 1082
3169 0x049F, 0x049E, eos,
3170 0x04A1, 0x04A0, eos,
3171 0x04A3, 0x04A2, eos, // 1091
3172 0x04A5, 0x04A4, eos,
3173 0x04A7, 0x04A6, eos,
3174 0x04A9, 0x04A8, eos, // 1100
3175 0x04AB, 0x04AA, eos,
3176 0x04AD, 0x04AC, eos,
3177 0x04AF, 0x04AE, eos,
3178 0x04B1, 0x04B0, eos, // 1112
3179 0x04B3, 0x04B2, eos,
3180 0x04B5, 0x04B4, eos,
3181 0x04B7, 0x04B6, eos, // 1121
3182 0x04B9, 0x04B8, eos,
3183 0x04BB, 0x04BA, eos,
3184 0x04BD, 0x04BC, eos, // 1130
3185 0x04BF, 0x04BE, eos,
3186 0x04CF, 0x04C0, eos,
3187 0x04C2, 0x04C1, eos,
3188 0x04C4, 0x04C3, eos, // 1142
3189 0x04C6, 0x04C5, eos,
3190 0x04C8, 0x04C7, eos,
3191 0x04CA, 0x04C9, eos, // 1151
3192 0x04CC, 0x04CB, eos,
3193 0x04CE, 0x04CD, eos,
3194 0x04D1, 0x04D0, eos, // 1160
3195 0x04D3, 0x04D2, eos,
3196 0x04D5, 0x04D4, eos,
3197 0x04D7, 0x04D6, eos,
3198 0x04D9, 0x04D8, eos, // 1172
3199 0x04DB, 0x04DA, eos,
3200 0x04DD, 0x04DC, eos,
3201 0x04DF, 0x04DE, eos, // 1181
3202 0x04E1, 0x04E0, eos,
3203 0x04E3, 0x04E2, eos,
3204 0x04E5, 0x04E4, eos, // 1190
3205 0x04E7, 0x04E6, eos,
3206 0x04E9, 0x04E8, eos,
3207 0x04EB, 0x04EA, eos,
3208 0x04ED, 0x04EC, eos, // 1202
3209 0x04EF, 0x04EE, eos,
3210 0x04F1, 0x04F0, eos,
3211 0x04F3, 0x04F2, eos, // 1211
3212 0x04F5, 0x04F4, eos,
3213 0x04F7, 0x04F6, eos,
3214 0x04F9, 0x04F8, eos, // 1220
3215 0x04FB, 0x04FA, eos,
3216 0x04FD, 0x04FC, eos,
3217 0x04FF, 0x04FE, eos,
3218 0x0501, 0x0500, eos, // 1232
3219 0x0503, 0x0502, eos,
3220 0x0505, 0x0504, eos,
3221 0x0507, 0x0506, eos, // 1241
3222 0x0509, 0x0508, eos,
3223 0x050B, 0x050A, eos,
3224 0x050D, 0x050C, eos, // 1250
3225 0x050F, 0x050E, eos,
3226 0x0511, 0x0510, eos,
3227 0x0513, 0x0512, eos,
3228 0x0515, 0x0514, eos, // 1262
3229 0x0517, 0x0516, eos,
3230 0x0519, 0x0518, eos,
3231 0x051B, 0x051A, eos, // 1271
3232 0x051D, 0x051C, eos,
3233 0x051F, 0x051E, eos,
3234 0x0521, 0x0520, eos, // 1280
3235 0x0523, 0x0522, eos,
3236 0x0525, 0x0524, eos,
3237 0x0527, 0x0526, eos,
3238 0x0529, 0x0528, eos, // 1292
3239 0x052B, 0x052A, eos,
3240 0x052D, 0x052C, eos,
3241 0x052F, 0x052E, eos, // 1301
3242 0x0561, 0x0531, eos,
3243 0x0562, 0x0532, eos,
3244 0x0563, 0x0533, eos, // 1310
3245 0x0564, 0x0534, eos,
3246 0x0565, 0x0535, eos,
3247 0x0566, 0x0536, eos,
3248 0x0567, 0x0537, eos, // 1322
3249 0x0568, 0x0538, eos,
3250 0x0569, 0x0539, eos,
3251 0x056A, 0x053A, eos, // 1331
3252 0x056B, 0x053B, eos,
3253 0x056C, 0x053C, eos,
3254 0x056D, 0x053D, eos, // 1340
3255 0x056E, 0x053E, eos,
3256 0x056F, 0x053F, eos,
3257 0x0570, 0x0540, eos,
3258 0x0571, 0x0541, eos, // 1352
3259 0x0572, 0x0542, eos,
3260 0x0573, 0x0543, eos,
3261 0x0574, 0x0544, eos, // 1361
3262 0x0575, 0x0545, eos,
3263 0x0576, 0x0546, eos,
3264 0x0577, 0x0547, eos, // 1370
3265 0x0578, 0x0548, eos,
3266 0x0579, 0x0549, eos,
3267 0x057A, 0x054A, eos,
3268 0x057B, 0x054B, eos, // 1382
3269 0x057C, 0x054C, eos,
3270 0x057D, 0x054D, eos,
3271 0x057E, 0x054E, eos, // 1391
3272 0x057F, 0x054F, eos,
3273 0x0580, 0x0550, eos,
3274 0x0581, 0x0551, eos, // 1400
3275 0x0582, 0x0552, eos,
3276 0x0583, 0x0553, eos,
3277 0x0584, 0x0554, eos,
3278 0x0585, 0x0555, eos, // 1412
3279 0x0586, 0x0556, eos,
3280 0x2D00, 0x10A0, eos,
3281 0x2D01, 0x10A1, eos, // 1421
3282 0x2D02, 0x10A2, eos,
3283 0x2D03, 0x10A3, eos,
3284 0x2D04, 0x10A4, eos, // 1430
3285 0x2D05, 0x10A5, eos,
3286 0x2D06, 0x10A6, eos,
3287 0x2D07, 0x10A7, eos,
3288 0x2D08, 0x10A8, eos, // 1442
3289 0x2D09, 0x10A9, eos,
3290 0x2D0A, 0x10AA, eos,
3291 0x2D0B, 0x10AB, eos, // 1451
3292 0x2D0C, 0x10AC, eos,
3293 0x2D0D, 0x10AD, eos,
3294 0x2D0E, 0x10AE, eos, // 1460
3295 0x2D0F, 0x10AF, eos,
3296 0x2D10, 0x10B0, eos,
3297 0x2D11, 0x10B1, eos,
3298 0x2D12, 0x10B2, eos, // 1472
3299 0x2D13, 0x10B3, eos,
3300 0x2D14, 0x10B4, eos,
3301 0x2D15, 0x10B5, eos, // 1481
3302 0x2D16, 0x10B6, eos,
3303 0x2D17, 0x10B7, eos,
3304 0x2D18, 0x10B8, eos, // 1490
3305 0x2D19, 0x10B9, eos,
3306 0x2D1A, 0x10BA, eos,
3307 0x2D1B, 0x10BB, eos,
3308 0x2D1C, 0x10BC, eos, // 1502
3309 0x2D1D, 0x10BD, eos,
3310 0x2D1E, 0x10BE, eos,
3311 0x2D1F, 0x10BF, eos, // 1511
3312 0x2D20, 0x10C0, eos,
3313 0x2D21, 0x10C1, eos,
3314 0x2D22, 0x10C2, eos, // 1520
3315 0x2D23, 0x10C3, eos,
3316 0x2D24, 0x10C4, eos,
3317 0x2D25, 0x10C5, eos,
3318 0x2D27, 0x10C7, eos, // 1532
3319 0x2D2D, 0x10CD, eos,
3320 0x13F0, 0x13F8, eos,
3321 0x13F1, 0x13F9, eos, // 1541
3322 0x13F2, 0x13FA, eos,
3323 0x13F3, 0x13FB, eos,
3324 0x13F4, 0x13FC, eos, // 1550
3325 0x13F5, 0x13FD, eos,
3326 0xA64B, 0x1C88, 0xA64A, eos,
3327 0x10D0, 0x1C90, eos, // 1560
3328 0x10D1, 0x1C91, eos,
3329 0x10D2, 0x1C92, eos,
3330 0x10D3, 0x1C93, eos,
3331 0x10D4, 0x1C94, eos, // 1572
3332 0x10D5, 0x1C95, eos,
3333 0x10D6, 0x1C96, eos,
3334 0x10D7, 0x1C97, eos, // 1581
3335 0x10D8, 0x1C98, eos,
3336 0x10D9, 0x1C99, eos,
3337 0x10DA, 0x1C9A, eos, // 1590
3338 0x10DB, 0x1C9B, eos,
3339 0x10DC, 0x1C9C, eos,
3340 0x10DD, 0x1C9D, eos,
3341 0x10DE, 0x1C9E, eos, // 1602
3342 0x10DF, 0x1C9F, eos,
3343 0x10E0, 0x1CA0, eos,
3344 0x10E1, 0x1CA1, eos, // 1611
3345 0x10E2, 0x1CA2, eos,
3346 0x10E3, 0x1CA3, eos,
3347 0x10E4, 0x1CA4, eos, // 1620
3348 0x10E5, 0x1CA5, eos,
3349 0x10E6, 0x1CA6, eos,
3350 0x10E7, 0x1CA7, eos,
3351 0x10E8, 0x1CA8, eos, // 1632
3352 0x10E9, 0x1CA9, eos,
3353 0x10EA, 0x1CAA, eos,
3354 0x10EB, 0x1CAB, eos, // 1641
3355 0x10EC, 0x1CAC, eos,
3356 0x10ED, 0x1CAD, eos,
3357 0x10EE, 0x1CAE, eos, // 1650
3358 0x10EF, 0x1CAF, eos,
3359 0x10F0, 0x1CB0, eos,
3360 0x10F1, 0x1CB1, eos,
3361 0x10F2, 0x1CB2, eos, // 1662
3362 0x10F3, 0x1CB3, eos,
3363 0x10F4, 0x1CB4, eos,
3364 0x10F5, 0x1CB5, eos, // 1671
3365 0x10F6, 0x1CB6, eos,
3366 0x10F7, 0x1CB7, eos,
3367 0x10F8, 0x1CB8, eos, // 1680
3368 0x10F9, 0x1CB9, eos,
3369 0x10FA, 0x1CBA, eos,
3370 0x10FD, 0x1CBD, eos,
3371 0x10FE, 0x1CBE, eos, // 1692
3372 0x10FF, 0x1CBF, eos,
3373 0x1E01, 0x1E00, eos,
3374 0x1E03, 0x1E02, eos, // 1701
3375 0x1E05, 0x1E04, eos,
3376 0x1E07, 0x1E06, eos,
3377 0x1E09, 0x1E08, eos, // 1710
3378 0x1E0B, 0x1E0A, eos,
3379 0x1E0D, 0x1E0C, eos,
3380 0x1E0F, 0x1E0E, eos,
3381 0x1E11, 0x1E10, eos, // 1722
3382 0x1E13, 0x1E12, eos,
3383 0x1E15, 0x1E14, eos,
3384 0x1E17, 0x1E16, eos, // 1731
3385 0x1E19, 0x1E18, eos,
3386 0x1E1B, 0x1E1A, eos,
3387 0x1E1D, 0x1E1C, eos, // 1740
3388 0x1E1F, 0x1E1E, eos,
3389 0x1E21, 0x1E20, eos,
3390 0x1E23, 0x1E22, eos,
3391 0x1E25, 0x1E24, eos, // 1752
3392 0x1E27, 0x1E26, eos,
3393 0x1E29, 0x1E28, eos,
3394 0x1E2B, 0x1E2A, eos, // 1761
3395 0x1E2D, 0x1E2C, eos,
3396 0x1E2F, 0x1E2E, eos,
3397 0x1E31, 0x1E30, eos, // 1770
3398 0x1E33, 0x1E32, eos,
3399 0x1E35, 0x1E34, eos,
3400 0x1E37, 0x1E36, eos,
3401 0x1E39, 0x1E38, eos, // 1782
3402 0x1E3B, 0x1E3A, eos,
3403 0x1E3D, 0x1E3C, eos,
3404 0x1E3F, 0x1E3E, eos, // 1791
3405 0x1E41, 0x1E40, eos,
3406 0x1E43, 0x1E42, eos,
3407 0x1E45, 0x1E44, eos, // 1800
3408 0x1E47, 0x1E46, eos,
3409 0x1E49, 0x1E48, eos,
3410 0x1E4B, 0x1E4A, eos,
3411 0x1E4D, 0x1E4C, eos, // 1812
3412 0x1E4F, 0x1E4E, eos,
3413 0x1E51, 0x1E50, eos,
3414 0x1E53, 0x1E52, eos, // 1821
3415 0x1E55, 0x1E54, eos,
3416 0x1E57, 0x1E56, eos,
3417 0x1E59, 0x1E58, eos, // 1830
3418 0x1E5B, 0x1E5A, eos,
3419 0x1E5D, 0x1E5C, eos,
3420 0x1E5F, 0x1E5E, eos,
3421 0x1E61, 0x1E60, 0x1E9B, eos, // 1842
3422 0x1E63, 0x1E62, eos,
3423 0x1E65, 0x1E64, eos,
3424 0x1E67, 0x1E66, eos, // 1852
3425 0x1E69, 0x1E68, eos,
3426 0x1E6B, 0x1E6A, eos,
3427 0x1E6D, 0x1E6C, eos, // 1861
3428 0x1E6F, 0x1E6E, eos,
3429 0x1E71, 0x1E70, eos,
3430 0x1E73, 0x1E72, eos, // 1870
3431 0x1E75, 0x1E74, eos,
3432 0x1E77, 0x1E76, eos,
3433 0x1E79, 0x1E78, eos,
3434 0x1E7B, 0x1E7A, eos, // 1882
3435 0x1E7D, 0x1E7C, eos,
3436 0x1E7F, 0x1E7E, eos,
3437 0x1E81, 0x1E80, eos, // 1891
3438 0x1E83, 0x1E82, eos,
3439 0x1E85, 0x1E84, eos,
3440 0x1E87, 0x1E86, eos, // 1900
3441 0x1E89, 0x1E88, eos,
3442 0x1E8B, 0x1E8A, eos,
3443 0x1E8D, 0x1E8C, eos,
3444 0x1E8F, 0x1E8E, eos, // 1912
3445 0x1E91, 0x1E90, eos,
3446 0x1E93, 0x1E92, eos,
3447 0x1E95, 0x1E94, eos, // 1921
3448 0x00DF, 0x1E9E, eos,
3449 0x1EA1, 0x1EA0, eos,
3450 0x1EA3, 0x1EA2, eos, // 1930
3451 0x1EA5, 0x1EA4, eos,
3452 0x1EA7, 0x1EA6, eos,
3453 0x1EA9, 0x1EA8, eos,
3454 0x1EAB, 0x1EAA, eos, // 1942
3455 0x1EAD, 0x1EAC, eos,
3456 0x1EAF, 0x1EAE, eos,
3457 0x1EB1, 0x1EB0, eos, // 1951
3458 0x1EB3, 0x1EB2, eos,
3459 0x1EB5, 0x1EB4, eos,
3460 0x1EB7, 0x1EB6, eos, // 1960
3461 0x1EB9, 0x1EB8, eos,
3462 0x1EBB, 0x1EBA, eos,
3463 0x1EBD, 0x1EBC, eos,
3464 0x1EBF, 0x1EBE, eos, // 1972
3465 0x1EC1, 0x1EC0, eos,
3466 0x1EC3, 0x1EC2, eos,
3467 0x1EC5, 0x1EC4, eos, // 1981
3468 0x1EC7, 0x1EC6, eos,
3469 0x1EC9, 0x1EC8, eos,
3470 0x1ECB, 0x1ECA, eos, // 1990
3471 0x1ECD, 0x1ECC, eos,
3472 0x1ECF, 0x1ECE, eos,
3473 0x1ED1, 0x1ED0, eos,
3474 0x1ED3, 0x1ED2, eos, // 2002
3475 0x1ED5, 0x1ED4, eos,
3476 0x1ED7, 0x1ED6, eos,
3477 0x1ED9, 0x1ED8, eos, // 2011
3478 0x1EDB, 0x1EDA, eos,
3479 0x1EDD, 0x1EDC, eos,
3480 0x1EDF, 0x1EDE, eos, // 2020
3481 0x1EE1, 0x1EE0, eos,
3482 0x1EE3, 0x1EE2, eos,
3483 0x1EE5, 0x1EE4, eos,
3484 0x1EE7, 0x1EE6, eos, // 2032
3485 0x1EE9, 0x1EE8, eos,
3486 0x1EEB, 0x1EEA, eos,
3487 0x1EED, 0x1EEC, eos, // 2041
3488 0x1EEF, 0x1EEE, eos,
3489 0x1EF1, 0x1EF0, eos,
3490 0x1EF3, 0x1EF2, eos, // 2050
3491 0x1EF5, 0x1EF4, eos,
3492 0x1EF7, 0x1EF6, eos,
3493 0x1EF9, 0x1EF8, eos,
3494 0x1EFB, 0x1EFA, eos, // 2062
3495 0x1EFD, 0x1EFC, eos,
3496 0x1EFF, 0x1EFE, eos,
3497 0x1F00, 0x1F08, eos, // 2071
3498 0x1F01, 0x1F09, eos,
3499 0x1F02, 0x1F0A, eos,
3500 0x1F03, 0x1F0B, eos, // 2080
3501 0x1F04, 0x1F0C, eos,
3502 0x1F05, 0x1F0D, eos,
3503 0x1F06, 0x1F0E, eos,
3504 0x1F07, 0x1F0F, eos, // 2092
3505 0x1F10, 0x1F18, eos,
3506 0x1F11, 0x1F19, eos,
3507 0x1F12, 0x1F1A, eos, // 2101
3508 0x1F13, 0x1F1B, eos,
3509 0x1F14, 0x1F1C, eos,
3510 0x1F15, 0x1F1D, eos, // 2110
3511 0x1F20, 0x1F28, eos,
3512 0x1F21, 0x1F29, eos,
3513 0x1F22, 0x1F2A, eos,
3514 0x1F23, 0x1F2B, eos, // 2122
3515 0x1F24, 0x1F2C, eos,
3516 0x1F25, 0x1F2D, eos,
3517 0x1F26, 0x1F2E, eos, // 2131
3518 0x1F27, 0x1F2F, eos,
3519 0x1F30, 0x1F38, eos,
3520 0x1F31, 0x1F39, eos, // 2140
3521 0x1F32, 0x1F3A, eos,
3522 0x1F33, 0x1F3B, eos,
3523 0x1F34, 0x1F3C, eos,
3524 0x1F35, 0x1F3D, eos, // 2152
3525 0x1F36, 0x1F3E, eos,
3526 0x1F37, 0x1F3F, eos,
3527 0x1F40, 0x1F48, eos, // 2161
3528 0x1F41, 0x1F49, eos,
3529 0x1F42, 0x1F4A, eos,
3530 0x1F43, 0x1F4B, eos, // 2170
3531 0x1F44, 0x1F4C, eos,
3532 0x1F45, 0x1F4D, eos,
3533 0x1F51, 0x1F59, eos,
3534 0x1F53, 0x1F5B, eos, // 2182
3535 0x1F55, 0x1F5D, eos,
3536 0x1F57, 0x1F5F, eos,
3537 0x1F60, 0x1F68, eos, // 2191
3538 0x1F61, 0x1F69, eos,
3539 0x1F62, 0x1F6A, eos,
3540 0x1F63, 0x1F6B, eos, // 2200
3541 0x1F64, 0x1F6C, eos,
3542 0x1F65, 0x1F6D, eos,
3543 0x1F66, 0x1F6E, eos,
3544 0x1F67, 0x1F6F, eos, // 2212
3545 0x1F80, 0x1F88, eos,
3546 0x1F81, 0x1F89, eos,
3547 0x1F82, 0x1F8A, eos, // 2221
3548 0x1F83, 0x1F8B, eos,
3549 0x1F84, 0x1F8C, eos,
3550 0x1F85, 0x1F8D, eos, // 2230
3551 0x1F86, 0x1F8E, eos,
3552 0x1F87, 0x1F8F, eos,
3553 0x1F90, 0x1F98, eos,
3554 0x1F91, 0x1F99, eos, // 2242
3555 0x1F92, 0x1F9A, eos,
3556 0x1F93, 0x1F9B, eos,
3557 0x1F94, 0x1F9C, eos, // 2251
3558 0x1F95, 0x1F9D, eos,
3559 0x1F96, 0x1F9E, eos,
3560 0x1F97, 0x1F9F, eos, // 2260
3561 0x1FA0, 0x1FA8, eos,
3562 0x1FA1, 0x1FA9, eos,
3563 0x1FA2, 0x1FAA, eos,
3564 0x1FA3, 0x1FAB, eos, // 2272
3565 0x1FA4, 0x1FAC, eos,
3566 0x1FA5, 0x1FAD, eos,
3567 0x1FA6, 0x1FAE, eos, // 2281
3568 0x1FA7, 0x1FAF, eos,
3569 0x1FB0, 0x1FB8, eos,
3570 0x1FB1, 0x1FB9, eos, // 2290
3571 0x1F70, 0x1FBA, eos,
3572 0x1F71, 0x1FBB, eos,
3573 0x1FB3, 0x1FBC, eos,
3574 0x1F72, 0x1FC8, eos, // 2302
3575 0x1F73, 0x1FC9, eos,
3576 0x1F74, 0x1FCA, eos,
3577 0x1F75, 0x1FCB, eos, // 2311
3578 0x1FC3, 0x1FCC, eos,
3579 0x0390, 0x1FD3, eos,
3580 0x1FD0, 0x1FD8, eos, // 2320
3581 0x1FD1, 0x1FD9, eos,
3582 0x1F76, 0x1FDA, eos,
3583 0x1F77, 0x1FDB, eos,
3584 0x03B0, 0x1FE3, eos, // 2332
3585 0x1FE0, 0x1FE8, eos,
3586 0x1FE1, 0x1FE9, eos,
3587 0x1F7A, 0x1FEA, eos, // 2341
3588 0x1F7B, 0x1FEB, eos,
3589 0x1FE5, 0x1FEC, eos,
3590 0x1F78, 0x1FF8, eos, // 2350
3591 0x1F79, 0x1FF9, eos,
3592 0x1F7C, 0x1FFA, eos,
3593 0x1F7D, 0x1FFB, eos,
3594 0x1FF3, 0x1FFC, eos, // 2362
3595 0x214E, 0x2132, eos,
3596 0x2170, 0x2160, eos,
3597 0x2171, 0x2161, eos, // 2371
3598 0x2172, 0x2162, eos,
3599 0x2173, 0x2163, eos,
3600 0x2174, 0x2164, eos, // 2380
3601 0x2175, 0x2165, eos,
3602 0x2176, 0x2166, eos,
3603 0x2177, 0x2167, eos,
3604 0x2178, 0x2168, eos, // 2392
3605 0x2179, 0x2169, eos,
3606 0x217A, 0x216A, eos,
3607 0x217B, 0x216B, eos, // 2401
3608 0x217C, 0x216C, eos,
3609 0x217D, 0x216D, eos,
3610 0x217E, 0x216E, eos, // 2410
3611 0x217F, 0x216F, eos,
3612 0x2184, 0x2183, eos,
3613 0x24D0, 0x24B6, eos,
3614 0x24D1, 0x24B7, eos, // 2422
3615 0x24D2, 0x24B8, eos,
3616 0x24D3, 0x24B9, eos,
3617 0x24D4, 0x24BA, eos, // 2431
3618 0x24D5, 0x24BB, eos,
3619 0x24D6, 0x24BC, eos,
3620 0x24D7, 0x24BD, eos, // 2440
3621 0x24D8, 0x24BE, eos,
3622 0x24D9, 0x24BF, eos,
3623 0x24DA, 0x24C0, eos,
3624 0x24DB, 0x24C1, eos, // 2452
3625 0x24DC, 0x24C2, eos,
3626 0x24DD, 0x24C3, eos,
3627 0x24DE, 0x24C4, eos, // 2461
3628 0x24DF, 0x24C5, eos,
3629 0x24E0, 0x24C6, eos,
3630 0x24E1, 0x24C7, eos, // 2470
3631 0x24E2, 0x24C8, eos,
3632 0x24E3, 0x24C9, eos,
3633 0x24E4, 0x24CA, eos,
3634 0x24E5, 0x24CB, eos, // 2482
3635 0x24E6, 0x24CC, eos,
3636 0x24E7, 0x24CD, eos,
3637 0x24E8, 0x24CE, eos, // 2491
3638 0x24E9, 0x24CF, eos,
3639 0x2C30, 0x2C00, eos,
3640 0x2C31, 0x2C01, eos, // 2500
3641 0x2C32, 0x2C02, eos,
3642 0x2C33, 0x2C03, eos,
3643 0x2C34, 0x2C04, eos,
3644 0x2C35, 0x2C05, eos, // 2512
3645 0x2C36, 0x2C06, eos,
3646 0x2C37, 0x2C07, eos,
3647 0x2C38, 0x2C08, eos, // 2521
3648 0x2C39, 0x2C09, eos,
3649 0x2C3A, 0x2C0A, eos,
3650 0x2C3B, 0x2C0B, eos, // 2530
3651 0x2C3C, 0x2C0C, eos,
3652 0x2C3D, 0x2C0D, eos,
3653 0x2C3E, 0x2C0E, eos,
3654 0x2C3F, 0x2C0F, eos, // 2542
3655 0x2C40, 0x2C10, eos,
3656 0x2C41, 0x2C11, eos,
3657 0x2C42, 0x2C12, eos, // 2551
3658 0x2C43, 0x2C13, eos,
3659 0x2C44, 0x2C14, eos,
3660 0x2C45, 0x2C15, eos, // 2560
3661 0x2C46, 0x2C16, eos,
3662 0x2C47, 0x2C17, eos,
3663 0x2C48, 0x2C18, eos,
3664 0x2C49, 0x2C19, eos, // 2572
3665 0x2C4A, 0x2C1A, eos,
3666 0x2C4B, 0x2C1B, eos,
3667 0x2C4C, 0x2C1C, eos, // 2581
3668 0x2C4D, 0x2C1D, eos,
3669 0x2C4E, 0x2C1E, eos,
3670 0x2C4F, 0x2C1F, eos, // 2590
3671 0x2C50, 0x2C20, eos,
3672 0x2C51, 0x2C21, eos,
3673 0x2C52, 0x2C22, eos,
3674 0x2C53, 0x2C23, eos, // 2602
3675 0x2C54, 0x2C24, eos,
3676 0x2C55, 0x2C25, eos,
3677 0x2C56, 0x2C26, eos, // 2611
3678 0x2C57, 0x2C27, eos,
3679 0x2C58, 0x2C28, eos,
3680 0x2C59, 0x2C29, eos, // 2620
3681 0x2C5A, 0x2C2A, eos,
3682 0x2C5B, 0x2C2B, eos,
3683 0x2C5C, 0x2C2C, eos,
3684 0x2C5D, 0x2C2D, eos, // 2632
3685 0x2C5E, 0x2C2E, eos,
3686 0x2C5F, 0x2C2F, eos,
3687 0x2C61, 0x2C60, eos, // 2641
3688 0x026B, 0x2C62, eos,
3689 0x1D7D, 0x2C63, eos,
3690 0x027D, 0x2C64, eos, // 2650
3691 0x2C68, 0x2C67, eos,
3692 0x2C6A, 0x2C69, eos,
3693 0x2C6C, 0x2C6B, eos,
3694 0x0251, 0x2C6D, eos, // 2662
3695 0x0271, 0x2C6E, eos,
3696 0x0250, 0x2C6F, eos,
3697 0x0252, 0x2C70, eos, // 2671
3698 0x2C73, 0x2C72, eos,
3699 0x2C76, 0x2C75, eos,
3700 0x023F, 0x2C7E, eos, // 2680
3701 0x0240, 0x2C7F, eos,
3702 0x2C81, 0x2C80, eos,
3703 0x2C83, 0x2C82, eos,
3704 0x2C85, 0x2C84, eos, // 2692
3705 0x2C87, 0x2C86, eos,
3706 0x2C89, 0x2C88, eos,
3707 0x2C8B, 0x2C8A, eos, // 2701
3708 0x2C8D, 0x2C8C, eos,
3709 0x2C8F, 0x2C8E, eos,
3710 0x2C91, 0x2C90, eos, // 2710
3711 0x2C93, 0x2C92, eos,
3712 0x2C95, 0x2C94, eos,
3713 0x2C97, 0x2C96, eos,
3714 0x2C99, 0x2C98, eos, // 2722
3715 0x2C9B, 0x2C9A, eos,
3716 0x2C9D, 0x2C9C, eos,
3717 0x2C9F, 0x2C9E, eos, // 2731
3718 0x2CA1, 0x2CA0, eos,
3719 0x2CA3, 0x2CA2, eos,
3720 0x2CA5, 0x2CA4, eos, // 2740
3721 0x2CA7, 0x2CA6, eos,
3722 0x2CA9, 0x2CA8, eos,
3723 0x2CAB, 0x2CAA, eos,
3724 0x2CAD, 0x2CAC, eos, // 2752
3725 0x2CAF, 0x2CAE, eos,
3726 0x2CB1, 0x2CB0, eos,
3727 0x2CB3, 0x2CB2, eos, // 2761
3728 0x2CB5, 0x2CB4, eos,
3729 0x2CB7, 0x2CB6, eos,
3730 0x2CB9, 0x2CB8, eos, // 2770
3731 0x2CBB, 0x2CBA, eos,
3732 0x2CBD, 0x2CBC, eos,
3733 0x2CBF, 0x2CBE, eos,
3734 0x2CC1, 0x2CC0, eos, // 2782
3735 0x2CC3, 0x2CC2, eos,
3736 0x2CC5, 0x2CC4, eos,
3737 0x2CC7, 0x2CC6, eos, // 2791
3738 0x2CC9, 0x2CC8, eos,
3739 0x2CCB, 0x2CCA, eos,
3740 0x2CCD, 0x2CCC, eos, // 2800
3741 0x2CCF, 0x2CCE, eos,
3742 0x2CD1, 0x2CD0, eos,
3743 0x2CD3, 0x2CD2, eos,
3744 0x2CD5, 0x2CD4, eos, // 2812
3745 0x2CD7, 0x2CD6, eos,
3746 0x2CD9, 0x2CD8, eos,
3747 0x2CDB, 0x2CDA, eos, // 2821
3748 0x2CDD, 0x2CDC, eos,
3749 0x2CDF, 0x2CDE, eos,
3750 0x2CE1, 0x2CE0, eos, // 2830
3751 0x2CE3, 0x2CE2, eos,
3752 0x2CEC, 0x2CEB, eos,
3753 0x2CEE, 0x2CED, eos,
3754 0x2CF3, 0x2CF2, eos, // 2842
3755 0xA641, 0xA640, eos,
3756 0xA643, 0xA642, eos,
3757 0xA645, 0xA644, eos, // 2851
3758 0xA647, 0xA646, eos,
3759 0xA649, 0xA648, eos,
3760 0xA64D, 0xA64C, eos, // 2860
3761 0xA64F, 0xA64E, eos,
3762 0xA651, 0xA650, eos,
3763 0xA653, 0xA652, eos,
3764 0xA655, 0xA654, eos, // 2872
3765 0xA657, 0xA656, eos,
3766 0xA659, 0xA658, eos,
3767 0xA65B, 0xA65A, eos, // 2881
3768 0xA65D, 0xA65C, eos,
3769 0xA65F, 0xA65E, eos,
3770 0xA661, 0xA660, eos, // 2890
3771 0xA663, 0xA662, eos,
3772 0xA665, 0xA664, eos,
3773 0xA667, 0xA666, eos,
3774 0xA669, 0xA668, eos, // 2902
3775 0xA66B, 0xA66A, eos,
3776 0xA66D, 0xA66C, eos,
3777 0xA681, 0xA680, eos, // 2911
3778 0xA683, 0xA682, eos,
3779 0xA685, 0xA684, eos,
3780 0xA687, 0xA686, eos, // 2920
3781 0xA689, 0xA688, eos,
3782 0xA68B, 0xA68A, eos,
3783 0xA68D, 0xA68C, eos,
3784 0xA68F, 0xA68E, eos, // 2932
3785 0xA691, 0xA690, eos,
3786 0xA693, 0xA692, eos,
3787 0xA695, 0xA694, eos, // 2941
3788 0xA697, 0xA696, eos,
3789 0xA699, 0xA698, eos,
3790 0xA69B, 0xA69A, eos, // 2950
3791 0xA723, 0xA722, eos,
3792 0xA725, 0xA724, eos,
3793 0xA727, 0xA726, eos,
3794 0xA729, 0xA728, eos, // 2962
3795 0xA72B, 0xA72A, eos,
3796 0xA72D, 0xA72C, eos,
3797 0xA72F, 0xA72E, eos, // 2971
3798 0xA733, 0xA732, eos,
3799 0xA735, 0xA734, eos,
3800 0xA737, 0xA736, eos, // 2980
3801 0xA739, 0xA738, eos,
3802 0xA73B, 0xA73A, eos,
3803 0xA73D, 0xA73C, eos,
3804 0xA73F, 0xA73E, eos, // 2992
3805 0xA741, 0xA740, eos,
3806 0xA743, 0xA742, eos,
3807 0xA745, 0xA744, eos, // 3001
3808 0xA747, 0xA746, eos,
3809 0xA749, 0xA748, eos,
3810 0xA74B, 0xA74A, eos, // 3010
3811 0xA74D, 0xA74C, eos,
3812 0xA74F, 0xA74E, eos,
3813 0xA751, 0xA750, eos,
3814 0xA753, 0xA752, eos, // 3022
3815 0xA755, 0xA754, eos,
3816 0xA757, 0xA756, eos,
3817 0xA759, 0xA758, eos, // 3031
3818 0xA75B, 0xA75A, eos,
3819 0xA75D, 0xA75C, eos,
3820 0xA75F, 0xA75E, eos, // 3040
3821 0xA761, 0xA760, eos,
3822 0xA763, 0xA762, eos,
3823 0xA765, 0xA764, eos,
3824 0xA767, 0xA766, eos, // 3052
3825 0xA769, 0xA768, eos,
3826 0xA76B, 0xA76A, eos,
3827 0xA76D, 0xA76C, eos, // 3061
3828 0xA76F, 0xA76E, eos,
3829 0xA77A, 0xA779, eos,
3830 0xA77C, 0xA77B, eos, // 3070
3831 0x1D79, 0xA77D, eos,
3832 0xA77F, 0xA77E, eos,
3833 0xA781, 0xA780, eos,
3834 0xA783, 0xA782, eos, // 3082
3835 0xA785, 0xA784, eos,
3836 0xA787, 0xA786, eos,
3837 0xA78C, 0xA78B, eos, // 3091
3838 0x0265, 0xA78D, eos,
3839 0xA791, 0xA790, eos,
3840 0xA793, 0xA792, eos, // 3100
3841 0xA797, 0xA796, eos,
3842 0xA799, 0xA798, eos,
3843 0xA79B, 0xA79A, eos,
3844 0xA79D, 0xA79C, eos, // 3112
3845 0xA79F, 0xA79E, eos,
3846 0xA7A1, 0xA7A0, eos,
3847 0xA7A3, 0xA7A2, eos, // 3121
3848 0xA7A5, 0xA7A4, eos,
3849 0xA7A7, 0xA7A6, eos,
3850 0xA7A9, 0xA7A8, eos, // 3130
3851 0x0266, 0xA7AA, eos,
3852 0x025C, 0xA7AB, eos,
3853 0x0261, 0xA7AC, eos,
3854 0x026C, 0xA7AD, eos, // 3142
3855 0x026A, 0xA7AE, eos,
3856 0x029E, 0xA7B0, eos,
3857 0x0287, 0xA7B1, eos, // 3151
3858 0x029D, 0xA7B2, eos,
3859 0xAB53, 0xA7B3, eos,
3860 0xA7B5, 0xA7B4, eos, // 3160
3861 0xA7B7, 0xA7B6, eos,
3862 0xA7B9, 0xA7B8, eos,
3863 0xA7BB, 0xA7BA, eos,
3864 0xA7BD, 0xA7BC, eos, // 3172
3865 0xA7BF, 0xA7BE, eos,
3866 0xA7C1, 0xA7C0, eos,
3867 0xA7C3, 0xA7C2, eos, // 3181
3868 0xA794, 0xA7C4, eos,
3869 0x0282, 0xA7C5, eos,
3870 0x1D8E, 0xA7C6, eos, // 3190
3871 0xA7C8, 0xA7C7, eos,
3872 0xA7CA, 0xA7C9, eos,
3873 0xA7D1, 0xA7D0, eos,
3874 0xA7D7, 0xA7D6, eos, // 3202
3875 0xA7D9, 0xA7D8, eos,
3876 0xA7F6, 0xA7F5, eos,
3877 0x13A0, 0xAB70, eos, // 3211
3878 0x13A1, 0xAB71, eos,
3879 0x13A2, 0xAB72, eos,
3880 0x13A3, 0xAB73, eos, // 3220
3881 0x13A4, 0xAB74, eos,
3882 0x13A5, 0xAB75, eos,
3883 0x13A6, 0xAB76, eos,
3884 0x13A7, 0xAB77, eos, // 3232
3885 0x13A8, 0xAB78, eos,
3886 0x13A9, 0xAB79, eos,
3887 0x13AA, 0xAB7A, eos, // 3241
3888 0x13AB, 0xAB7B, eos,
3889 0x13AC, 0xAB7C, eos,
3890 0x13AD, 0xAB7D, eos, // 3250
3891 0x13AE, 0xAB7E, eos,
3892 0x13AF, 0xAB7F, eos,
3893 0x13B0, 0xAB80, eos,
3894 0x13B1, 0xAB81, eos, // 3262
3895 0x13B2, 0xAB82, eos,
3896 0x13B3, 0xAB83, eos,
3897 0x13B4, 0xAB84, eos, // 3271
3898 0x13B5, 0xAB85, eos,
3899 0x13B6, 0xAB86, eos,
3900 0x13B7, 0xAB87, eos, // 3280
3901 0x13B8, 0xAB88, eos,
3902 0x13B9, 0xAB89, eos,
3903 0x13BA, 0xAB8A, eos,
3904 0x13BB, 0xAB8B, eos, // 3292
3905 0x13BC, 0xAB8C, eos,
3906 0x13BD, 0xAB8D, eos,
3907 0x13BE, 0xAB8E, eos, // 3301
3908 0x13BF, 0xAB8F, eos,
3909 0x13C0, 0xAB90, eos,
3910 0x13C1, 0xAB91, eos, // 3310
3911 0x13C2, 0xAB92, eos,
3912 0x13C3, 0xAB93, eos,
3913 0x13C4, 0xAB94, eos,
3914 0x13C5, 0xAB95, eos, // 3322
3915 0x13C6, 0xAB96, eos,
3916 0x13C7, 0xAB97, eos,
3917 0x13C8, 0xAB98, eos, // 3331
3918 0x13C9, 0xAB99, eos,
3919 0x13CA, 0xAB9A, eos,
3920 0x13CB, 0xAB9B, eos, // 3340
3921 0x13CC, 0xAB9C, eos,
3922 0x13CD, 0xAB9D, eos,
3923 0x13CE, 0xAB9E, eos,
3924 0x13CF, 0xAB9F, eos, // 3352
3925 0x13D0, 0xABA0, eos,
3926 0x13D1, 0xABA1, eos,
3927 0x13D2, 0xABA2, eos, // 3361
3928 0x13D3, 0xABA3, eos,
3929 0x13D4, 0xABA4, eos,
3930 0x13D5, 0xABA5, eos, // 3370
3931 0x13D6, 0xABA6, eos,
3932 0x13D7, 0xABA7, eos,
3933 0x13D8, 0xABA8, eos,
3934 0x13D9, 0xABA9, eos, // 3382
3935 0x13DA, 0xABAA, eos,
3936 0x13DB, 0xABAB, eos,
3937 0x13DC, 0xABAC, eos, // 3391
3938 0x13DD, 0xABAD, eos,
3939 0x13DE, 0xABAE, eos,
3940 0x13DF, 0xABAF, eos, // 3400
3941 0x13E0, 0xABB0, eos,
3942 0x13E1, 0xABB1, eos,
3943 0x13E2, 0xABB2, eos,
3944 0x13E3, 0xABB3, eos, // 3412
3945 0x13E4, 0xABB4, eos,
3946 0x13E5, 0xABB5, eos,
3947 0x13E6, 0xABB6, eos, // 3421
3948 0x13E7, 0xABB7, eos,
3949 0x13E8, 0xABB8, eos,
3950 0x13E9, 0xABB9, eos, // 3430
3951 0x13EA, 0xABBA, eos,
3952 0x13EB, 0xABBB, eos,
3953 0x13EC, 0xABBC, eos,
3954 0x13ED, 0xABBD, eos, // 3442
3955 0x13EE, 0xABBE, eos,
3956 0x13EF, 0xABBF, eos,
3957 0xFB06, 0xFB05, eos, // 3451
3958 0xFF41, 0xFF21, eos,
3959 0xFF42, 0xFF22, eos,
3960 0xFF43, 0xFF23, eos, // 3460
3961 0xFF44, 0xFF24, eos,
3962 0xFF45, 0xFF25, eos,
3963 0xFF46, 0xFF26, eos,
3964 0xFF47, 0xFF27, eos, // 3472
3965 0xFF48, 0xFF28, eos,
3966 0xFF49, 0xFF29, eos,
3967 0xFF4A, 0xFF2A, eos, // 3481
3968 0xFF4B, 0xFF2B, eos,
3969 0xFF4C, 0xFF2C, eos,
3970 0xFF4D, 0xFF2D, eos, // 3490
3971 0xFF4E, 0xFF2E, eos,
3972 0xFF4F, 0xFF2F, eos,
3973 0xFF50, 0xFF30, eos,
3974 0xFF51, 0xFF31, eos, // 3502
3975 0xFF52, 0xFF32, eos,
3976 0xFF53, 0xFF33, eos,
3977 0xFF54, 0xFF34, eos, // 3511
3978 0xFF55, 0xFF35, eos,
3979 0xFF56, 0xFF36, eos,
3980 0xFF57, 0xFF37, eos, // 3520
3981 0xFF58, 0xFF38, eos,
3982 0xFF59, 0xFF39, eos,
3983 0xFF5A, 0xFF3A, eos,
3984 0x10428, 0x10400, eos, // 3532
3985 0x10429, 0x10401, eos,
3986 0x1042A, 0x10402, eos,
3987 0x1042B, 0x10403, eos, // 3541
3988 0x1042C, 0x10404, eos,
3989 0x1042D, 0x10405, eos,
3990 0x1042E, 0x10406, eos, // 3550
3991 0x1042F, 0x10407, eos,
3992 0x10430, 0x10408, eos,
3993 0x10431, 0x10409, eos,
3994 0x10432, 0x1040A, eos, // 3562
3995 0x10433, 0x1040B, eos,
3996 0x10434, 0x1040C, eos,
3997 0x10435, 0x1040D, eos, // 3571
3998 0x10436, 0x1040E, eos,
3999 0x10437, 0x1040F, eos,
4000 0x10438, 0x10410, eos, // 3580
4001 0x10439, 0x10411, eos,
4002 0x1043A, 0x10412, eos,
4003 0x1043B, 0x10413, eos,
4004 0x1043C, 0x10414, eos, // 3592
4005 0x1043D, 0x10415, eos,
4006 0x1043E, 0x10416, eos,
4007 0x1043F, 0x10417, eos, // 3601
4008 0x10440, 0x10418, eos,
4009 0x10441, 0x10419, eos,
4010 0x10442, 0x1041A, eos, // 3610
4011 0x10443, 0x1041B, eos,
4012 0x10444, 0x1041C, eos,
4013 0x10445, 0x1041D, eos,
4014 0x10446, 0x1041E, eos, // 3622
4015 0x10447, 0x1041F, eos,
4016 0x10448, 0x10420, eos,
4017 0x10449, 0x10421, eos, // 3631
4018 0x1044A, 0x10422, eos,
4019 0x1044B, 0x10423, eos,
4020 0x1044C, 0x10424, eos, // 3640
4021 0x1044D, 0x10425, eos,
4022 0x1044E, 0x10426, eos,
4023 0x1044F, 0x10427, eos,
4024 0x104D8, 0x104B0, eos, // 3652
4025 0x104D9, 0x104B1, eos,
4026 0x104DA, 0x104B2, eos,
4027 0x104DB, 0x104B3, eos, // 3661
4028 0x104DC, 0x104B4, eos,
4029 0x104DD, 0x104B5, eos,
4030 0x104DE, 0x104B6, eos, // 3670
4031 0x104DF, 0x104B7, eos,
4032 0x104E0, 0x104B8, eos,
4033 0x104E1, 0x104B9, eos,
4034 0x104E2, 0x104BA, eos, // 3682
4035 0x104E3, 0x104BB, eos,
4036 0x104E4, 0x104BC, eos,
4037 0x104E5, 0x104BD, eos, // 3691
4038 0x104E6, 0x104BE, eos,
4039 0x104E7, 0x104BF, eos,
4040 0x104E8, 0x104C0, eos, // 3700
4041 0x104E9, 0x104C1, eos,
4042 0x104EA, 0x104C2, eos,
4043 0x104EB, 0x104C3, eos,
4044 0x104EC, 0x104C4, eos, // 3712
4045 0x104ED, 0x104C5, eos,
4046 0x104EE, 0x104C6, eos,
4047 0x104EF, 0x104C7, eos, // 3721
4048 0x104F0, 0x104C8, eos,
4049 0x104F1, 0x104C9, eos,
4050 0x104F2, 0x104CA, eos, // 3730
4051 0x104F3, 0x104CB, eos,
4052 0x104F4, 0x104CC, eos,
4053 0x104F5, 0x104CD, eos,
4054 0x104F6, 0x104CE, eos, // 3742
4055 0x104F7, 0x104CF, eos,
4056 0x104F8, 0x104D0, eos,
4057 0x104F9, 0x104D1, eos, // 3751
4058 0x104FA, 0x104D2, eos,
4059 0x104FB, 0x104D3, eos,
4060 0x10597, 0x10570, eos, // 3760
4061 0x10598, 0x10571, eos,
4062 0x10599, 0x10572, eos,
4063 0x1059A, 0x10573, eos,
4064 0x1059B, 0x10574, eos, // 3772
4065 0x1059C, 0x10575, eos,
4066 0x1059D, 0x10576, eos,
4067 0x1059E, 0x10577, eos, // 3781
4068 0x1059F, 0x10578, eos,
4069 0x105A0, 0x10579, eos,
4070 0x105A1, 0x1057A, eos, // 3790
4071 0x105A3, 0x1057C, eos,
4072 0x105A4, 0x1057D, eos,
4073 0x105A5, 0x1057E, eos,
4074 0x105A6, 0x1057F, eos, // 3802
4075 0x105A7, 0x10580, eos,
4076 0x105A8, 0x10581, eos,
4077 0x105A9, 0x10582, eos, // 3811
4078 0x105AA, 0x10583, eos,
4079 0x105AB, 0x10584, eos,
4080 0x105AC, 0x10585, eos, // 3820
4081 0x105AD, 0x10586, eos,
4082 0x105AE, 0x10587, eos,
4083 0x105AF, 0x10588, eos,
4084 0x105B0, 0x10589, eos, // 3832
4085 0x105B1, 0x1058A, eos,
4086 0x105B3, 0x1058C, eos,
4087 0x105B4, 0x1058D, eos, // 3841
4088 0x105B5, 0x1058E, eos,
4089 0x105B6, 0x1058F, eos,
4090 0x105B7, 0x10590, eos, // 3850
4091 0x105B8, 0x10591, eos,
4092 0x105B9, 0x10592, eos,
4093 0x105BB, 0x10594, eos,
4094 0x105BC, 0x10595, eos, // 3862
4095 0x10CC0, 0x10C80, eos,
4096 0x10CC1, 0x10C81, eos,
4097 0x10CC2, 0x10C82, eos, // 3871
4098 0x10CC3, 0x10C83, eos,
4099 0x10CC4, 0x10C84, eos,
4100 0x10CC5, 0x10C85, eos, // 3880
4101 0x10CC6, 0x10C86, eos,
4102 0x10CC7, 0x10C87, eos,
4103 0x10CC8, 0x10C88, eos,
4104 0x10CC9, 0x10C89, eos, // 3892
4105 0x10CCA, 0x10C8A, eos,
4106 0x10CCB, 0x10C8B, eos,
4107 0x10CCC, 0x10C8C, eos, // 3901
4108 0x10CCD, 0x10C8D, eos,
4109 0x10CCE, 0x10C8E, eos,
4110 0x10CCF, 0x10C8F, eos, // 3910
4111 0x10CD0, 0x10C90, eos,
4112 0x10CD1, 0x10C91, eos,
4113 0x10CD2, 0x10C92, eos,
4114 0x10CD3, 0x10C93, eos, // 3922
4115 0x10CD4, 0x10C94, eos,
4116 0x10CD5, 0x10C95, eos,
4117 0x10CD6, 0x10C96, eos, // 3931
4118 0x10CD7, 0x10C97, eos,
4119 0x10CD8, 0x10C98, eos,
4120 0x10CD9, 0x10C99, eos, // 3940
4121 0x10CDA, 0x10C9A, eos,
4122 0x10CDB, 0x10C9B, eos,
4123 0x10CDC, 0x10C9C, eos,
4124 0x10CDD, 0x10C9D, eos, // 3952
4125 0x10CDE, 0x10C9E, eos,
4126 0x10CDF, 0x10C9F, eos,
4127 0x10CE0, 0x10CA0, eos, // 3961
4128 0x10CE1, 0x10CA1, eos,
4129 0x10CE2, 0x10CA2, eos,
4130 0x10CE3, 0x10CA3, eos, // 3970
4131 0x10CE4, 0x10CA4, eos,
4132 0x10CE5, 0x10CA5, eos,
4133 0x10CE6, 0x10CA6, eos,
4134 0x10CE7, 0x10CA7, eos, // 3982
4135 0x10CE8, 0x10CA8, eos,
4136 0x10CE9, 0x10CA9, eos,
4137 0x10CEA, 0x10CAA, eos, // 3991
4138 0x10CEB, 0x10CAB, eos,
4139 0x10CEC, 0x10CAC, eos,
4140 0x10CED, 0x10CAD, eos, // 4000
4141 0x10CEE, 0x10CAE, eos,
4142 0x10CEF, 0x10CAF, eos,
4143 0x10CF0, 0x10CB0, eos,
4144 0x10CF1, 0x10CB1, eos, // 4012
4145 0x10CF2, 0x10CB2, eos,
4146 0x118C0, 0x118A0, eos,
4147 0x118C1, 0x118A1, eos, // 4021
4148 0x118C2, 0x118A2, eos,
4149 0x118C3, 0x118A3, eos,
4150 0x118C4, 0x118A4, eos, // 4030
4151 0x118C5, 0x118A5, eos,
4152 0x118C6, 0x118A6, eos,
4153 0x118C7, 0x118A7, eos,
4154 0x118C8, 0x118A8, eos, // 4042
4155 0x118C9, 0x118A9, eos,
4156 0x118CA, 0x118AA, eos,
4157 0x118CB, 0x118AB, eos, // 4051
4158 0x118CC, 0x118AC, eos,
4159 0x118CD, 0x118AD, eos,
4160 0x118CE, 0x118AE, eos, // 4060
4161 0x118CF, 0x118AF, eos,
4162 0x118D0, 0x118B0, eos,
4163 0x118D1, 0x118B1, eos,
4164 0x118D2, 0x118B2, eos, // 4072
4165 0x118D3, 0x118B3, eos,
4166 0x118D4, 0x118B4, eos,
4167 0x118D5, 0x118B5, eos, // 4081
4168 0x118D6, 0x118B6, eos,
4169 0x118D7, 0x118B7, eos,
4170 0x118D8, 0x118B8, eos, // 4090
4171 0x118D9, 0x118B9, eos,
4172 0x118DA, 0x118BA, eos,
4173 0x118DB, 0x118BB, eos,
4174 0x118DC, 0x118BC, eos, // 4102
4175 0x118DD, 0x118BD, eos,
4176 0x118DE, 0x118BE, eos,
4177 0x118DF, 0x118BF, eos, // 4111
4178 0x16E60, 0x16E40, eos,
4179 0x16E61, 0x16E41, eos,
4180 0x16E62, 0x16E42, eos, // 4120
4181 0x16E63, 0x16E43, eos,
4182 0x16E64, 0x16E44, eos,
4183 0x16E65, 0x16E45, eos,
4184 0x16E66, 0x16E46, eos, // 4132
4185 0x16E67, 0x16E47, eos,
4186 0x16E68, 0x16E48, eos,
4187 0x16E69, 0x16E49, eos, // 4141
4188 0x16E6A, 0x16E4A, eos,
4189 0x16E6B, 0x16E4B, eos,
4190 0x16E6C, 0x16E4C, eos, // 4150
4191 0x16E6D, 0x16E4D, eos,
4192 0x16E6E, 0x16E4E, eos,
4193 0x16E6F, 0x16E4F, eos,
4194 0x16E70, 0x16E50, eos, // 4162
4195 0x16E71, 0x16E51, eos,
4196 0x16E72, 0x16E52, eos,
4197 0x16E73, 0x16E53, eos, // 4171
4198 0x16E74, 0x16E54, eos,
4199 0x16E75, 0x16E55, eos,
4200 0x16E76, 0x16E56, eos, // 4180
4201 0x16E77, 0x16E57, eos,
4202 0x16E78, 0x16E58, eos,
4203 0x16E79, 0x16E59, eos,
4204 0x16E7A, 0x16E5A, eos, // 4192
4205 0x16E7B, 0x16E5B, eos,
4206 0x16E7C, 0x16E5C, eos,
4207 0x16E7D, 0x16E5D, eos, // 4201
4208 0x16E7E, 0x16E5E, eos,
4209 0x16E7F, 0x16E5F, eos,
4210 0x1E922, 0x1E900, eos, // 4210
4211 0x1E923, 0x1E901, eos,
4212 0x1E924, 0x1E902, eos,
4213 0x1E925, 0x1E903, eos,
4214 0x1E926, 0x1E904, eos, // 4222
4215 0x1E927, 0x1E905, eos,
4216 0x1E928, 0x1E906, eos,
4217 0x1E929, 0x1E907, eos, // 4231
4218 0x1E92A, 0x1E908, eos,
4219 0x1E92B, 0x1E909, eos,
4220 0x1E92C, 0x1E90A, eos, // 4240
4221 0x1E92D, 0x1E90B, eos,
4222 0x1E92E, 0x1E90C, eos,
4223 0x1E92F, 0x1E90D, eos,
4224 0x1E930, 0x1E90E, eos, // 4252
4225 0x1E931, 0x1E90F, eos,
4226 0x1E932, 0x1E910, eos,
4227 0x1E933, 0x1E911, eos, // 4261
4228 0x1E934, 0x1E912, eos,
4229 0x1E935, 0x1E913, eos,
4230 0x1E936, 0x1E914, eos, // 4270
4231 0x1E937, 0x1E915, eos,
4232 0x1E938, 0x1E916, eos,
4233 0x1E939, 0x1E917, eos,
4234 0x1E93A, 0x1E918, eos, // 4282
4235 0x1E93B, 0x1E919, eos,
4236 0x1E93C, 0x1E91A, eos,
4237 0x1E93D, 0x1E91B, eos, // 4291
4238 0x1E93E, 0x1E91C, eos,
4239 0x1E93F, 0x1E91D, eos,
4240 0x1E940, 0x1E91E, eos, // 4300
4241 0x1E941, 0x1E91F, eos,
4242 0x1E942, 0x1E920, eos,
4243 0x1E943, 0x1E921, eos // 4309
4244 };
4245 #define SRELL_UCFDATA_VERSION 201
4246 // ... "srell_ucfdata2.h"]
4247
4248 } // namespace ucf_constants
4249
4250 namespace ucf_internal
4251 {
4252
4253 typedef ucf_constants::unicode_casefolding<ui_l32, ui_l32> ucfdata;
4254
4255 } // namespace ucf_internal
4256 #endif // !defined(SRELL_NO_UNICODE_ICASE)
4257
4258 namespace ucf_constants
4259 {
4260 #if !defined(SRELL_NO_UNICODE_ICASE)
4261 static const ui_l32 rev_maxset = ucf_internal::ucfdata::rev_maxset;
4262 static const ui_l32 rev_maxcp = ucf_internal::ucfdata::rev_maxcodepoint;
4263 #else
4264 static const ui_l32 rev_maxset = 2;
4265 static const ui_l32 rev_maxcp = char_alnum::ch_z;
4266 #endif
4267 } // namespace ucf_constants
4268
4269 class unicode_case_folding
4270 {
4271 public:
4272
4273 static ui_l32 do_casefolding(const ui_l32 cp)
4274 {
4275 #if !defined(SRELL_NO_UNICODE_ICASE)
4276 if (cp <= ucf_internal::ucfdata::ucf_maxcodepoint)
4277 return cp + ucf_internal::ucfdata::ucf_deltatable[ucf_internal::ucfdata::ucf_segmenttable[cp >> 8] + (cp & 0xff)];
4278 #else
4279 if (cp >= char_alnum::ch_A && cp <= char_alnum::ch_Z) // 'A' && 'Z'
4280 return static_cast<ui_l32>(cp - char_alnum::ch_A + char_alnum::ch_a); // - 'A' + 'a'
4281 #endif
4282 return cp;
4283 }
4284
4285 static ui_l32 do_caseunfolding(ui_l32 out[ucf_constants::rev_maxset], const ui_l32 cp)
4286 {
4287 #if !defined(SRELL_NO_UNICODE_ICASE)
4288 ui_l32 count = 0u;
4289
4290 if (cp <= ucf_internal::ucfdata::rev_maxcodepoint)
4291 {
4292 const ui_l32 offset_of_charset = ucf_internal::ucfdata::rev_indextable[ucf_internal::ucfdata::rev_segmenttable[cp >> 8] + (cp & 0xff)];
4293 const ui_l32 *ptr = &ucf_internal::ucfdata::rev_charsettable[offset_of_charset];
4294
4295 for (; *ptr != cfcharset_eos_ && count < ucf_constants::rev_maxset; ++ptr, ++count)
4296 out[count] = *ptr;
4297 }
4298 if (count == 0u)
4299 out[count++] = cp;
4300
4301 return count;
4302 #else
4303 const ui_l32 nocase = static_cast<ui_l32>(cp | masks::asc_icase);
4304
4305 out[0] = cp;
4306 if (nocase >= char_alnum::ch_a && nocase <= char_alnum::ch_z)
4307 {
4308 out[1] = static_cast<ui_l32>(cp ^ masks::asc_icase);
4309 return 2u;
4310 }
4311 return 1u;
4312 #endif
4313 }
4314
4315 static ui_l32 try_casefolding(const ui_l32 cp)
4316 {
4317 #if !defined(SRELL_NO_UNICODE_ICASE)
4318 if (cp <= ucf_internal::ucfdata::rev_maxcodepoint)
4319 {
4320 const ui_l32 offset_of_charset = ucf_internal::ucfdata::rev_indextable[ucf_internal::ucfdata::rev_segmenttable[cp >> 8] + (cp & 0xff)];
4321 const ui_l32 uf0 = ucf_internal::ucfdata::rev_charsettable[offset_of_charset];
4322
4323 return uf0 != cfcharset_eos_ ? uf0 : constants::invalid_u32value;
4324 }
4325 #else
4326 const ui_l32 nocase = static_cast<ui_l32>(cp | masks::asc_icase);
4327
4328 if (nocase >= char_alnum::ch_a && nocase <= char_alnum::ch_z)
4329 return nocase;
4330 #endif
4331 return constants::invalid_u32value;
4332 }
4333
4334 unicode_case_folding &operator=(const unicode_case_folding &)
4335 {
4336 return *this;
4337 }
4338
4339 #if defined(SRELL_CPP11_MOVE_ENABLED)
4340 unicode_case_folding &operator=(unicode_case_folding &&) SRELL_NOEXCEPT
4341 {
4342 return *this;
4343 }
4344 #endif
4345
4346 void swap(unicode_case_folding & /* right */)
4347 {
4348 }
4349
4350 private:
4351
4352 #if !defined(SRELL_NO_UNICODE_ICASE)
4353 static const ui_l32 cfcharset_eos_ = ucf_internal::ucfdata::eos;
4354 #endif
4355
4356 public: // For debug.
4357
4358 void print_tables() const;
4359 };
4360 // unicode_case_folding
4361
4362 } // namespace re_detail
4363
4364 // ... "rei_ucf.hpp"]
4365 // ["rei_up.hpp" ...
4366
4367 namespace re_detail
4368 {
4369
4370 #if !defined(SRELL_NO_UNICODE_PROPERTY)
4371
4372 namespace up_constants
4373 {
4374
4375 // ["srell_updata3.h" ...
4376 // UnicodeData.txt
4377 //
4378 // PropList-15.1.0.txt
4379 // Date: 2023-08-01, 21:56:53 GMT
4380 // © 2023 Unicode®, Inc.
4381 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4382 // For terms of use, see https://www.unicode.org/terms_of_use.html
4383 //
4384 // DerivedCoreProperties-15.1.0.txt
4385 // Date: 2023-08-07, 15:21:24 GMT
4386 // © 2023 Unicode®, Inc.
4387 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4388 // For terms of use, see https://www.unicode.org/terms_of_use.html
4389 //
4390 // emoji-data.txt
4391 // Date: 2023-02-01, 02:22:54 GMT
4392 // © 2023 Unicode®, Inc.
4393 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4394 // For terms of use, see https://www.unicode.org/terms_of_use.html
4395 //
4396 // DerivedNormalizationProps-15.1.0.txt
4397 // Date: 2023-05-02, 13:20:58 GMT
4398 // © 2023 Unicode®, Inc.
4399 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4400 // For terms of use, see https://www.unicode.org/terms_of_use.html
4401 //
4402 // emoji-sequences.txt
4403 // Date: 2023-06-05, 21:39:54 GMT
4404 // © 2023 Unicode®, Inc.
4405 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4406 // For terms of use, see https://www.unicode.org/terms_of_use.html
4407 //
4408 // emoji-zwj-sequences.txt
4409 // Date: 2023-06-05, 20:04:50 GMT
4410 // © 2023 Unicode®, Inc.
4411 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4412 // For terms of use, see https://www.unicode.org/terms_of_use.html
4413 //
4414 // PropertyValueAliases-15.1.0.txt
4415 // Date: 2023-08-07, 15:21:34 GMT
4416 // © 2023 Unicode®, Inc.
4417 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4418 // For terms of use, see https://www.unicode.org/terms_of_use.html
4419 //
4420 // Scripts-15.1.0.txt
4421 // Date: 2023-07-28, 16:01:07 GMT
4422 // © 2023 Unicode®, Inc.
4423 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4424 // For terms of use, see https://www.unicode.org/terms_of_use.html
4425 //
4426 // ScriptExtensions-15.1.0.txt
4427 // Date: 2023-02-01, 23:02:24 GMT
4428 // © 2023 Unicode®, Inc.
4429 // Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
4430 // For terms of use, see https://www.unicode.org/terms_of_use.html
4431 //
4432
4433 enum upid_type
4434 {
4435 upid_unknown = 0,
4436 upid_invalid = 0,
4437 upid_error = 0,
4438 uptype_bp = 1,
4439 uptype_gc = 2,
4440 uptype_sc = 3,
4441 uptype_scx = 4,
4442 gc_Other = 5,
4443 gc_Control = 6,
4444 gc_Format = 7,
4445 gc_Unassigned = 8,
4446 gc_Private_Use = 9,
4447 gc_Surrogate = 10,
4448 gc_Letter = 11,
4449 gc_Cased_Letter = 12,
4450 gc_Lowercase_Letter = 13,
4451 gc_Titlecase_Letter = 14,
4452 gc_Uppercase_Letter = 15,
4453 gc_Modifier_Letter = 16,
4454 gc_Other_Letter = 17,
4455 gc_Mark = 18,
4456 gc_Spacing_Mark = 19,
4457 gc_Enclosing_Mark = 20,
4458 gc_Nonspacing_Mark = 21,
4459 gc_Number = 22,
4460 gc_Decimal_Number = 23,
4461 gc_Letter_Number = 24,
4462 gc_Other_Number = 25,
4463 gc_Punctuation = 26,
4464 gc_Connector_Punctuation = 27,
4465 gc_Dash_Punctuation = 28,
4466 gc_Close_Punctuation = 29,
4467 gc_Final_Punctuation = 30,
4468 gc_Initial_Punctuation = 31,
4469 gc_Other_Punctuation = 32,
4470 gc_Open_Punctuation = 33,
4471 gc_Symbol = 34,
4472 gc_Currency_Symbol = 35,
4473 gc_Modifier_Symbol = 36,
4474 gc_Math_Symbol = 37,
4475 gc_Other_Symbol = 38,
4476 gc_Separator = 39,
4477 gc_Line_Separator = 40,
4478 gc_Paragraph_Separator = 41,
4479 gc_Space_Separator = 42,
4480 bp_ASCII = 43,
4481 bp_ASCII_Hex_Digit = 44,
4482 bp_Alphabetic = 45,
4483 bp_Any = 46,
4484 bp_Assigned = 47,
4485 bp_Bidi_Control = 48,
4486 bp_Bidi_Mirrored = 49,
4487 bp_Case_Ignorable = 50,
4488 bp_Cased = 51,
4489 bp_Changes_When_Casefolded = 52,
4490 bp_Changes_When_Casemapped = 53,
4491 bp_Changes_When_Lowercased = 54,
4492 bp_Changes_When_NFKC_Casefolded = 55,
4493 bp_Changes_When_Titlecased = 56,
4494 bp_Changes_When_Uppercased = 57,
4495 bp_Dash = 58,
4496 bp_Default_Ignorable_Code_Point = 59,
4497 bp_Deprecated = 60,
4498 bp_Diacritic = 61,
4499 bp_Emoji = 62,
4500 bp_Emoji_Component = 63,
4501 bp_Emoji_Modifier = 64,
4502 bp_Emoji_Modifier_Base = 65,
4503 bp_Emoji_Presentation = 66,
4504 bp_Extended_Pictographic = 67,
4505 bp_Extender = 68,
4506 bp_Grapheme_Base = 69,
4507 bp_Grapheme_Extend = 70,
4508 bp_Hex_Digit = 71,
4509 bp_IDS_Binary_Operator = 72,
4510 bp_IDS_Trinary_Operator = 73,
4511 bp_ID_Continue = 74,
4512 bp_ID_Start = 75,
4513 bp_Ideographic = 76,
4514 bp_Join_Control = 77,
4515 bp_Logical_Order_Exception = 78,
4516 bp_Lowercase = 79,
4517 bp_Math = 80,
4518 bp_Noncharacter_Code_Point = 81,
4519 bp_Pattern_Syntax = 82,
4520 bp_Pattern_White_Space = 83,
4521 bp_Quotation_Mark = 84,
4522 bp_Radical = 85,
4523 bp_Regional_Indicator = 86,
4524 bp_Sentence_Terminal = 87,
4525 bp_Soft_Dotted = 88,
4526 bp_Terminal_Punctuation = 89,
4527 bp_Unified_Ideograph = 90,
4528 bp_Uppercase = 91,
4529 bp_Variation_Selector = 92,
4530 bp_White_Space = 93,
4531 bp_XID_Continue = 94,
4532 bp_XID_Start = 95,
4533 sc_Common = 96,
4534 sc_Latin = 97,
4535 sc_Greek = 98,
4536 sc_Cyrillic = 99,
4537 sc_Armenian = 100,
4538 sc_Hebrew = 101,
4539 sc_Arabic = 102,
4540 sc_Syriac = 103,
4541 sc_Thaana = 104,
4542 sc_Devanagari = 105,
4543 sc_Bengali = 106,
4544 sc_Gurmukhi = 107,
4545 sc_Gujarati = 108,
4546 sc_Oriya = 109,
4547 sc_Tamil = 110,
4548 sc_Telugu = 111,
4549 sc_Kannada = 112,
4550 sc_Malayalam = 113,
4551 sc_Sinhala = 114,
4552 sc_Thai = 115,
4553 sc_Lao = 116,
4554 sc_Tibetan = 117,
4555 sc_Myanmar = 118,
4556 sc_Georgian = 119,
4557 sc_Hangul = 120,
4558 sc_Ethiopic = 121,
4559 sc_Cherokee = 122,
4560 sc_Canadian_Aboriginal = 123,
4561 sc_Ogham = 124,
4562 sc_Runic = 125,
4563 sc_Khmer = 126,
4564 sc_Mongolian = 127,
4565 sc_Hiragana = 128,
4566 sc_Katakana = 129,
4567 sc_Bopomofo = 130,
4568 sc_Han = 131,
4569 sc_Yi = 132,
4570 sc_Old_Italic = 133,
4571 sc_Gothic = 134,
4572 sc_Deseret = 135,
4573 sc_Inherited = 136,
4574 sc_Tagalog = 137,
4575 sc_Hanunoo = 138,
4576 sc_Buhid = 139,
4577 sc_Tagbanwa = 140,
4578 sc_Limbu = 141,
4579 sc_Tai_Le = 142,
4580 sc_Linear_B = 143,
4581 sc_Ugaritic = 144,
4582 sc_Shavian = 145,
4583 sc_Osmanya = 146,
4584 sc_Cypriot = 147,
4585 sc_Braille = 148,
4586 sc_Buginese = 149,
4587 sc_Coptic = 150,
4588 sc_New_Tai_Lue = 151,
4589 sc_Glagolitic = 152,
4590 sc_Tifinagh = 153,
4591 sc_Syloti_Nagri = 154,
4592 sc_Old_Persian = 155,
4593 sc_Kharoshthi = 156,
4594 sc_Balinese = 157,
4595 sc_Cuneiform = 158,
4596 sc_Phoenician = 159,
4597 sc_Phags_Pa = 160,
4598 sc_Nko = 161,
4599 sc_Sundanese = 162,
4600 sc_Lepcha = 163,
4601 sc_Ol_Chiki = 164,
4602 sc_Vai = 165,
4603 sc_Saurashtra = 166,
4604 sc_Kayah_Li = 167,
4605 sc_Rejang = 168,
4606 sc_Lycian = 169,
4607 sc_Carian = 170,
4608 sc_Lydian = 171,
4609 sc_Cham = 172,
4610 sc_Tai_Tham = 173,
4611 sc_Tai_Viet = 174,
4612 sc_Avestan = 175,
4613 sc_Egyptian_Hieroglyphs = 176,
4614 sc_Samaritan = 177,
4615 sc_Lisu = 178,
4616 sc_Bamum = 179,
4617 sc_Javanese = 180,
4618 sc_Meetei_Mayek = 181,
4619 sc_Imperial_Aramaic = 182,
4620 sc_Old_South_Arabian = 183,
4621 sc_Inscriptional_Parthian = 184,
4622 sc_Inscriptional_Pahlavi = 185,
4623 sc_Old_Turkic = 186,
4624 sc_Kaithi = 187,
4625 sc_Batak = 188,
4626 sc_Brahmi = 189,
4627 sc_Mandaic = 190,
4628 sc_Chakma = 191,
4629 sc_Meroitic_Cursive = 192,
4630 sc_Meroitic_Hieroglyphs = 193,
4631 sc_Miao = 194,
4632 sc_Sharada = 195,
4633 sc_Sora_Sompeng = 196,
4634 sc_Takri = 197,
4635 sc_Caucasian_Albanian = 198,
4636 sc_Bassa_Vah = 199,
4637 sc_Duployan = 200,
4638 sc_Elbasan = 201,
4639 sc_Grantha = 202,
4640 sc_Pahawh_Hmong = 203,
4641 sc_Khojki = 204,
4642 sc_Linear_A = 205,
4643 sc_Mahajani = 206,
4644 sc_Manichaean = 207,
4645 sc_Mende_Kikakui = 208,
4646 sc_Modi = 209,
4647 sc_Mro = 210,
4648 sc_Old_North_Arabian = 211,
4649 sc_Nabataean = 212,
4650 sc_Palmyrene = 213,
4651 sc_Pau_Cin_Hau = 214,
4652 sc_Old_Permic = 215,
4653 sc_Psalter_Pahlavi = 216,
4654 sc_Siddham = 217,
4655 sc_Khudawadi = 218,
4656 sc_Tirhuta = 219,
4657 sc_Warang_Citi = 220,
4658 sc_Ahom = 221,
4659 sc_Anatolian_Hieroglyphs = 222,
4660 sc_Hatran = 223,
4661 sc_Multani = 224,
4662 sc_Old_Hungarian = 225,
4663 sc_SignWriting = 226,
4664 sc_Adlam = 227,
4665 sc_Bhaiksuki = 228,
4666 sc_Marchen = 229,
4667 sc_Newa = 230,
4668 sc_Osage = 231,
4669 sc_Tangut = 232,
4670 sc_Masaram_Gondi = 233,
4671 sc_Nushu = 234,
4672 sc_Soyombo = 235,
4673 sc_Zanabazar_Square = 236,
4674 sc_Dogra = 237,
4675 sc_Gunjala_Gondi = 238,
4676 sc_Makasar = 239,
4677 sc_Medefaidrin = 240,
4678 sc_Hanifi_Rohingya = 241,
4679 sc_Sogdian = 242,
4680 sc_Old_Sogdian = 243,
4681 sc_Elymaic = 244,
4682 sc_Nandinagari = 245,
4683 sc_Nyiakeng_Puachue_Hmong = 246,
4684 sc_Wancho = 247,
4685 sc_Chorasmian = 248,
4686 sc_Dives_Akuru = 249,
4687 sc_Khitan_Small_Script = 250,
4688 sc_Yezidi = 251,
4689 sc_Cypro_Minoan = 252,
4690 sc_Old_Uyghur = 253,
4691 sc_Tangsa = 254,
4692 sc_Toto = 255,
4693 sc_Vithkuqi = 256,
4694 sc_Kawi = 257,
4695 sc_Nag_Mundari = 258,
4696 sc_Unknown = 259,
4697 scx_Common = 260,
4698 scx_Latin = 261,
4699 scx_Greek = 262,
4700 scx_Cyrillic = 263,
4701 scx_Armenian = 100, // #264
4702 scx_Hebrew = 101, // #265
4703 scx_Arabic = 264, // #266
4704 scx_Syriac = 265, // #267
4705 scx_Thaana = 266, // #268
4706 scx_Devanagari = 267, // #269
4707 scx_Bengali = 268, // #270
4708 scx_Gurmukhi = 269, // #271
4709 scx_Gujarati = 270, // #272
4710 scx_Oriya = 271, // #273
4711 scx_Tamil = 272, // #274
4712 scx_Telugu = 273, // #275
4713 scx_Kannada = 274, // #276
4714 scx_Malayalam = 275, // #277
4715 scx_Sinhala = 276, // #278
4716 scx_Thai = 115, // #279
4717 scx_Lao = 116, // #280
4718 scx_Tibetan = 117, // #281
4719 scx_Myanmar = 277, // #282
4720 scx_Georgian = 278, // #283
4721 scx_Hangul = 279, // #284
4722 scx_Ethiopic = 121, // #285
4723 scx_Cherokee = 122, // #286
4724 scx_Canadian_Aboriginal = 123, // #287
4725 scx_Ogham = 124, // #288
4726 scx_Runic = 125, // #289
4727 scx_Khmer = 126, // #290
4728 scx_Mongolian = 280, // #291
4729 scx_Hiragana = 281, // #292
4730 scx_Katakana = 282, // #293
4731 scx_Bopomofo = 283, // #294
4732 scx_Han = 284, // #295
4733 scx_Yi = 285, // #296
4734 scx_Old_Italic = 133, // #297
4735 scx_Gothic = 134, // #298
4736 scx_Deseret = 135, // #299
4737 scx_Inherited = 286, // #300
4738 scx_Tagalog = 287, // #301
4739 scx_Hanunoo = 288, // #302
4740 scx_Buhid = 289, // #303
4741 scx_Tagbanwa = 290, // #304
4742 scx_Limbu = 291, // #305
4743 scx_Tai_Le = 292, // #306
4744 scx_Linear_B = 293, // #307
4745 scx_Ugaritic = 144, // #308
4746 scx_Shavian = 145, // #309
4747 scx_Osmanya = 146, // #310
4748 scx_Cypriot = 294, // #311
4749 scx_Braille = 148, // #312
4750 scx_Buginese = 295, // #313
4751 scx_Coptic = 296, // #314
4752 scx_New_Tai_Lue = 151, // #315
4753 scx_Glagolitic = 297, // #316
4754 scx_Tifinagh = 153, // #317
4755 scx_Syloti_Nagri = 298, // #318
4756 scx_Old_Persian = 155, // #319
4757 scx_Kharoshthi = 156, // #320
4758 scx_Balinese = 157, // #321
4759 scx_Cuneiform = 158, // #322
4760 scx_Phoenician = 159, // #323
4761 scx_Phags_Pa = 299, // #324
4762 scx_Nko = 300, // #325
4763 scx_Sundanese = 162, // #326
4764 scx_Lepcha = 163, // #327
4765 scx_Ol_Chiki = 164, // #328
4766 scx_Vai = 165, // #329
4767 scx_Saurashtra = 166, // #330
4768 scx_Kayah_Li = 301, // #331
4769 scx_Rejang = 168, // #332
4770 scx_Lycian = 169, // #333
4771 scx_Carian = 170, // #334
4772 scx_Lydian = 171, // #335
4773 scx_Cham = 172, // #336
4774 scx_Tai_Tham = 173, // #337
4775 scx_Tai_Viet = 174, // #338
4776 scx_Avestan = 175, // #339
4777 scx_Egyptian_Hieroglyphs = 176, // #340
4778 scx_Samaritan = 177, // #341
4779 scx_Lisu = 178, // #342
4780 scx_Bamum = 179, // #343
4781 scx_Javanese = 302, // #344
4782 scx_Meetei_Mayek = 181, // #345
4783 scx_Imperial_Aramaic = 182, // #346
4784 scx_Old_South_Arabian = 183, // #347
4785 scx_Inscriptional_Parthian = 184, // #348
4786 scx_Inscriptional_Pahlavi = 185, // #349
4787 scx_Old_Turkic = 186, // #350
4788 scx_Kaithi = 303, // #351
4789 scx_Batak = 188, // #352
4790 scx_Brahmi = 189, // #353
4791 scx_Mandaic = 304, // #354
4792 scx_Chakma = 305, // #355
4793 scx_Meroitic_Cursive = 192, // #356
4794 scx_Meroitic_Hieroglyphs = 193, // #357
4795 scx_Miao = 194, // #358
4796 scx_Sharada = 306, // #359
4797 scx_Sora_Sompeng = 196, // #360
4798 scx_Takri = 307, // #361
4799 scx_Caucasian_Albanian = 198, // #362
4800 scx_Bassa_Vah = 199, // #363
4801 scx_Duployan = 308, // #364
4802 scx_Elbasan = 201, // #365
4803 scx_Grantha = 309, // #366
4804 scx_Pahawh_Hmong = 203, // #367
4805 scx_Khojki = 310, // #368
4806 scx_Linear_A = 311, // #369
4807 scx_Mahajani = 312, // #370
4808 scx_Manichaean = 313, // #371
4809 scx_Mende_Kikakui = 208, // #372
4810 scx_Modi = 314, // #373
4811 scx_Mro = 210, // #374
4812 scx_Old_North_Arabian = 211, // #375
4813 scx_Nabataean = 212, // #376
4814 scx_Palmyrene = 213, // #377
4815 scx_Pau_Cin_Hau = 214, // #378
4816 scx_Old_Permic = 315, // #379
4817 scx_Psalter_Pahlavi = 316, // #380
4818 scx_Siddham = 217, // #381
4819 scx_Khudawadi = 317, // #382
4820 scx_Tirhuta = 318, // #383
4821 scx_Warang_Citi = 220, // #384
4822 scx_Ahom = 221, // #385
4823 scx_Anatolian_Hieroglyphs = 222, // #386
4824 scx_Hatran = 223, // #387
4825 scx_Multani = 319, // #388
4826 scx_Old_Hungarian = 225, // #389
4827 scx_SignWriting = 226, // #390
4828 scx_Adlam = 320, // #391
4829 scx_Bhaiksuki = 228, // #392
4830 scx_Marchen = 229, // #393
4831 scx_Newa = 230, // #394
4832 scx_Osage = 231, // #395
4833 scx_Tangut = 232, // #396
4834 scx_Masaram_Gondi = 321, // #397
4835 scx_Nushu = 234, // #398
4836 scx_Soyombo = 235, // #399
4837 scx_Zanabazar_Square = 236, // #400
4838 scx_Dogra = 322, // #401
4839 scx_Gunjala_Gondi = 323, // #402
4840 scx_Makasar = 239, // #403
4841 scx_Medefaidrin = 240, // #404
4842 scx_Hanifi_Rohingya = 324, // #405
4843 scx_Sogdian = 325, // #406
4844 scx_Old_Sogdian = 243, // #407
4845 scx_Elymaic = 244, // #408
4846 scx_Nandinagari = 326, // #409
4847 scx_Nyiakeng_Puachue_Hmong = 246, // #410
4848 scx_Wancho = 247, // #411
4849 scx_Chorasmian = 248, // #412
4850 scx_Dives_Akuru = 249, // #413
4851 scx_Khitan_Small_Script = 250, // #414
4852 scx_Yezidi = 327, // #415
4853 scx_Cypro_Minoan = 328, // #416
4854 scx_Old_Uyghur = 329, // #417
4855 scx_Tangsa = 254, // #418
4856 scx_Toto = 255, // #419
4857 scx_Vithkuqi = 256, // #420
4858 scx_Kawi = 257, // #421
4859 scx_Nag_Mundari = 258, // #422
4860 scx_Unknown = 259, // #423
4861 upid_max_property_number = 329,
4862 bp_RGI_Emoji = 330, // #424
4863 bp_Basic_Emoji = 331, // #425
4864 bp_Emoji_Keycap_Sequence = 332, // #426
4865 bp_RGI_Emoji_Modifier_Sequence = 333, // #427
4866 bp_RGI_Emoji_Flag_Sequence = 334, // #428
4867 bp_RGI_Emoji_Tag_Sequence = 335, // #429
4868 bp_RGI_Emoji_ZWJ_Sequence = 336, // #430
4869 upid_max_pos_number = 336
4870 };
4871
4872 template <typename T3, typename T4, typename T5>
4873 struct unicode_property_data
4874 {
4875 static const T3 propertynumbertable[];
4876 static const T4 positiontable[];
4877 static const T5 rangetable[];
4878 };
4879
4880 template <typename T3, typename T4, typename T5>
4881 const T3 unicode_property_data<T3, T4, T5>::propertynumbertable[] =
4882 {
4883 { "", 6 },
4884 { "\x47\x65\x6E\x65\x72\x61\x6C\x5F\x43\x61\x74\x65\x67\x6F\x72\x79", 2 },
4885 { "\x53\x63\x72\x69\x70\x74", 3 },
4886 { "\x53\x63\x72\x69\x70\x74\x5F\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73", 4 },
4887 { "\x67\x63", 2 },
4888 { "\x73\x63", 3 },
4889 { "\x73\x63\x78", 4 },
4890 // gc: 80
4891 { "\x43", 5 },
4892 { "\x43\x61\x73\x65\x64\x5F\x4C\x65\x74\x74\x65\x72", 12 },
4893 { "\x43\x63", 6 },
4894 { "\x43\x66", 7 },
4895 { "\x43\x6C\x6F\x73\x65\x5F\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 29 },
4896 { "\x43\x6E", 8 },
4897 { "\x43\x6F", 9 },
4898 { "\x43\x6F\x6D\x62\x69\x6E\x69\x6E\x67\x5F\x4D\x61\x72\x6B", 18 },
4899 { "\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x5F\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 27 },
4900 { "\x43\x6F\x6E\x74\x72\x6F\x6C", 6 },
4901 { "\x43\x73", 10 },
4902 { "\x43\x75\x72\x72\x65\x6E\x63\x79\x5F\x53\x79\x6D\x62\x6F\x6C", 35 },
4903 { "\x44\x61\x73\x68\x5F\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 28 },
4904 { "\x44\x65\x63\x69\x6D\x61\x6C\x5F\x4E\x75\x6D\x62\x65\x72", 23 },
4905 { "\x45\x6E\x63\x6C\x6F\x73\x69\x6E\x67\x5F\x4D\x61\x72\x6B", 20 },
4906 { "\x46\x69\x6E\x61\x6C\x5F\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 30 },
4907 { "\x46\x6F\x72\x6D\x61\x74", 7 },
4908 { "\x49\x6E\x69\x74\x69\x61\x6C\x5F\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 31 },
4909 { "\x4C", 11 },
4910 { "\x4C\x43", 12 },
4911 { "\x4C\x65\x74\x74\x65\x72", 11 },
4912 { "\x4C\x65\x74\x74\x65\x72\x5F\x4E\x75\x6D\x62\x65\x72", 24 },
4913 { "\x4C\x69\x6E\x65\x5F\x53\x65\x70\x61\x72\x61\x74\x6F\x72", 40 },
4914 { "\x4C\x6C", 13 },
4915 { "\x4C\x6D", 16 },
4916 { "\x4C\x6F", 17 },
4917 { "\x4C\x6F\x77\x65\x72\x63\x61\x73\x65\x5F\x4C\x65\x74\x74\x65\x72", 13 },
4918 { "\x4C\x74", 14 },
4919 { "\x4C\x75", 15 },
4920 { "\x4D", 18 },
4921 { "\x4D\x61\x72\x6B", 18 },
4922 { "\x4D\x61\x74\x68\x5F\x53\x79\x6D\x62\x6F\x6C", 37 },
4923 { "\x4D\x63", 19 },
4924 { "\x4D\x65", 20 },
4925 { "\x4D\x6E", 21 },
4926 { "\x4D\x6F\x64\x69\x66\x69\x65\x72\x5F\x4C\x65\x74\x74\x65\x72", 16 },
4927 { "\x4D\x6F\x64\x69\x66\x69\x65\x72\x5F\x53\x79\x6D\x62\x6F\x6C", 36 },
4928 { "\x4E", 22 },
4929 { "\x4E\x64", 23 },
4930 { "\x4E\x6C", 24 },
4931 { "\x4E\x6F", 25 },
4932 { "\x4E\x6F\x6E\x73\x70\x61\x63\x69\x6E\x67\x5F\x4D\x61\x72\x6B", 21 },
4933 { "\x4E\x75\x6D\x62\x65\x72", 22 },
4934 { "\x4F\x70\x65\x6E\x5F\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 33 },
4935 { "\x4F\x74\x68\x65\x72", 5 },
4936 { "\x4F\x74\x68\x65\x72\x5F\x4C\x65\x74\x74\x65\x72", 17 },
4937 { "\x4F\x74\x68\x65\x72\x5F\x4E\x75\x6D\x62\x65\x72", 25 },
4938 { "\x4F\x74\x68\x65\x72\x5F\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 32 },
4939 { "\x4F\x74\x68\x65\x72\x5F\x53\x79\x6D\x62\x6F\x6C", 38 },
4940 { "\x50", 26 },
4941 { "\x50\x61\x72\x61\x67\x72\x61\x70\x68\x5F\x53\x65\x70\x61\x72\x61\x74\x6F\x72", 41 },
4942 { "\x50\x63", 27 },
4943 { "\x50\x64", 28 },
4944 { "\x50\x65", 29 },
4945 { "\x50\x66", 30 },
4946 { "\x50\x69", 31 },
4947 { "\x50\x6F", 32 },
4948 { "\x50\x72\x69\x76\x61\x74\x65\x5F\x55\x73\x65", 9 },
4949 { "\x50\x73", 33 },
4950 { "\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 26 },
4951 { "\x53", 34 },
4952 { "\x53\x63", 35 },
4953 { "\x53\x65\x70\x61\x72\x61\x74\x6F\x72", 39 },
4954 { "\x53\x6B", 36 },
4955 { "\x53\x6D", 37 },
4956 { "\x53\x6F", 38 },
4957 { "\x53\x70\x61\x63\x65\x5F\x53\x65\x70\x61\x72\x61\x74\x6F\x72", 42 },
4958 { "\x53\x70\x61\x63\x69\x6E\x67\x5F\x4D\x61\x72\x6B", 19 },
4959 { "\x53\x75\x72\x72\x6F\x67\x61\x74\x65", 10 },
4960 { "\x53\x79\x6D\x62\x6F\x6C", 34 },
4961 { "\x54\x69\x74\x6C\x65\x63\x61\x73\x65\x5F\x4C\x65\x74\x74\x65\x72", 14 },
4962 { "\x55\x6E\x61\x73\x73\x69\x67\x6E\x65\x64", 8 },
4963 { "\x55\x70\x70\x65\x72\x63\x61\x73\x65\x5F\x4C\x65\x74\x74\x65\x72", 15 },
4964 { "\x5A", 39 },
4965 { "\x5A\x6C", 40 },
4966 { "\x5A\x70", 41 },
4967 { "\x5A\x73", 42 },
4968 { "\x63\x6E\x74\x72\x6C", 6 },
4969 { "\x64\x69\x67\x69\x74", 23 },
4970 { "\x70\x75\x6E\x63\x74", 26 },
4971 // bp: 105
4972 { "\x41\x48\x65\x78", 44 },
4973 { "\x41\x53\x43\x49\x49", 43 },
4974 { "\x41\x53\x43\x49\x49\x5F\x48\x65\x78\x5F\x44\x69\x67\x69\x74", 44 },
4975 { "\x41\x6C\x70\x68\x61", 45 },
4976 { "\x41\x6C\x70\x68\x61\x62\x65\x74\x69\x63", 45 },
4977 { "\x41\x6E\x79", 46 },
4978 { "\x41\x73\x73\x69\x67\x6E\x65\x64", 47 },
4979 { "\x42\x61\x73\x69\x63\x5F\x45\x6D\x6F\x6A\x69", 331 },
4980 { "\x42\x69\x64\x69\x5F\x43", 48 },
4981 { "\x42\x69\x64\x69\x5F\x43\x6F\x6E\x74\x72\x6F\x6C", 48 },
4982 { "\x42\x69\x64\x69\x5F\x4D", 49 },
4983 { "\x42\x69\x64\x69\x5F\x4D\x69\x72\x72\x6F\x72\x65\x64", 49 },
4984 { "\x43\x49", 50 },
4985 { "\x43\x57\x43\x46", 52 },
4986 { "\x43\x57\x43\x4D", 53 },
4987 { "\x43\x57\x4B\x43\x46", 55 },
4988 { "\x43\x57\x4C", 54 },
4989 { "\x43\x57\x54", 56 },
4990 { "\x43\x57\x55", 57 },
4991 { "\x43\x61\x73\x65\x5F\x49\x67\x6E\x6F\x72\x61\x62\x6C\x65", 50 },
4992 { "\x43\x61\x73\x65\x64", 51 },
4993 { "\x43\x68\x61\x6E\x67\x65\x73\x5F\x57\x68\x65\x6E\x5F\x43\x61\x73\x65\x66\x6F\x6C\x64\x65\x64", 52 },
4994 { "\x43\x68\x61\x6E\x67\x65\x73\x5F\x57\x68\x65\x6E\x5F\x43\x61\x73\x65\x6D\x61\x70\x70\x65\x64", 53 },
4995 { "\x43\x68\x61\x6E\x67\x65\x73\x5F\x57\x68\x65\x6E\x5F\x4C\x6F\x77\x65\x72\x63\x61\x73\x65\x64", 54 },
4996 { "\x43\x68\x61\x6E\x67\x65\x73\x5F\x57\x68\x65\x6E\x5F\x4E\x46\x4B\x43\x5F\x43\x61\x73\x65\x66\x6F\x6C\x64\x65\x64", 55 },
4997 { "\x43\x68\x61\x6E\x67\x65\x73\x5F\x57\x68\x65\x6E\x5F\x54\x69\x74\x6C\x65\x63\x61\x73\x65\x64", 56 },
4998 { "\x43\x68\x61\x6E\x67\x65\x73\x5F\x57\x68\x65\x6E\x5F\x55\x70\x70\x65\x72\x63\x61\x73\x65\x64", 57 },
4999 { "\x44\x49", 59 },
5000 { "\x44\x61\x73\x68", 58 },
5001 { "\x44\x65\x66\x61\x75\x6C\x74\x5F\x49\x67\x6E\x6F\x72\x61\x62\x6C\x65\x5F\x43\x6F\x64\x65\x5F\x50\x6F\x69\x6E\x74", 59 },
5002 { "\x44\x65\x70", 60 },
5003 { "\x44\x65\x70\x72\x65\x63\x61\x74\x65\x64", 60 },
5004 { "\x44\x69\x61", 61 },
5005 { "\x44\x69\x61\x63\x72\x69\x74\x69\x63", 61 },
5006 { "\x45\x42\x61\x73\x65", 65 },
5007 { "\x45\x43\x6F\x6D\x70", 63 },
5008 { "\x45\x4D\x6F\x64", 64 },
5009 { "\x45\x50\x72\x65\x73", 66 },
5010 { "\x45\x6D\x6F\x6A\x69", 62 },
5011 { "\x45\x6D\x6F\x6A\x69\x5F\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74", 63 },
5012 { "\x45\x6D\x6F\x6A\x69\x5F\x4B\x65\x79\x63\x61\x70\x5F\x53\x65\x71\x75\x65\x6E\x63\x65", 332 },
5013 { "\x45\x6D\x6F\x6A\x69\x5F\x4D\x6F\x64\x69\x66\x69\x65\x72", 64 },
5014 { "\x45\x6D\x6F\x6A\x69\x5F\x4D\x6F\x64\x69\x66\x69\x65\x72\x5F\x42\x61\x73\x65", 65 },
5015 { "\x45\x6D\x6F\x6A\x69\x5F\x50\x72\x65\x73\x65\x6E\x74\x61\x74\x69\x6F\x6E", 66 },
5016 { "\x45\x78\x74", 68 },
5017 { "\x45\x78\x74\x50\x69\x63\x74", 67 },
5018 { "\x45\x78\x74\x65\x6E\x64\x65\x64\x5F\x50\x69\x63\x74\x6F\x67\x72\x61\x70\x68\x69\x63", 67 },
5019 { "\x45\x78\x74\x65\x6E\x64\x65\x72", 68 },
5020 { "\x47\x72\x5F\x42\x61\x73\x65", 69 },
5021 { "\x47\x72\x5F\x45\x78\x74", 70 },
5022 { "\x47\x72\x61\x70\x68\x65\x6D\x65\x5F\x42\x61\x73\x65", 69 },
5023 { "\x47\x72\x61\x70\x68\x65\x6D\x65\x5F\x45\x78\x74\x65\x6E\x64", 70 },
5024 { "\x48\x65\x78", 71 },
5025 { "\x48\x65\x78\x5F\x44\x69\x67\x69\x74", 71 },
5026 { "\x49\x44\x43", 74 },
5027 { "\x49\x44\x53", 75 },
5028 { "\x49\x44\x53\x42", 72 },
5029 { "\x49\x44\x53\x54", 73 },
5030 { "\x49\x44\x53\x5F\x42\x69\x6E\x61\x72\x79\x5F\x4F\x70\x65\x72\x61\x74\x6F\x72", 72 },
5031 { "\x49\x44\x53\x5F\x54\x72\x69\x6E\x61\x72\x79\x5F\x4F\x70\x65\x72\x61\x74\x6F\x72", 73 },
5032 { "\x49\x44\x5F\x43\x6F\x6E\x74\x69\x6E\x75\x65", 74 },
5033 { "\x49\x44\x5F\x53\x74\x61\x72\x74", 75 },
5034 { "\x49\x64\x65\x6F", 76 },
5035 { "\x49\x64\x65\x6F\x67\x72\x61\x70\x68\x69\x63", 76 },
5036 { "\x4A\x6F\x69\x6E\x5F\x43", 77 },
5037 { "\x4A\x6F\x69\x6E\x5F\x43\x6F\x6E\x74\x72\x6F\x6C", 77 },
5038 { "\x4C\x4F\x45", 78 },
5039 { "\x4C\x6F\x67\x69\x63\x61\x6C\x5F\x4F\x72\x64\x65\x72\x5F\x45\x78\x63\x65\x70\x74\x69\x6F\x6E", 78 },
5040 { "\x4C\x6F\x77\x65\x72", 79 },
5041 { "\x4C\x6F\x77\x65\x72\x63\x61\x73\x65", 79 },
5042 { "\x4D\x61\x74\x68", 80 },
5043 { "\x4E\x43\x68\x61\x72", 81 },
5044 { "\x4E\x6F\x6E\x63\x68\x61\x72\x61\x63\x74\x65\x72\x5F\x43\x6F\x64\x65\x5F\x50\x6F\x69\x6E\x74", 81 },
5045 { "\x50\x61\x74\x5F\x53\x79\x6E", 82 },
5046 { "\x50\x61\x74\x5F\x57\x53", 83 },
5047 { "\x50\x61\x74\x74\x65\x72\x6E\x5F\x53\x79\x6E\x74\x61\x78", 82 },
5048 { "\x50\x61\x74\x74\x65\x72\x6E\x5F\x57\x68\x69\x74\x65\x5F\x53\x70\x61\x63\x65", 83 },
5049 { "\x51\x4D\x61\x72\x6B", 84 },
5050 { "\x51\x75\x6F\x74\x61\x74\x69\x6F\x6E\x5F\x4D\x61\x72\x6B", 84 },
5051 { "\x52\x47\x49\x5F\x45\x6D\x6F\x6A\x69", 330 },
5052 { "\x52\x47\x49\x5F\x45\x6D\x6F\x6A\x69\x5F\x46\x6C\x61\x67\x5F\x53\x65\x71\x75\x65\x6E\x63\x65", 334 },
5053 { "\x52\x47\x49\x5F\x45\x6D\x6F\x6A\x69\x5F\x4D\x6F\x64\x69\x66\x69\x65\x72\x5F\x53\x65\x71\x75\x65\x6E\x63\x65", 333 },
5054 { "\x52\x47\x49\x5F\x45\x6D\x6F\x6A\x69\x5F\x54\x61\x67\x5F\x53\x65\x71\x75\x65\x6E\x63\x65", 335 },
5055 { "\x52\x47\x49\x5F\x45\x6D\x6F\x6A\x69\x5F\x5A\x57\x4A\x5F\x53\x65\x71\x75\x65\x6E\x63\x65", 336 },
5056 { "\x52\x49", 86 },
5057 { "\x52\x61\x64\x69\x63\x61\x6C", 85 },
5058 { "\x52\x65\x67\x69\x6F\x6E\x61\x6C\x5F\x49\x6E\x64\x69\x63\x61\x74\x6F\x72", 86 },
5059 { "\x53\x44", 88 },
5060 { "\x53\x54\x65\x72\x6D", 87 },
5061 { "\x53\x65\x6E\x74\x65\x6E\x63\x65\x5F\x54\x65\x72\x6D\x69\x6E\x61\x6C", 87 },
5062 { "\x53\x6F\x66\x74\x5F\x44\x6F\x74\x74\x65\x64", 88 },
5063 { "\x54\x65\x72\x6D", 89 },
5064 { "\x54\x65\x72\x6D\x69\x6E\x61\x6C\x5F\x50\x75\x6E\x63\x74\x75\x61\x74\x69\x6F\x6E", 89 },
5065 { "\x55\x49\x64\x65\x6F", 90 },
5066 { "\x55\x6E\x69\x66\x69\x65\x64\x5F\x49\x64\x65\x6F\x67\x72\x61\x70\x68", 90 },
5067 { "\x55\x70\x70\x65\x72", 91 },
5068 { "\x55\x70\x70\x65\x72\x63\x61\x73\x65", 91 },
5069 { "\x56\x53", 92 },
5070 { "\x56\x61\x72\x69\x61\x74\x69\x6F\x6E\x5F\x53\x65\x6C\x65\x63\x74\x6F\x72", 92 },
5071 { "\x57\x68\x69\x74\x65\x5F\x53\x70\x61\x63\x65", 93 },
5072 { "\x58\x49\x44\x43", 94 },
5073 { "\x58\x49\x44\x53", 95 },
5074 { "\x58\x49\x44\x5F\x43\x6F\x6E\x74\x69\x6E\x75\x65", 94 },
5075 { "\x58\x49\x44\x5F\x53\x74\x61\x72\x74", 95 },
5076 { "\x73\x70\x61\x63\x65", 93 },
5077 // sc: 322
5078 { "\x41\x64\x6C\x61\x6D", 227 },
5079 { "\x41\x64\x6C\x6D", 227 },
5080 { "\x41\x67\x68\x62", 198 },
5081 { "\x41\x68\x6F\x6D", 221 },
5082 { "\x41\x6E\x61\x74\x6F\x6C\x69\x61\x6E\x5F\x48\x69\x65\x72\x6F\x67\x6C\x79\x70\x68\x73", 222 },
5083 { "\x41\x72\x61\x62", 102 },
5084 { "\x41\x72\x61\x62\x69\x63", 102 },
5085 { "\x41\x72\x6D\x65\x6E\x69\x61\x6E", 100 },
5086 { "\x41\x72\x6D\x69", 182 },
5087 { "\x41\x72\x6D\x6E", 100 },
5088 { "\x41\x76\x65\x73\x74\x61\x6E", 175 },
5089 { "\x41\x76\x73\x74", 175 },
5090 { "\x42\x61\x6C\x69", 157 },
5091 { "\x42\x61\x6C\x69\x6E\x65\x73\x65", 157 },
5092 { "\x42\x61\x6D\x75", 179 },
5093 { "\x42\x61\x6D\x75\x6D", 179 },
5094 { "\x42\x61\x73\x73", 199 },
5095 { "\x42\x61\x73\x73\x61\x5F\x56\x61\x68", 199 },
5096 { "\x42\x61\x74\x61\x6B", 188 },
5097 { "\x42\x61\x74\x6B", 188 },
5098 { "\x42\x65\x6E\x67", 106 },
5099 { "\x42\x65\x6E\x67\x61\x6C\x69", 106 },
5100 { "\x42\x68\x61\x69\x6B\x73\x75\x6B\x69", 228 },
5101 { "\x42\x68\x6B\x73", 228 },
5102 { "\x42\x6F\x70\x6F", 130 },
5103 { "\x42\x6F\x70\x6F\x6D\x6F\x66\x6F", 130 },
5104 { "\x42\x72\x61\x68", 189 },
5105 { "\x42\x72\x61\x68\x6D\x69", 189 },
5106 { "\x42\x72\x61\x69", 148 },
5107 { "\x42\x72\x61\x69\x6C\x6C\x65", 148 },
5108 { "\x42\x75\x67\x69", 149 },
5109 { "\x42\x75\x67\x69\x6E\x65\x73\x65", 149 },
5110 { "\x42\x75\x68\x64", 139 },
5111 { "\x42\x75\x68\x69\x64", 139 },
5112 { "\x43\x61\x6B\x6D", 191 },
5113 { "\x43\x61\x6E\x61\x64\x69\x61\x6E\x5F\x41\x62\x6F\x72\x69\x67\x69\x6E\x61\x6C", 123 },
5114 { "\x43\x61\x6E\x73", 123 },
5115 { "\x43\x61\x72\x69", 170 },
5116 { "\x43\x61\x72\x69\x61\x6E", 170 },
5117 { "\x43\x61\x75\x63\x61\x73\x69\x61\x6E\x5F\x41\x6C\x62\x61\x6E\x69\x61\x6E", 198 },
5118 { "\x43\x68\x61\x6B\x6D\x61", 191 },
5119 { "\x43\x68\x61\x6D", 172 },
5120 { "\x43\x68\x65\x72", 122 },
5121 { "\x43\x68\x65\x72\x6F\x6B\x65\x65", 122 },
5122 { "\x43\x68\x6F\x72\x61\x73\x6D\x69\x61\x6E", 248 },
5123 { "\x43\x68\x72\x73", 248 },
5124 { "\x43\x6F\x6D\x6D\x6F\x6E", 96 },
5125 { "\x43\x6F\x70\x74", 150 },
5126 { "\x43\x6F\x70\x74\x69\x63", 150 },
5127 { "\x43\x70\x6D\x6E", 252 },
5128 { "\x43\x70\x72\x74", 147 },
5129 { "\x43\x75\x6E\x65\x69\x66\x6F\x72\x6D", 158 },
5130 { "\x43\x79\x70\x72\x69\x6F\x74", 147 },
5131 { "\x43\x79\x70\x72\x6F\x5F\x4D\x69\x6E\x6F\x61\x6E", 252 },
5132 { "\x43\x79\x72\x69\x6C\x6C\x69\x63", 99 },
5133 { "\x43\x79\x72\x6C", 99 },
5134 { "\x44\x65\x73\x65\x72\x65\x74", 135 },
5135 { "\x44\x65\x76\x61", 105 },
5136 { "\x44\x65\x76\x61\x6E\x61\x67\x61\x72\x69", 105 },
5137 { "\x44\x69\x61\x6B", 249 },
5138 { "\x44\x69\x76\x65\x73\x5F\x41\x6B\x75\x72\x75", 249 },
5139 { "\x44\x6F\x67\x72", 237 },
5140 { "\x44\x6F\x67\x72\x61", 237 },
5141 { "\x44\x73\x72\x74", 135 },
5142 { "\x44\x75\x70\x6C", 200 },
5143 { "\x44\x75\x70\x6C\x6F\x79\x61\x6E", 200 },
5144 { "\x45\x67\x79\x70", 176 },
5145 { "\x45\x67\x79\x70\x74\x69\x61\x6E\x5F\x48\x69\x65\x72\x6F\x67\x6C\x79\x70\x68\x73", 176 },
5146 { "\x45\x6C\x62\x61", 201 },
5147 { "\x45\x6C\x62\x61\x73\x61\x6E", 201 },
5148 { "\x45\x6C\x79\x6D", 244 },
5149 { "\x45\x6C\x79\x6D\x61\x69\x63", 244 },
5150 { "\x45\x74\x68\x69", 121 },
5151 { "\x45\x74\x68\x69\x6F\x70\x69\x63", 121 },
5152 { "\x47\x65\x6F\x72", 119 },
5153 { "\x47\x65\x6F\x72\x67\x69\x61\x6E", 119 },
5154 { "\x47\x6C\x61\x67", 152 },
5155 { "\x47\x6C\x61\x67\x6F\x6C\x69\x74\x69\x63", 152 },
5156 { "\x47\x6F\x6E\x67", 238 },
5157 { "\x47\x6F\x6E\x6D", 233 },
5158 { "\x47\x6F\x74\x68", 134 },
5159 { "\x47\x6F\x74\x68\x69\x63", 134 },
5160 { "\x47\x72\x61\x6E", 202 },
5161 { "\x47\x72\x61\x6E\x74\x68\x61", 202 },
5162 { "\x47\x72\x65\x65\x6B", 98 },
5163 { "\x47\x72\x65\x6B", 98 },
5164 { "\x47\x75\x6A\x61\x72\x61\x74\x69", 108 },
5165 { "\x47\x75\x6A\x72", 108 },
5166 { "\x47\x75\x6E\x6A\x61\x6C\x61\x5F\x47\x6F\x6E\x64\x69", 238 },
5167 { "\x47\x75\x72\x6D\x75\x6B\x68\x69", 107 },
5168 { "\x47\x75\x72\x75", 107 },
5169 { "\x48\x61\x6E", 131 },
5170 { "\x48\x61\x6E\x67", 120 },
5171 { "\x48\x61\x6E\x67\x75\x6C", 120 },
5172 { "\x48\x61\x6E\x69", 131 },
5173 { "\x48\x61\x6E\x69\x66\x69\x5F\x52\x6F\x68\x69\x6E\x67\x79\x61", 241 },
5174 { "\x48\x61\x6E\x6F", 138 },
5175 { "\x48\x61\x6E\x75\x6E\x6F\x6F", 138 },
5176 { "\x48\x61\x74\x72", 223 },
5177 { "\x48\x61\x74\x72\x61\x6E", 223 },
5178 { "\x48\x65\x62\x72", 101 },
5179 { "\x48\x65\x62\x72\x65\x77", 101 },
5180 { "\x48\x69\x72\x61", 128 },
5181 { "\x48\x69\x72\x61\x67\x61\x6E\x61", 128 },
5182 { "\x48\x6C\x75\x77", 222 },
5183 { "\x48\x6D\x6E\x67", 203 },
5184 { "\x48\x6D\x6E\x70", 246 },
5185 { "\x48\x75\x6E\x67", 225 },
5186 { "\x49\x6D\x70\x65\x72\x69\x61\x6C\x5F\x41\x72\x61\x6D\x61\x69\x63", 182 },
5187 { "\x49\x6E\x68\x65\x72\x69\x74\x65\x64", 136 },
5188 { "\x49\x6E\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x61\x6C\x5F\x50\x61\x68\x6C\x61\x76\x69", 185 },
5189 { "\x49\x6E\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x61\x6C\x5F\x50\x61\x72\x74\x68\x69\x61\x6E", 184 },
5190 { "\x49\x74\x61\x6C", 133 },
5191 { "\x4A\x61\x76\x61", 180 },
5192 { "\x4A\x61\x76\x61\x6E\x65\x73\x65", 180 },
5193 { "\x4B\x61\x69\x74\x68\x69", 187 },
5194 { "\x4B\x61\x6C\x69", 167 },
5195 { "\x4B\x61\x6E\x61", 129 },
5196 { "\x4B\x61\x6E\x6E\x61\x64\x61", 112 },
5197 { "\x4B\x61\x74\x61\x6B\x61\x6E\x61", 129 },
5198 { "\x4B\x61\x77\x69", 257 },
5199 { "\x4B\x61\x79\x61\x68\x5F\x4C\x69", 167 },
5200 { "\x4B\x68\x61\x72", 156 },
5201 { "\x4B\x68\x61\x72\x6F\x73\x68\x74\x68\x69", 156 },
5202 { "\x4B\x68\x69\x74\x61\x6E\x5F\x53\x6D\x61\x6C\x6C\x5F\x53\x63\x72\x69\x70\x74", 250 },
5203 { "\x4B\x68\x6D\x65\x72", 126 },
5204 { "\x4B\x68\x6D\x72", 126 },
5205 { "\x4B\x68\x6F\x6A", 204 },
5206 { "\x4B\x68\x6F\x6A\x6B\x69", 204 },
5207 { "\x4B\x68\x75\x64\x61\x77\x61\x64\x69", 218 },
5208 { "\x4B\x69\x74\x73", 250 },
5209 { "\x4B\x6E\x64\x61", 112 },
5210 { "\x4B\x74\x68\x69", 187 },
5211 { "\x4C\x61\x6E\x61", 173 },
5212 { "\x4C\x61\x6F", 116 },
5213 { "\x4C\x61\x6F\x6F", 116 },
5214 { "\x4C\x61\x74\x69\x6E", 97 },
5215 { "\x4C\x61\x74\x6E", 97 },
5216 { "\x4C\x65\x70\x63", 163 },
5217 { "\x4C\x65\x70\x63\x68\x61", 163 },
5218 { "\x4C\x69\x6D\x62", 141 },
5219 { "\x4C\x69\x6D\x62\x75", 141 },
5220 { "\x4C\x69\x6E\x61", 205 },
5221 { "\x4C\x69\x6E\x62", 143 },
5222 { "\x4C\x69\x6E\x65\x61\x72\x5F\x41", 205 },
5223 { "\x4C\x69\x6E\x65\x61\x72\x5F\x42", 143 },
5224 { "\x4C\x69\x73\x75", 178 },
5225 { "\x4C\x79\x63\x69", 169 },
5226 { "\x4C\x79\x63\x69\x61\x6E", 169 },
5227 { "\x4C\x79\x64\x69", 171 },
5228 { "\x4C\x79\x64\x69\x61\x6E", 171 },
5229 { "\x4D\x61\x68\x61\x6A\x61\x6E\x69", 206 },
5230 { "\x4D\x61\x68\x6A", 206 },
5231 { "\x4D\x61\x6B\x61", 239 },
5232 { "\x4D\x61\x6B\x61\x73\x61\x72", 239 },
5233 { "\x4D\x61\x6C\x61\x79\x61\x6C\x61\x6D", 113 },
5234 { "\x4D\x61\x6E\x64", 190 },
5235 { "\x4D\x61\x6E\x64\x61\x69\x63", 190 },
5236 { "\x4D\x61\x6E\x69", 207 },
5237 { "\x4D\x61\x6E\x69\x63\x68\x61\x65\x61\x6E", 207 },
5238 { "\x4D\x61\x72\x63", 229 },
5239 { "\x4D\x61\x72\x63\x68\x65\x6E", 229 },
5240 { "\x4D\x61\x73\x61\x72\x61\x6D\x5F\x47\x6F\x6E\x64\x69", 233 },
5241 { "\x4D\x65\x64\x65\x66\x61\x69\x64\x72\x69\x6E", 240 },
5242 { "\x4D\x65\x64\x66", 240 },
5243 { "\x4D\x65\x65\x74\x65\x69\x5F\x4D\x61\x79\x65\x6B", 181 },
5244 { "\x4D\x65\x6E\x64", 208 },
5245 { "\x4D\x65\x6E\x64\x65\x5F\x4B\x69\x6B\x61\x6B\x75\x69", 208 },
5246 { "\x4D\x65\x72\x63", 192 },
5247 { "\x4D\x65\x72\x6F", 193 },
5248 { "\x4D\x65\x72\x6F\x69\x74\x69\x63\x5F\x43\x75\x72\x73\x69\x76\x65", 192 },
5249 { "\x4D\x65\x72\x6F\x69\x74\x69\x63\x5F\x48\x69\x65\x72\x6F\x67\x6C\x79\x70\x68\x73", 193 },
5250 { "\x4D\x69\x61\x6F", 194 },
5251 { "\x4D\x6C\x79\x6D", 113 },
5252 { "\x4D\x6F\x64\x69", 209 },
5253 { "\x4D\x6F\x6E\x67", 127 },
5254 { "\x4D\x6F\x6E\x67\x6F\x6C\x69\x61\x6E", 127 },
5255 { "\x4D\x72\x6F", 210 },
5256 { "\x4D\x72\x6F\x6F", 210 },
5257 { "\x4D\x74\x65\x69", 181 },
5258 { "\x4D\x75\x6C\x74", 224 },
5259 { "\x4D\x75\x6C\x74\x61\x6E\x69", 224 },
5260 { "\x4D\x79\x61\x6E\x6D\x61\x72", 118 },
5261 { "\x4D\x79\x6D\x72", 118 },
5262 { "\x4E\x61\x62\x61\x74\x61\x65\x61\x6E", 212 },
5263 { "\x4E\x61\x67\x5F\x4D\x75\x6E\x64\x61\x72\x69", 258 },
5264 { "\x4E\x61\x67\x6D", 258 },
5265 { "\x4E\x61\x6E\x64", 245 },
5266 { "\x4E\x61\x6E\x64\x69\x6E\x61\x67\x61\x72\x69", 245 },
5267 { "\x4E\x61\x72\x62", 211 },
5268 { "\x4E\x62\x61\x74", 212 },
5269 { "\x4E\x65\x77\x5F\x54\x61\x69\x5F\x4C\x75\x65", 151 },
5270 { "\x4E\x65\x77\x61", 230 },
5271 { "\x4E\x6B\x6F", 161 },
5272 { "\x4E\x6B\x6F\x6F", 161 },
5273 { "\x4E\x73\x68\x75", 234 },
5274 { "\x4E\x75\x73\x68\x75", 234 },
5275 { "\x4E\x79\x69\x61\x6B\x65\x6E\x67\x5F\x50\x75\x61\x63\x68\x75\x65\x5F\x48\x6D\x6F\x6E\x67", 246 },
5276 { "\x4F\x67\x61\x6D", 124 },
5277 { "\x4F\x67\x68\x61\x6D", 124 },
5278 { "\x4F\x6C\x5F\x43\x68\x69\x6B\x69", 164 },
5279 { "\x4F\x6C\x63\x6B", 164 },
5280 { "\x4F\x6C\x64\x5F\x48\x75\x6E\x67\x61\x72\x69\x61\x6E", 225 },
5281 { "\x4F\x6C\x64\x5F\x49\x74\x61\x6C\x69\x63", 133 },
5282 { "\x4F\x6C\x64\x5F\x4E\x6F\x72\x74\x68\x5F\x41\x72\x61\x62\x69\x61\x6E", 211 },
5283 { "\x4F\x6C\x64\x5F\x50\x65\x72\x6D\x69\x63", 215 },
5284 { "\x4F\x6C\x64\x5F\x50\x65\x72\x73\x69\x61\x6E", 155 },
5285 { "\x4F\x6C\x64\x5F\x53\x6F\x67\x64\x69\x61\x6E", 243 },
5286 { "\x4F\x6C\x64\x5F\x53\x6F\x75\x74\x68\x5F\x41\x72\x61\x62\x69\x61\x6E", 183 },
5287 { "\x4F\x6C\x64\x5F\x54\x75\x72\x6B\x69\x63", 186 },
5288 { "\x4F\x6C\x64\x5F\x55\x79\x67\x68\x75\x72", 253 },
5289 { "\x4F\x72\x69\x79\x61", 109 },
5290 { "\x4F\x72\x6B\x68", 186 },
5291 { "\x4F\x72\x79\x61", 109 },
5292 { "\x4F\x73\x61\x67\x65", 231 },
5293 { "\x4F\x73\x67\x65", 231 },
5294 { "\x4F\x73\x6D\x61", 146 },
5295 { "\x4F\x73\x6D\x61\x6E\x79\x61", 146 },
5296 { "\x4F\x75\x67\x72", 253 },
5297 { "\x50\x61\x68\x61\x77\x68\x5F\x48\x6D\x6F\x6E\x67", 203 },
5298 { "\x50\x61\x6C\x6D", 213 },
5299 { "\x50\x61\x6C\x6D\x79\x72\x65\x6E\x65", 213 },
5300 { "\x50\x61\x75\x5F\x43\x69\x6E\x5F\x48\x61\x75", 214 },
5301 { "\x50\x61\x75\x63", 214 },
5302 { "\x50\x65\x72\x6D", 215 },
5303 { "\x50\x68\x61\x67", 160 },
5304 { "\x50\x68\x61\x67\x73\x5F\x50\x61", 160 },
5305 { "\x50\x68\x6C\x69", 185 },
5306 { "\x50\x68\x6C\x70", 216 },
5307 { "\x50\x68\x6E\x78", 159 },
5308 { "\x50\x68\x6F\x65\x6E\x69\x63\x69\x61\x6E", 159 },
5309 { "\x50\x6C\x72\x64", 194 },
5310 { "\x50\x72\x74\x69", 184 },
5311 { "\x50\x73\x61\x6C\x74\x65\x72\x5F\x50\x61\x68\x6C\x61\x76\x69", 216 },
5312 { "\x51\x61\x61\x63", 150 },
5313 { "\x51\x61\x61\x69", 136 },
5314 { "\x52\x65\x6A\x61\x6E\x67", 168 },
5315 { "\x52\x6A\x6E\x67", 168 },
5316 { "\x52\x6F\x68\x67", 241 },
5317 { "\x52\x75\x6E\x69\x63", 125 },
5318 { "\x52\x75\x6E\x72", 125 },
5319 { "\x53\x61\x6D\x61\x72\x69\x74\x61\x6E", 177 },
5320 { "\x53\x61\x6D\x72", 177 },
5321 { "\x53\x61\x72\x62", 183 },
5322 { "\x53\x61\x75\x72", 166 },
5323 { "\x53\x61\x75\x72\x61\x73\x68\x74\x72\x61", 166 },
5324 { "\x53\x67\x6E\x77", 226 },
5325 { "\x53\x68\x61\x72\x61\x64\x61", 195 },
5326 { "\x53\x68\x61\x76\x69\x61\x6E", 145 },
5327 { "\x53\x68\x61\x77", 145 },
5328 { "\x53\x68\x72\x64", 195 },
5329 { "\x53\x69\x64\x64", 217 },
5330 { "\x53\x69\x64\x64\x68\x61\x6D", 217 },
5331 { "\x53\x69\x67\x6E\x57\x72\x69\x74\x69\x6E\x67", 226 },
5332 { "\x53\x69\x6E\x64", 218 },
5333 { "\x53\x69\x6E\x68", 114 },
5334 { "\x53\x69\x6E\x68\x61\x6C\x61", 114 },
5335 { "\x53\x6F\x67\x64", 242 },
5336 { "\x53\x6F\x67\x64\x69\x61\x6E", 242 },
5337 { "\x53\x6F\x67\x6F", 243 },
5338 { "\x53\x6F\x72\x61", 196 },
5339 { "\x53\x6F\x72\x61\x5F\x53\x6F\x6D\x70\x65\x6E\x67", 196 },
5340 { "\x53\x6F\x79\x6F", 235 },
5341 { "\x53\x6F\x79\x6F\x6D\x62\x6F", 235 },
5342 { "\x53\x75\x6E\x64", 162 },
5343 { "\x53\x75\x6E\x64\x61\x6E\x65\x73\x65", 162 },
5344 { "\x53\x79\x6C\x6F", 154 },
5345 { "\x53\x79\x6C\x6F\x74\x69\x5F\x4E\x61\x67\x72\x69", 154 },
5346 { "\x53\x79\x72\x63", 103 },
5347 { "\x53\x79\x72\x69\x61\x63", 103 },
5348 { "\x54\x61\x67\x61\x6C\x6F\x67", 137 },
5349 { "\x54\x61\x67\x62", 140 },
5350 { "\x54\x61\x67\x62\x61\x6E\x77\x61", 140 },
5351 { "\x54\x61\x69\x5F\x4C\x65", 142 },
5352 { "\x54\x61\x69\x5F\x54\x68\x61\x6D", 173 },
5353 { "\x54\x61\x69\x5F\x56\x69\x65\x74", 174 },
5354 { "\x54\x61\x6B\x72", 197 },
5355 { "\x54\x61\x6B\x72\x69", 197 },
5356 { "\x54\x61\x6C\x65", 142 },
5357 { "\x54\x61\x6C\x75", 151 },
5358 { "\x54\x61\x6D\x69\x6C", 110 },
5359 { "\x54\x61\x6D\x6C", 110 },
5360 { "\x54\x61\x6E\x67", 232 },
5361 { "\x54\x61\x6E\x67\x73\x61", 254 },
5362 { "\x54\x61\x6E\x67\x75\x74", 232 },
5363 { "\x54\x61\x76\x74", 174 },
5364 { "\x54\x65\x6C\x75", 111 },
5365 { "\x54\x65\x6C\x75\x67\x75", 111 },
5366 { "\x54\x66\x6E\x67", 153 },
5367 { "\x54\x67\x6C\x67", 137 },
5368 { "\x54\x68\x61\x61", 104 },
5369 { "\x54\x68\x61\x61\x6E\x61", 104 },
5370 { "\x54\x68\x61\x69", 115 },
5371 { "\x54\x69\x62\x65\x74\x61\x6E", 117 },
5372 { "\x54\x69\x62\x74", 117 },
5373 { "\x54\x69\x66\x69\x6E\x61\x67\x68", 153 },
5374 { "\x54\x69\x72\x68", 219 },
5375 { "\x54\x69\x72\x68\x75\x74\x61", 219 },
5376 { "\x54\x6E\x73\x61", 254 },
5377 { "\x54\x6F\x74\x6F", 255 },
5378 { "\x55\x67\x61\x72", 144 },
5379 { "\x55\x67\x61\x72\x69\x74\x69\x63", 144 },
5380 { "\x55\x6E\x6B\x6E\x6F\x77\x6E", 259 },
5381 { "\x56\x61\x69", 165 },
5382 { "\x56\x61\x69\x69", 165 },
5383 { "\x56\x69\x74\x68", 256 },
5384 { "\x56\x69\x74\x68\x6B\x75\x71\x69", 256 },
5385 { "\x57\x61\x6E\x63\x68\x6F", 247 },
5386 { "\x57\x61\x72\x61", 220 },
5387 { "\x57\x61\x72\x61\x6E\x67\x5F\x43\x69\x74\x69", 220 },
5388 { "\x57\x63\x68\x6F", 247 },
5389 { "\x58\x70\x65\x6F", 155 },
5390 { "\x58\x73\x75\x78", 158 },
5391 { "\x59\x65\x7A\x69", 251 },
5392 { "\x59\x65\x7A\x69\x64\x69", 251 },
5393 { "\x59\x69", 132 },
5394 { "\x59\x69\x69\x69", 132 },
5395 { "\x5A\x61\x6E\x61\x62\x61\x7A\x61\x72\x5F\x53\x71\x75\x61\x72\x65", 236 },
5396 { "\x5A\x61\x6E\x62", 236 },
5397 { "\x5A\x69\x6E\x68", 136 },
5398 { "\x5A\x79\x79\x79", 96 },
5399 { "\x5A\x7A\x7A\x7A", 259 },
5400 // scx: 322
5401 { "\x41\x64\x6C\x61\x6D", 320 },
5402 { "\x41\x64\x6C\x6D", 320 },
5403 { "\x41\x67\x68\x62", 198 },
5404 { "\x41\x68\x6F\x6D", 221 },
5405 { "\x41\x6E\x61\x74\x6F\x6C\x69\x61\x6E\x5F\x48\x69\x65\x72\x6F\x67\x6C\x79\x70\x68\x73", 222 },
5406 { "\x41\x72\x61\x62", 264 },
5407 { "\x41\x72\x61\x62\x69\x63", 264 },
5408 { "\x41\x72\x6D\x65\x6E\x69\x61\x6E", 100 },
5409 { "\x41\x72\x6D\x69", 182 },
5410 { "\x41\x72\x6D\x6E", 100 },
5411 { "\x41\x76\x65\x73\x74\x61\x6E", 175 },
5412 { "\x41\x76\x73\x74", 175 },
5413 { "\x42\x61\x6C\x69", 157 },
5414 { "\x42\x61\x6C\x69\x6E\x65\x73\x65", 157 },
5415 { "\x42\x61\x6D\x75", 179 },
5416 { "\x42\x61\x6D\x75\x6D", 179 },
5417 { "\x42\x61\x73\x73", 199 },
5418 { "\x42\x61\x73\x73\x61\x5F\x56\x61\x68", 199 },
5419 { "\x42\x61\x74\x61\x6B", 188 },
5420 { "\x42\x61\x74\x6B", 188 },
5421 { "\x42\x65\x6E\x67", 268 },
5422 { "\x42\x65\x6E\x67\x61\x6C\x69", 268 },
5423 { "\x42\x68\x61\x69\x6B\x73\x75\x6B\x69", 228 },
5424 { "\x42\x68\x6B\x73", 228 },
5425 { "\x42\x6F\x70\x6F", 283 },
5426 { "\x42\x6F\x70\x6F\x6D\x6F\x66\x6F", 283 },
5427 { "\x42\x72\x61\x68", 189 },
5428 { "\x42\x72\x61\x68\x6D\x69", 189 },
5429 { "\x42\x72\x61\x69", 148 },
5430 { "\x42\x72\x61\x69\x6C\x6C\x65", 148 },
5431 { "\x42\x75\x67\x69", 295 },
5432 { "\x42\x75\x67\x69\x6E\x65\x73\x65", 295 },
5433 { "\x42\x75\x68\x64", 289 },
5434 { "\x42\x75\x68\x69\x64", 289 },
5435 { "\x43\x61\x6B\x6D", 305 },
5436 { "\x43\x61\x6E\x61\x64\x69\x61\x6E\x5F\x41\x62\x6F\x72\x69\x67\x69\x6E\x61\x6C", 123 },
5437 { "\x43\x61\x6E\x73", 123 },
5438 { "\x43\x61\x72\x69", 170 },
5439 { "\x43\x61\x72\x69\x61\x6E", 170 },
5440 { "\x43\x61\x75\x63\x61\x73\x69\x61\x6E\x5F\x41\x6C\x62\x61\x6E\x69\x61\x6E", 198 },
5441 { "\x43\x68\x61\x6B\x6D\x61", 305 },
5442 { "\x43\x68\x61\x6D", 172 },
5443 { "\x43\x68\x65\x72", 122 },
5444 { "\x43\x68\x65\x72\x6F\x6B\x65\x65", 122 },
5445 { "\x43\x68\x6F\x72\x61\x73\x6D\x69\x61\x6E", 248 },
5446 { "\x43\x68\x72\x73", 248 },
5447 { "\x43\x6F\x6D\x6D\x6F\x6E", 260 },
5448 { "\x43\x6F\x70\x74", 296 },
5449 { "\x43\x6F\x70\x74\x69\x63", 296 },
5450 { "\x43\x70\x6D\x6E", 328 },
5451 { "\x43\x70\x72\x74", 294 },
5452 { "\x43\x75\x6E\x65\x69\x66\x6F\x72\x6D", 158 },
5453 { "\x43\x79\x70\x72\x69\x6F\x74", 294 },
5454 { "\x43\x79\x70\x72\x6F\x5F\x4D\x69\x6E\x6F\x61\x6E", 328 },
5455 { "\x43\x79\x72\x69\x6C\x6C\x69\x63", 263 },
5456 { "\x43\x79\x72\x6C", 263 },
5457 { "\x44\x65\x73\x65\x72\x65\x74", 135 },
5458 { "\x44\x65\x76\x61", 267 },
5459 { "\x44\x65\x76\x61\x6E\x61\x67\x61\x72\x69", 267 },
5460 { "\x44\x69\x61\x6B", 249 },
5461 { "\x44\x69\x76\x65\x73\x5F\x41\x6B\x75\x72\x75", 249 },
5462 { "\x44\x6F\x67\x72", 322 },
5463 { "\x44\x6F\x67\x72\x61", 322 },
5464 { "\x44\x73\x72\x74", 135 },
5465 { "\x44\x75\x70\x6C", 308 },
5466 { "\x44\x75\x70\x6C\x6F\x79\x61\x6E", 308 },
5467 { "\x45\x67\x79\x70", 176 },
5468 { "\x45\x67\x79\x70\x74\x69\x61\x6E\x5F\x48\x69\x65\x72\x6F\x67\x6C\x79\x70\x68\x73", 176 },
5469 { "\x45\x6C\x62\x61", 201 },
5470 { "\x45\x6C\x62\x61\x73\x61\x6E", 201 },
5471 { "\x45\x6C\x79\x6D", 244 },
5472 { "\x45\x6C\x79\x6D\x61\x69\x63", 244 },
5473 { "\x45\x74\x68\x69", 121 },
5474 { "\x45\x74\x68\x69\x6F\x70\x69\x63", 121 },
5475 { "\x47\x65\x6F\x72", 278 },
5476 { "\x47\x65\x6F\x72\x67\x69\x61\x6E", 278 },
5477 { "\x47\x6C\x61\x67", 297 },
5478 { "\x47\x6C\x61\x67\x6F\x6C\x69\x74\x69\x63", 297 },
5479 { "\x47\x6F\x6E\x67", 323 },
5480 { "\x47\x6F\x6E\x6D", 321 },
5481 { "\x47\x6F\x74\x68", 134 },
5482 { "\x47\x6F\x74\x68\x69\x63", 134 },
5483 { "\x47\x72\x61\x6E", 309 },
5484 { "\x47\x72\x61\x6E\x74\x68\x61", 309 },
5485 { "\x47\x72\x65\x65\x6B", 262 },
5486 { "\x47\x72\x65\x6B", 262 },
5487 { "\x47\x75\x6A\x61\x72\x61\x74\x69", 270 },
5488 { "\x47\x75\x6A\x72", 270 },
5489 { "\x47\x75\x6E\x6A\x61\x6C\x61\x5F\x47\x6F\x6E\x64\x69", 323 },
5490 { "\x47\x75\x72\x6D\x75\x6B\x68\x69", 269 },
5491 { "\x47\x75\x72\x75", 269 },
5492 { "\x48\x61\x6E", 284 },
5493 { "\x48\x61\x6E\x67", 279 },
5494 { "\x48\x61\x6E\x67\x75\x6C", 279 },
5495 { "\x48\x61\x6E\x69", 284 },
5496 { "\x48\x61\x6E\x69\x66\x69\x5F\x52\x6F\x68\x69\x6E\x67\x79\x61", 324 },
5497 { "\x48\x61\x6E\x6F", 288 },
5498 { "\x48\x61\x6E\x75\x6E\x6F\x6F", 288 },
5499 { "\x48\x61\x74\x72", 223 },
5500 { "\x48\x61\x74\x72\x61\x6E", 223 },
5501 { "\x48\x65\x62\x72", 101 },
5502 { "\x48\x65\x62\x72\x65\x77", 101 },
5503 { "\x48\x69\x72\x61", 281 },
5504 { "\x48\x69\x72\x61\x67\x61\x6E\x61", 281 },
5505 { "\x48\x6C\x75\x77", 222 },
5506 { "\x48\x6D\x6E\x67", 203 },
5507 { "\x48\x6D\x6E\x70", 246 },
5508 { "\x48\x75\x6E\x67", 225 },
5509 { "\x49\x6D\x70\x65\x72\x69\x61\x6C\x5F\x41\x72\x61\x6D\x61\x69\x63", 182 },
5510 { "\x49\x6E\x68\x65\x72\x69\x74\x65\x64", 286 },
5511 { "\x49\x6E\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x61\x6C\x5F\x50\x61\x68\x6C\x61\x76\x69", 185 },
5512 { "\x49\x6E\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x61\x6C\x5F\x50\x61\x72\x74\x68\x69\x61\x6E", 184 },
5513 { "\x49\x74\x61\x6C", 133 },
5514 { "\x4A\x61\x76\x61", 302 },
5515 { "\x4A\x61\x76\x61\x6E\x65\x73\x65", 302 },
5516 { "\x4B\x61\x69\x74\x68\x69", 303 },
5517 { "\x4B\x61\x6C\x69", 301 },
5518 { "\x4B\x61\x6E\x61", 282 },
5519 { "\x4B\x61\x6E\x6E\x61\x64\x61", 274 },
5520 { "\x4B\x61\x74\x61\x6B\x61\x6E\x61", 282 },
5521 { "\x4B\x61\x77\x69", 257 },
5522 { "\x4B\x61\x79\x61\x68\x5F\x4C\x69", 301 },
5523 { "\x4B\x68\x61\x72", 156 },
5524 { "\x4B\x68\x61\x72\x6F\x73\x68\x74\x68\x69", 156 },
5525 { "\x4B\x68\x69\x74\x61\x6E\x5F\x53\x6D\x61\x6C\x6C\x5F\x53\x63\x72\x69\x70\x74", 250 },
5526 { "\x4B\x68\x6D\x65\x72", 126 },
5527 { "\x4B\x68\x6D\x72", 126 },
5528 { "\x4B\x68\x6F\x6A", 310 },
5529 { "\x4B\x68\x6F\x6A\x6B\x69", 310 },
5530 { "\x4B\x68\x75\x64\x61\x77\x61\x64\x69", 317 },
5531 { "\x4B\x69\x74\x73", 250 },
5532 { "\x4B\x6E\x64\x61", 274 },
5533 { "\x4B\x74\x68\x69", 303 },
5534 { "\x4C\x61\x6E\x61", 173 },
5535 { "\x4C\x61\x6F", 116 },
5536 { "\x4C\x61\x6F\x6F", 116 },
5537 { "\x4C\x61\x74\x69\x6E", 261 },
5538 { "\x4C\x61\x74\x6E", 261 },
5539 { "\x4C\x65\x70\x63", 163 },
5540 { "\x4C\x65\x70\x63\x68\x61", 163 },
5541 { "\x4C\x69\x6D\x62", 291 },
5542 { "\x4C\x69\x6D\x62\x75", 291 },
5543 { "\x4C\x69\x6E\x61", 311 },
5544 { "\x4C\x69\x6E\x62", 293 },
5545 { "\x4C\x69\x6E\x65\x61\x72\x5F\x41", 311 },
5546 { "\x4C\x69\x6E\x65\x61\x72\x5F\x42", 293 },
5547 { "\x4C\x69\x73\x75", 178 },
5548 { "\x4C\x79\x63\x69", 169 },
5549 { "\x4C\x79\x63\x69\x61\x6E", 169 },
5550 { "\x4C\x79\x64\x69", 171 },
5551 { "\x4C\x79\x64\x69\x61\x6E", 171 },
5552 { "\x4D\x61\x68\x61\x6A\x61\x6E\x69", 312 },
5553 { "\x4D\x61\x68\x6A", 312 },
5554 { "\x4D\x61\x6B\x61", 239 },
5555 { "\x4D\x61\x6B\x61\x73\x61\x72", 239 },
5556 { "\x4D\x61\x6C\x61\x79\x61\x6C\x61\x6D", 275 },
5557 { "\x4D\x61\x6E\x64", 304 },
5558 { "\x4D\x61\x6E\x64\x61\x69\x63", 304 },
5559 { "\x4D\x61\x6E\x69", 313 },
5560 { "\x4D\x61\x6E\x69\x63\x68\x61\x65\x61\x6E", 313 },
5561 { "\x4D\x61\x72\x63", 229 },
5562 { "\x4D\x61\x72\x63\x68\x65\x6E", 229 },
5563 { "\x4D\x61\x73\x61\x72\x61\x6D\x5F\x47\x6F\x6E\x64\x69", 321 },
5564 { "\x4D\x65\x64\x65\x66\x61\x69\x64\x72\x69\x6E", 240 },
5565 { "\x4D\x65\x64\x66", 240 },
5566 { "\x4D\x65\x65\x74\x65\x69\x5F\x4D\x61\x79\x65\x6B", 181 },
5567 { "\x4D\x65\x6E\x64", 208 },
5568 { "\x4D\x65\x6E\x64\x65\x5F\x4B\x69\x6B\x61\x6B\x75\x69", 208 },
5569 { "\x4D\x65\x72\x63", 192 },
5570 { "\x4D\x65\x72\x6F", 193 },
5571 { "\x4D\x65\x72\x6F\x69\x74\x69\x63\x5F\x43\x75\x72\x73\x69\x76\x65", 192 },
5572 { "\x4D\x65\x72\x6F\x69\x74\x69\x63\x5F\x48\x69\x65\x72\x6F\x67\x6C\x79\x70\x68\x73", 193 },
5573 { "\x4D\x69\x61\x6F", 194 },
5574 { "\x4D\x6C\x79\x6D", 275 },
5575 { "\x4D\x6F\x64\x69", 314 },
5576 { "\x4D\x6F\x6E\x67", 280 },
5577 { "\x4D\x6F\x6E\x67\x6F\x6C\x69\x61\x6E", 280 },
5578 { "\x4D\x72\x6F", 210 },
5579 { "\x4D\x72\x6F\x6F", 210 },
5580 { "\x4D\x74\x65\x69", 181 },
5581 { "\x4D\x75\x6C\x74", 319 },
5582 { "\x4D\x75\x6C\x74\x61\x6E\x69", 319 },
5583 { "\x4D\x79\x61\x6E\x6D\x61\x72", 277 },
5584 { "\x4D\x79\x6D\x72", 277 },
5585 { "\x4E\x61\x62\x61\x74\x61\x65\x61\x6E", 212 },
5586 { "\x4E\x61\x67\x5F\x4D\x75\x6E\x64\x61\x72\x69", 258 },
5587 { "\x4E\x61\x67\x6D", 258 },
5588 { "\x4E\x61\x6E\x64", 326 },
5589 { "\x4E\x61\x6E\x64\x69\x6E\x61\x67\x61\x72\x69", 326 },
5590 { "\x4E\x61\x72\x62", 211 },
5591 { "\x4E\x62\x61\x74", 212 },
5592 { "\x4E\x65\x77\x5F\x54\x61\x69\x5F\x4C\x75\x65", 151 },
5593 { "\x4E\x65\x77\x61", 230 },
5594 { "\x4E\x6B\x6F", 300 },
5595 { "\x4E\x6B\x6F\x6F", 300 },
5596 { "\x4E\x73\x68\x75", 234 },
5597 { "\x4E\x75\x73\x68\x75", 234 },
5598 { "\x4E\x79\x69\x61\x6B\x65\x6E\x67\x5F\x50\x75\x61\x63\x68\x75\x65\x5F\x48\x6D\x6F\x6E\x67", 246 },
5599 { "\x4F\x67\x61\x6D", 124 },
5600 { "\x4F\x67\x68\x61\x6D", 124 },
5601 { "\x4F\x6C\x5F\x43\x68\x69\x6B\x69", 164 },
5602 { "\x4F\x6C\x63\x6B", 164 },
5603 { "\x4F\x6C\x64\x5F\x48\x75\x6E\x67\x61\x72\x69\x61\x6E", 225 },
5604 { "\x4F\x6C\x64\x5F\x49\x74\x61\x6C\x69\x63", 133 },
5605 { "\x4F\x6C\x64\x5F\x4E\x6F\x72\x74\x68\x5F\x41\x72\x61\x62\x69\x61\x6E", 211 },
5606 { "\x4F\x6C\x64\x5F\x50\x65\x72\x6D\x69\x63", 315 },
5607 { "\x4F\x6C\x64\x5F\x50\x65\x72\x73\x69\x61\x6E", 155 },
5608 { "\x4F\x6C\x64\x5F\x53\x6F\x67\x64\x69\x61\x6E", 243 },
5609 { "\x4F\x6C\x64\x5F\x53\x6F\x75\x74\x68\x5F\x41\x72\x61\x62\x69\x61\x6E", 183 },
5610 { "\x4F\x6C\x64\x5F\x54\x75\x72\x6B\x69\x63", 186 },
5611 { "\x4F\x6C\x64\x5F\x55\x79\x67\x68\x75\x72", 329 },
5612 { "\x4F\x72\x69\x79\x61", 271 },
5613 { "\x4F\x72\x6B\x68", 186 },
5614 { "\x4F\x72\x79\x61", 271 },
5615 { "\x4F\x73\x61\x67\x65", 231 },
5616 { "\x4F\x73\x67\x65", 231 },
5617 { "\x4F\x73\x6D\x61", 146 },
5618 { "\x4F\x73\x6D\x61\x6E\x79\x61", 146 },
5619 { "\x4F\x75\x67\x72", 329 },
5620 { "\x50\x61\x68\x61\x77\x68\x5F\x48\x6D\x6F\x6E\x67", 203 },
5621 { "\x50\x61\x6C\x6D", 213 },
5622 { "\x50\x61\x6C\x6D\x79\x72\x65\x6E\x65", 213 },
5623 { "\x50\x61\x75\x5F\x43\x69\x6E\x5F\x48\x61\x75", 214 },
5624 { "\x50\x61\x75\x63", 214 },
5625 { "\x50\x65\x72\x6D", 315 },
5626 { "\x50\x68\x61\x67", 299 },
5627 { "\x50\x68\x61\x67\x73\x5F\x50\x61", 299 },
5628 { "\x50\x68\x6C\x69", 185 },
5629 { "\x50\x68\x6C\x70", 316 },
5630 { "\x50\x68\x6E\x78", 159 },
5631 { "\x50\x68\x6F\x65\x6E\x69\x63\x69\x61\x6E", 159 },
5632 { "\x50\x6C\x72\x64", 194 },
5633 { "\x50\x72\x74\x69", 184 },
5634 { "\x50\x73\x61\x6C\x74\x65\x72\x5F\x50\x61\x68\x6C\x61\x76\x69", 316 },
5635 { "\x51\x61\x61\x63", 296 },
5636 { "\x51\x61\x61\x69", 286 },
5637 { "\x52\x65\x6A\x61\x6E\x67", 168 },
5638 { "\x52\x6A\x6E\x67", 168 },
5639 { "\x52\x6F\x68\x67", 324 },
5640 { "\x52\x75\x6E\x69\x63", 125 },
5641 { "\x52\x75\x6E\x72", 125 },
5642 { "\x53\x61\x6D\x61\x72\x69\x74\x61\x6E", 177 },
5643 { "\x53\x61\x6D\x72", 177 },
5644 { "\x53\x61\x72\x62", 183 },
5645 { "\x53\x61\x75\x72", 166 },
5646 { "\x53\x61\x75\x72\x61\x73\x68\x74\x72\x61", 166 },
5647 { "\x53\x67\x6E\x77", 226 },
5648 { "\x53\x68\x61\x72\x61\x64\x61", 306 },
5649 { "\x53\x68\x61\x76\x69\x61\x6E", 145 },
5650 { "\x53\x68\x61\x77", 145 },
5651 { "\x53\x68\x72\x64", 306 },
5652 { "\x53\x69\x64\x64", 217 },
5653 { "\x53\x69\x64\x64\x68\x61\x6D", 217 },
5654 { "\x53\x69\x67\x6E\x57\x72\x69\x74\x69\x6E\x67", 226 },
5655 { "\x53\x69\x6E\x64", 317 },
5656 { "\x53\x69\x6E\x68", 276 },
5657 { "\x53\x69\x6E\x68\x61\x6C\x61", 276 },
5658 { "\x53\x6F\x67\x64", 325 },
5659 { "\x53\x6F\x67\x64\x69\x61\x6E", 325 },
5660 { "\x53\x6F\x67\x6F", 243 },
5661 { "\x53\x6F\x72\x61", 196 },
5662 { "\x53\x6F\x72\x61\x5F\x53\x6F\x6D\x70\x65\x6E\x67", 196 },
5663 { "\x53\x6F\x79\x6F", 235 },
5664 { "\x53\x6F\x79\x6F\x6D\x62\x6F", 235 },
5665 { "\x53\x75\x6E\x64", 162 },
5666 { "\x53\x75\x6E\x64\x61\x6E\x65\x73\x65", 162 },
5667 { "\x53\x79\x6C\x6F", 298 },
5668 { "\x53\x79\x6C\x6F\x74\x69\x5F\x4E\x61\x67\x72\x69", 298 },
5669 { "\x53\x79\x72\x63", 265 },
5670 { "\x53\x79\x72\x69\x61\x63", 265 },
5671 { "\x54\x61\x67\x61\x6C\x6F\x67", 287 },
5672 { "\x54\x61\x67\x62", 290 },
5673 { "\x54\x61\x67\x62\x61\x6E\x77\x61", 290 },
5674 { "\x54\x61\x69\x5F\x4C\x65", 292 },
5675 { "\x54\x61\x69\x5F\x54\x68\x61\x6D", 173 },
5676 { "\x54\x61\x69\x5F\x56\x69\x65\x74", 174 },
5677 { "\x54\x61\x6B\x72", 307 },
5678 { "\x54\x61\x6B\x72\x69", 307 },
5679 { "\x54\x61\x6C\x65", 292 },
5680 { "\x54\x61\x6C\x75", 151 },
5681 { "\x54\x61\x6D\x69\x6C", 272 },
5682 { "\x54\x61\x6D\x6C", 272 },
5683 { "\x54\x61\x6E\x67", 232 },
5684 { "\x54\x61\x6E\x67\x73\x61", 254 },
5685 { "\x54\x61\x6E\x67\x75\x74", 232 },
5686 { "\x54\x61\x76\x74", 174 },
5687 { "\x54\x65\x6C\x75", 273 },
5688 { "\x54\x65\x6C\x75\x67\x75", 273 },
5689 { "\x54\x66\x6E\x67", 153 },
5690 { "\x54\x67\x6C\x67", 287 },
5691 { "\x54\x68\x61\x61", 266 },
5692 { "\x54\x68\x61\x61\x6E\x61", 266 },
5693 { "\x54\x68\x61\x69", 115 },
5694 { "\x54\x69\x62\x65\x74\x61\x6E", 117 },
5695 { "\x54\x69\x62\x74", 117 },
5696 { "\x54\x69\x66\x69\x6E\x61\x67\x68", 153 },
5697 { "\x54\x69\x72\x68", 318 },
5698 { "\x54\x69\x72\x68\x75\x74\x61", 318 },
5699 { "\x54\x6E\x73\x61", 254 },
5700 { "\x54\x6F\x74\x6F", 255 },
5701 { "\x55\x67\x61\x72", 144 },
5702 { "\x55\x67\x61\x72\x69\x74\x69\x63", 144 },
5703 { "\x55\x6E\x6B\x6E\x6F\x77\x6E", 259 },
5704 { "\x56\x61\x69", 165 },
5705 { "\x56\x61\x69\x69", 165 },
5706 { "\x56\x69\x74\x68", 256 },
5707 { "\x56\x69\x74\x68\x6B\x75\x71\x69", 256 },
5708 { "\x57\x61\x6E\x63\x68\x6F", 247 },
5709 { "\x57\x61\x72\x61", 220 },
5710 { "\x57\x61\x72\x61\x6E\x67\x5F\x43\x69\x74\x69", 220 },
5711 { "\x57\x63\x68\x6F", 247 },
5712 { "\x58\x70\x65\x6F", 155 },
5713 { "\x58\x73\x75\x78", 158 },
5714 { "\x59\x65\x7A\x69", 327 },
5715 { "\x59\x65\x7A\x69\x64\x69", 327 },
5716 { "\x59\x69", 285 },
5717 { "\x59\x69\x69\x69", 285 },
5718 { "\x5A\x61\x6E\x61\x62\x61\x7A\x61\x72\x5F\x53\x71\x75\x61\x72\x65", 236 },
5719 { "\x5A\x61\x6E\x62", 236 },
5720 { "\x5A\x69\x6E\x68", 286 },
5721 { "\x5A\x79\x79\x79", 260 },
5722 { "\x5A\x7A\x7A\x7A", 259 }
5723 };
5724
5725 template <typename T3, typename T4, typename T5>
5726 const T4 unicode_property_data<T3, T4, T5>::positiontable[] =
5727 {
5728 { 0, 0 }, // #0 unknown
5729 { 86, 105 }, // #1 binary
5730 { 6, 80 }, // #2 General_Category:gc
5731 { 191, 322 }, // #3 Script:sc
5732 { 513, 322 }, // #4 Script_Extensions:scx
5733 { 0, 734 }, // #5 gc=Other:C
5734 { 0, 2 }, // #6 gc=Control:Cc:cntrl
5735 { 2, 21 }, // #7 gc=Format:Cf
5736 { 23, 707 }, // #8 gc=Unassigned:Cn
5737 { 730, 3 }, // #9 gc=Private_Use:Co
5738 { 733, 1 }, // #10 gc=Surrogate:Cs
5739 { 734, 1896 }, // #11 gc=Letter:L
5740 { 734, 1314 }, // #12 gc=Cased_Letter:LC
5741 { 734, 658 }, // #13 gc=Lowercase_Letter:Ll
5742 { 1392, 10 }, // #14 gc=Titlecase_Letter:Lt
5743 { 1402, 646 }, // #15 gc=Uppercase_Letter:Lu
5744 { 2048, 71 }, // #16 gc=Modifier_Letter:Lm
5745 { 2119, 511 }, // #17 gc=Other_Letter:Lo
5746 { 2630, 533 }, // #18 gc=Mark:M:Combining_Mark
5747 { 2630, 182 }, // #19 gc=Spacing_Mark:Mc
5748 { 2812, 5 }, // #20 gc=Enclosing_Mark:Me
5749 { 2817, 346 }, // #21 gc=Nonspacing_Mark:Mn
5750 { 3163, 148 }, // #22 gc=Number:N
5751 { 3163, 64 }, // #23 gc=Decimal_Number:Nd:digit
5752 { 3227, 12 }, // #24 gc=Letter_Number:Nl
5753 { 3239, 72 }, // #25 gc=Other_Number:No
5754 { 3311, 388 }, // #26 gc=Punctuation:P:punct
5755 { 3311, 6 }, // #27 gc=Connector_Punctuation:Pc
5756 { 3317, 19 }, // #28 gc=Dash_Punctuation:Pd
5757 { 3336, 76 }, // #29 gc=Close_Punctuation:Pe
5758 { 3412, 10 }, // #30 gc=Final_Punctuation:Pf
5759 { 3422, 11 }, // #31 gc=Initial_Punctuation:Pi
5760 { 3433, 187 }, // #32 gc=Other_Punctuation:Po
5761 { 3620, 79 }, // #33 gc=Open_Punctuation:Ps
5762 { 3699, 301 }, // #34 gc=Symbol:S
5763 { 3699, 21 }, // #35 gc=Currency_Symbol:Sc
5764 { 3720, 31 }, // #36 gc=Modifier_Symbol:Sk
5765 { 3751, 64 }, // #37 gc=Math_Symbol:Sm
5766 { 3815, 185 }, // #38 gc=Other_Symbol:So
5767 { 4000, 9 }, // #39 gc=Separator:Z
5768 { 4000, 1 }, // #40 gc=Line_Separator:Zl
5769 { 4001, 1 }, // #41 gc=Paragraph_Separator:Zp
5770 { 4002, 7 }, // #42 gc=Space_Separator:Zs
5771 { 4009, 1 }, // #43 bp=ASCII
5772 { 4010, 3 }, // #44 bp=ASCII_Hex_Digit:AHex
5773 { 4013, 733 }, // #45 bp=Alphabetic:Alpha
5774 { 4746, 1 }, // #46 bp=Any
5775 { 4747, 0 }, // #47 bp=Assigned
5776 { 4747, 4 }, // #48 bp=Bidi_Control:Bidi_C
5777 { 4751, 114 }, // #49 bp=Bidi_Mirrored:Bidi_M
5778 { 4865, 437 }, // #50 bp=Case_Ignorable:CI
5779 { 5302, 157 }, // #51 bp=Cased
5780 { 5459, 622 }, // #52 bp=Changes_When_Casefolded:CWCF
5781 { 6081, 131 }, // #53 bp=Changes_When_Casemapped:CWCM
5782 { 6212, 609 }, // #54 bp=Changes_When_Lowercased:CWL
5783 { 6821, 839 }, // #55 bp=Changes_When_NFKC_Casefolded:CWKCF
5784 { 7660, 626 }, // #56 bp=Changes_When_Titlecased:CWT
5785 { 8286, 627 }, // #57 bp=Changes_When_Uppercased:CWU
5786 { 8913, 23 }, // #58 bp=Dash
5787 { 8936, 17 }, // #59 bp=Default_Ignorable_Code_Point:DI
5788 { 8953, 8 }, // #60 bp=Deprecated:Dep
5789 { 8961, 195 }, // #61 bp=Diacritic:Dia
5790 { 9156, 151 }, // #62 bp=Emoji
5791 { 9307, 10 }, // #63 bp=Emoji_Component:EComp
5792 { 9317, 1 }, // #64 bp=Emoji_Modifier:EMod
5793 { 9318, 40 }, // #65 bp=Emoji_Modifier_Base:EBase
5794 { 9358, 81 }, // #66 bp=Emoji_Presentation:EPres
5795 { 9439, 78 }, // #67 bp=Extended_Pictographic:ExtPict
5796 { 9517, 33 }, // #68 bp=Extender:Ext
5797 { 9550, 875 }, // #69 bp=Grapheme_Base:Gr_Base
5798 { 10425, 363 }, // #70 bp=Grapheme_Extend:Gr_Ext
5799 { 10788, 6 }, // #71 bp=Hex_Digit:Hex
5800 { 10794, 3 }, // #72 bp=IDS_Binary_Operator:IDSB
5801 { 10797, 1 }, // #73 bp=IDS_Trinary_Operator:IDST
5802 { 10798, 769 }, // #74 bp=ID_Continue:IDC
5803 { 11567, 660 }, // #75 bp=ID_Start:IDS
5804 { 12227, 21 }, // #76 bp=Ideographic:Ideo
5805 { 12248, 1 }, // #77 bp=Join_Control:Join_C
5806 { 12249, 7 }, // #78 bp=Logical_Order_Exception:LOE
5807 { 12256, 671 }, // #79 bp=Lowercase:Lower
5808 { 12927, 138 }, // #80 bp=Math
5809 { 13065, 18 }, // #81 bp=Noncharacter_Code_Point:NChar
5810 { 13083, 28 }, // #82 bp=Pattern_Syntax:Pat_Syn
5811 { 13111, 5 }, // #83 bp=Pattern_White_Space:Pat_WS
5812 { 13116, 13 }, // #84 bp=Quotation_Mark:QMark
5813 { 13129, 3 }, // #85 bp=Radical
5814 { 13132, 1 }, // #86 bp=Regional_Indicator:RI
5815 { 13133, 81 }, // #87 bp=Sentence_Terminal:STerm
5816 { 13214, 34 }, // #88 bp=Soft_Dotted:SD
5817 { 13248, 108 }, // #89 bp=Terminal_Punctuation:Term
5818 { 13356, 17 }, // #90 bp=Unified_Ideograph:UIdeo
5819 { 13373, 651 }, // #91 bp=Uppercase:Upper
5820 { 14024, 4 }, // #92 bp=Variation_Selector:VS
5821 { 14028, 10 }, // #93 bp=White_Space:space
5822 { 14038, 776 }, // #94 bp=XID_Continue:XIDC
5823 { 14814, 667 }, // #95 bp=XID_Start:XIDS
5824 { 15481, 173 }, // #96 sc=Common:Zyyy
5825 { 15654, 39 }, // #97 sc=Latin:Latn
5826 { 15693, 36 }, // #98 sc=Greek:Grek
5827 { 15729, 10 }, // #99 sc=Cyrillic:Cyrl
5828 { 15739, 4 }, // #100 sc=Armenian:Armn scx=Armenian:Armn
5829 { 15743, 9 }, // #101 sc=Hebrew:Hebr scx=Hebrew:Hebr
5830 { 15752, 58 }, // #102 sc=Arabic:Arab
5831 { 15810, 4 }, // #103 sc=Syriac:Syrc
5832 { 15814, 1 }, // #104 sc=Thaana:Thaa
5833 { 15815, 5 }, // #105 sc=Devanagari:Deva
5834 { 15820, 14 }, // #106 sc=Bengali:Beng
5835 { 15834, 16 }, // #107 sc=Gurmukhi:Guru
5836 { 15850, 14 }, // #108 sc=Gujarati:Gujr
5837 { 15864, 14 }, // #109 sc=Oriya:Orya
5838 { 15878, 18 }, // #110 sc=Tamil:Taml
5839 { 15896, 13 }, // #111 sc=Telugu:Telu
5840 { 15909, 13 }, // #112 sc=Kannada:Knda
5841 { 15922, 7 }, // #113 sc=Malayalam:Mlym
5842 { 15929, 13 }, // #114 sc=Sinhala:Sinh
5843 { 15942, 2 }, // #115 sc=Thai scx=Thai
5844 { 15944, 11 }, // #116 sc=Lao:Laoo scx=Lao:Laoo
5845 { 15955, 7 }, // #117 sc=Tibetan:Tibt scx=Tibetan:Tibt
5846 { 15962, 3 }, // #118 sc=Myanmar:Mymr
5847 { 15965, 10 }, // #119 sc=Georgian:Geor
5848 { 15975, 14 }, // #120 sc=Hangul:Hang
5849 { 15989, 36 }, // #121 sc=Ethiopic:Ethi scx=Ethiopic:Ethi
5850 { 16025, 3 }, // #122 sc=Cherokee:Cher scx=Cherokee:Cher
5851 { 16028, 3 }, // #123 sc=Canadian_Aboriginal:Cans scx=Canadian_Aboriginal:Cans
5852 { 16031, 1 }, // #124 sc=Ogham:Ogam scx=Ogham:Ogam
5853 { 16032, 2 }, // #125 sc=Runic:Runr scx=Runic:Runr
5854 { 16034, 4 }, // #126 sc=Khmer:Khmr scx=Khmer:Khmr
5855 { 16038, 6 }, // #127 sc=Mongolian:Mong
5856 { 16044, 6 }, // #128 sc=Hiragana:Hira
5857 { 16050, 14 }, // #129 sc=Katakana:Kana
5858 { 16064, 3 }, // #130 sc=Bopomofo:Bopo
5859 { 16067, 22 }, // #131 sc=Han:Hani
5860 { 16089, 2 }, // #132 sc=Yi:Yiii
5861 { 16091, 2 }, // #133 sc=Old_Italic:Ital scx=Old_Italic:Ital
5862 { 16093, 1 }, // #134 sc=Gothic:Goth scx=Gothic:Goth
5863 { 16094, 1 }, // #135 sc=Deseret:Dsrt scx=Deseret:Dsrt
5864 { 16095, 29 }, // #136 sc=Inherited:Zinh:Qaai
5865 { 16124, 2 }, // #137 sc=Tagalog:Tglg
5866 { 16126, 1 }, // #138 sc=Hanunoo:Hano
5867 { 16127, 1 }, // #139 sc=Buhid:Buhd
5868 { 16128, 3 }, // #140 sc=Tagbanwa:Tagb
5869 { 16131, 5 }, // #141 sc=Limbu:Limb
5870 { 16136, 2 }, // #142 sc=Tai_Le:Tale
5871 { 16138, 7 }, // #143 sc=Linear_B:Linb
5872 { 16145, 2 }, // #144 sc=Ugaritic:Ugar scx=Ugaritic:Ugar
5873 { 16147, 1 }, // #145 sc=Shavian:Shaw scx=Shavian:Shaw
5874 { 16148, 2 }, // #146 sc=Osmanya:Osma scx=Osmanya:Osma
5875 { 16150, 6 }, // #147 sc=Cypriot:Cprt
5876 { 16156, 1 }, // #148 sc=Braille:Brai scx=Braille:Brai
5877 { 16157, 2 }, // #149 sc=Buginese:Bugi
5878 { 16159, 3 }, // #150 sc=Coptic:Copt:Qaac
5879 { 16162, 4 }, // #151 sc=New_Tai_Lue:Talu scx=New_Tai_Lue:Talu
5880 { 16166, 6 }, // #152 sc=Glagolitic:Glag
5881 { 16172, 3 }, // #153 sc=Tifinagh:Tfng scx=Tifinagh:Tfng
5882 { 16175, 1 }, // #154 sc=Syloti_Nagri:Sylo
5883 { 16176, 2 }, // #155 sc=Old_Persian:Xpeo scx=Old_Persian:Xpeo
5884 { 16178, 8 }, // #156 sc=Kharoshthi:Khar scx=Kharoshthi:Khar
5885 { 16186, 2 }, // #157 sc=Balinese:Bali scx=Balinese:Bali
5886 { 16188, 4 }, // #158 sc=Cuneiform:Xsux scx=Cuneiform:Xsux
5887 { 16192, 2 }, // #159 sc=Phoenician:Phnx scx=Phoenician:Phnx
5888 { 16194, 1 }, // #160 sc=Phags_Pa:Phag
5889 { 16195, 2 }, // #161 sc=Nko:Nkoo
5890 { 16197, 2 }, // #162 sc=Sundanese:Sund scx=Sundanese:Sund
5891 { 16199, 3 }, // #163 sc=Lepcha:Lepc scx=Lepcha:Lepc
5892 { 16202, 1 }, // #164 sc=Ol_Chiki:Olck scx=Ol_Chiki:Olck
5893 { 16203, 1 }, // #165 sc=Vai:Vaii scx=Vai:Vaii
5894 { 16204, 2 }, // #166 sc=Saurashtra:Saur scx=Saurashtra:Saur
5895 { 16206, 2 }, // #167 sc=Kayah_Li:Kali
5896 { 16208, 2 }, // #168 sc=Rejang:Rjng scx=Rejang:Rjng
5897 { 16210, 1 }, // #169 sc=Lycian:Lyci scx=Lycian:Lyci
5898 { 16211, 1 }, // #170 sc=Carian:Cari scx=Carian:Cari
5899 { 16212, 2 }, // #171 sc=Lydian:Lydi scx=Lydian:Lydi
5900 { 16214, 4 }, // #172 sc=Cham scx=Cham
5901 { 16218, 5 }, // #173 sc=Tai_Tham:Lana scx=Tai_Tham:Lana
5902 { 16223, 2 }, // #174 sc=Tai_Viet:Tavt scx=Tai_Viet:Tavt
5903 { 16225, 2 }, // #175 sc=Avestan:Avst scx=Avestan:Avst
5904 { 16227, 1 }, // #176 sc=Egyptian_Hieroglyphs:Egyp scx=Egyptian_Hieroglyphs:Egyp
5905 { 16228, 2 }, // #177 sc=Samaritan:Samr scx=Samaritan:Samr
5906 { 16230, 2 }, // #178 sc=Lisu scx=Lisu
5907 { 16232, 2 }, // #179 sc=Bamum:Bamu scx=Bamum:Bamu
5908 { 16234, 3 }, // #180 sc=Javanese:Java
5909 { 16237, 3 }, // #181 sc=Meetei_Mayek:Mtei scx=Meetei_Mayek:Mtei
5910 { 16240, 2 }, // #182 sc=Imperial_Aramaic:Armi scx=Imperial_Aramaic:Armi
5911 { 16242, 1 }, // #183 sc=Old_South_Arabian:Sarb scx=Old_South_Arabian:Sarb
5912 { 16243, 2 }, // #184 sc=Inscriptional_Parthian:Prti scx=Inscriptional_Parthian:Prti
5913 { 16245, 2 }, // #185 sc=Inscriptional_Pahlavi:Phli scx=Inscriptional_Pahlavi:Phli
5914 { 16247, 1 }, // #186 sc=Old_Turkic:Orkh scx=Old_Turkic:Orkh
5915 { 16248, 2 }, // #187 sc=Kaithi:Kthi
5916 { 16250, 2 }, // #188 sc=Batak:Batk scx=Batak:Batk
5917 { 16252, 3 }, // #189 sc=Brahmi:Brah scx=Brahmi:Brah
5918 { 16255, 2 }, // #190 sc=Mandaic:Mand
5919 { 16257, 2 }, // #191 sc=Chakma:Cakm
5920 { 16259, 3 }, // #192 sc=Meroitic_Cursive:Merc scx=Meroitic_Cursive:Merc
5921 { 16262, 1 }, // #193 sc=Meroitic_Hieroglyphs:Mero scx=Meroitic_Hieroglyphs:Mero
5922 { 16263, 3 }, // #194 sc=Miao:Plrd scx=Miao:Plrd
5923 { 16266, 1 }, // #195 sc=Sharada:Shrd
5924 { 16267, 2 }, // #196 sc=Sora_Sompeng:Sora scx=Sora_Sompeng:Sora
5925 { 16269, 2 }, // #197 sc=Takri:Takr
5926 { 16271, 2 }, // #198 sc=Caucasian_Albanian:Aghb scx=Caucasian_Albanian:Aghb
5927 { 16273, 2 }, // #199 sc=Bassa_Vah:Bass scx=Bassa_Vah:Bass
5928 { 16275, 5 }, // #200 sc=Duployan:Dupl
5929 { 16280, 1 }, // #201 sc=Elbasan:Elba scx=Elbasan:Elba
5930 { 16281, 15 }, // #202 sc=Grantha:Gran
5931 { 16296, 5 }, // #203 sc=Pahawh_Hmong:Hmng scx=Pahawh_Hmong:Hmng
5932 { 16301, 2 }, // #204 sc=Khojki:Khoj
5933 { 16303, 3 }, // #205 sc=Linear_A:Lina
5934 { 16306, 1 }, // #206 sc=Mahajani:Mahj
5935 { 16307, 2 }, // #207 sc=Manichaean:Mani
5936 { 16309, 2 }, // #208 sc=Mende_Kikakui:Mend scx=Mende_Kikakui:Mend
5937 { 16311, 2 }, // #209 sc=Modi
5938 { 16313, 3 }, // #210 sc=Mro:Mroo scx=Mro:Mroo
5939 { 16316, 1 }, // #211 sc=Old_North_Arabian:Narb scx=Old_North_Arabian:Narb
5940 { 16317, 2 }, // #212 sc=Nabataean:Nbat scx=Nabataean:Nbat
5941 { 16319, 1 }, // #213 sc=Palmyrene:Palm scx=Palmyrene:Palm
5942 { 16320, 1 }, // #214 sc=Pau_Cin_Hau:Pauc scx=Pau_Cin_Hau:Pauc
5943 { 16321, 1 }, // #215 sc=Old_Permic:Perm
5944 { 16322, 3 }, // #216 sc=Psalter_Pahlavi:Phlp
5945 { 16325, 2 }, // #217 sc=Siddham:Sidd scx=Siddham:Sidd
5946 { 16327, 2 }, // #218 sc=Khudawadi:Sind
5947 { 16329, 2 }, // #219 sc=Tirhuta:Tirh
5948 { 16331, 2 }, // #220 sc=Warang_Citi:Wara scx=Warang_Citi:Wara
5949 { 16333, 3 }, // #221 sc=Ahom scx=Ahom
5950 { 16336, 1 }, // #222 sc=Anatolian_Hieroglyphs:Hluw scx=Anatolian_Hieroglyphs:Hluw
5951 { 16337, 3 }, // #223 sc=Hatran:Hatr scx=Hatran:Hatr
5952 { 16340, 5 }, // #224 sc=Multani:Mult
5953 { 16345, 3 }, // #225 sc=Old_Hungarian:Hung scx=Old_Hungarian:Hung
5954 { 16348, 3 }, // #226 sc=SignWriting:Sgnw scx=SignWriting:Sgnw
5955 { 16351, 3 }, // #227 sc=Adlam:Adlm
5956 { 16354, 4 }, // #228 sc=Bhaiksuki:Bhks scx=Bhaiksuki:Bhks
5957 { 16358, 3 }, // #229 sc=Marchen:Marc scx=Marchen:Marc
5958 { 16361, 2 }, // #230 sc=Newa scx=Newa
5959 { 16363, 2 }, // #231 sc=Osage:Osge scx=Osage:Osge
5960 { 16365, 4 }, // #232 sc=Tangut:Tang scx=Tangut:Tang
5961 { 16369, 7 }, // #233 sc=Masaram_Gondi:Gonm
5962 { 16376, 2 }, // #234 sc=Nushu:Nshu scx=Nushu:Nshu
5963 { 16378, 1 }, // #235 sc=Soyombo:Soyo scx=Soyombo:Soyo
5964 { 16379, 1 }, // #236 sc=Zanabazar_Square:Zanb scx=Zanabazar_Square:Zanb
5965 { 16380, 1 }, // #237 sc=Dogra:Dogr
5966 { 16381, 6 }, // #238 sc=Gunjala_Gondi:Gong
5967 { 16387, 1 }, // #239 sc=Makasar:Maka scx=Makasar:Maka
5968 { 16388, 1 }, // #240 sc=Medefaidrin:Medf scx=Medefaidrin:Medf
5969 { 16389, 2 }, // #241 sc=Hanifi_Rohingya:Rohg
5970 { 16391, 1 }, // #242 sc=Sogdian:Sogd
5971 { 16392, 1 }, // #243 sc=Old_Sogdian:Sogo scx=Old_Sogdian:Sogo
5972 { 16393, 1 }, // #244 sc=Elymaic:Elym scx=Elymaic:Elym
5973 { 16394, 3 }, // #245 sc=Nandinagari:Nand
5974 { 16397, 4 }, // #246 sc=Nyiakeng_Puachue_Hmong:Hmnp scx=Nyiakeng_Puachue_Hmong:Hmnp
5975 { 16401, 2 }, // #247 sc=Wancho:Wcho scx=Wancho:Wcho
5976 { 16403, 1 }, // #248 sc=Chorasmian:Chrs scx=Chorasmian:Chrs
5977 { 16404, 8 }, // #249 sc=Dives_Akuru:Diak scx=Dives_Akuru:Diak
5978 { 16412, 2 }, // #250 sc=Khitan_Small_Script:Kits scx=Khitan_Small_Script:Kits
5979 { 16414, 3 }, // #251 sc=Yezidi:Yezi
5980 { 16417, 1 }, // #252 sc=Cypro_Minoan:Cpmn
5981 { 16418, 1 }, // #253 sc=Old_Uyghur:Ougr
5982 { 16419, 2 }, // #254 sc=Tangsa:Tnsa scx=Tangsa:Tnsa
5983 { 16421, 1 }, // #255 sc=Toto scx=Toto
5984 { 16422, 8 }, // #256 sc=Vithkuqi:Vith scx=Vithkuqi:Vith
5985 { 16430, 3 }, // #257 sc=Kawi scx=Kawi
5986 { 16433, 1 }, // #258 sc=Nag_Mundari:Nagm scx=Nag_Mundari:Nagm
5987 { 16434, 705 }, // #259 sc=Unknown:Zzzz scx=Unknown:Zzzz
5988 { 17139, 147 }, // #260 scx=Common:Zyyy
5989 { 17286, 47 }, // #261 scx=Latin:Latn
5990 { 17333, 38 }, // #262 scx=Greek:Grek
5991 { 17371, 11 }, // #263 scx=Cyrillic:Cyrl
5992 { 17382, 52 }, // #264 scx=Arabic:Arab
5993 { 17434, 12 }, // #265 scx=Syriac:Syrc
5994 { 17446, 7 }, // #266 scx=Thaana:Thaa
5995 { 17453, 8 }, // #267 scx=Devanagari:Deva
5996 { 17461, 26 }, // #268 scx=Bengali:Beng
5997 { 17487, 19 }, // #269 scx=Gurmukhi:Guru
5998 { 17506, 17 }, // #270 scx=Gujarati:Gujr
5999 { 17523, 18 }, // #271 scx=Oriya:Orya
6000 { 17541, 25 }, // #272 scx=Tamil:Taml
6001 { 17566, 17 }, // #273 scx=Telugu:Telu
6002 { 17583, 21 }, // #274 scx=Kannada:Knda
6003 { 17604, 12 }, // #275 scx=Malayalam:Mlym
6004 { 17616, 15 }, // #276 scx=Sinhala:Sinh
6005 { 17631, 4 }, // #277 scx=Myanmar:Mymr
6006 { 17635, 9 }, // #278 scx=Georgian:Geor
6007 { 17644, 21 }, // #279 scx=Hangul:Hang
6008 { 17665, 5 }, // #280 scx=Mongolian:Mong
6009 { 17670, 17 }, // #281 scx=Hiragana:Hira
6010 { 17687, 20 }, // #282 scx=Katakana:Kana
6011 { 17707, 12 }, // #283 scx=Bopomofo:Bopo
6012 { 17719, 39 }, // #284 scx=Han:Hani
6013 { 17758, 7 }, // #285 scx=Yi:Yiii
6014 { 17765, 20 }, // #286 scx=Inherited:Zinh:Qaai
6015 { 17785, 3 }, // #287 scx=Tagalog:Tglg
6016 { 17788, 1 }, // #288 scx=Hanunoo:Hano
6017 { 17789, 2 }, // #289 scx=Buhid:Buhd
6018 { 17791, 4 }, // #290 scx=Tagbanwa:Tagb
6019 { 17795, 6 }, // #291 scx=Limbu:Limb
6020 { 17801, 3 }, // #292 scx=Tai_Le:Tale
6021 { 17804, 10 }, // #293 scx=Linear_B:Linb
6022 { 17814, 9 }, // #294 scx=Cypriot:Cprt
6023 { 17823, 3 }, // #295 scx=Buginese:Bugi
6024 { 17826, 4 }, // #296 scx=Coptic:Copt:Qaac
6025 { 17830, 10 }, // #297 scx=Glagolitic:Glag
6026 { 17840, 3 }, // #298 scx=Syloti_Nagri:Sylo
6027 { 17843, 3 }, // #299 scx=Phags_Pa:Phag
6028 { 17846, 6 }, // #300 scx=Nko:Nkoo
6029 { 17852, 1 }, // #301 scx=Kayah_Li:Kali
6030 { 17853, 3 }, // #302 scx=Javanese:Java
6031 { 17856, 4 }, // #303 scx=Kaithi:Kthi
6032 { 17860, 3 }, // #304 scx=Mandaic:Mand
6033 { 17863, 4 }, // #305 scx=Chakma:Cakm
6034 { 17867, 8 }, // #306 scx=Sharada:Shrd
6035 { 17875, 4 }, // #307 scx=Takri:Takr
6036 { 17879, 5 }, // #308 scx=Duployan:Dupl
6037 { 17884, 25 }, // #309 scx=Grantha:Gran
6038 { 17909, 4 }, // #310 scx=Khojki:Khoj
6039 { 17913, 4 }, // #311 scx=Linear_A:Lina
6040 { 17917, 3 }, // #312 scx=Mahajani:Mahj
6041 { 17920, 3 }, // #313 scx=Manichaean:Mani
6042 { 17923, 3 }, // #314 scx=Modi
6043 { 17926, 2 }, // #315 scx=Old_Permic:Perm
6044 { 17928, 4 }, // #316 scx=Psalter_Pahlavi:Phlp
6045 { 17932, 4 }, // #317 scx=Khudawadi:Sind
6046 { 17936, 6 }, // #318 scx=Tirhuta:Tirh
6047 { 17942, 6 }, // #319 scx=Multani:Mult
6048 { 17948, 5 }, // #320 scx=Adlam:Adlm
6049 { 17953, 8 }, // #321 scx=Masaram_Gondi:Gonm
6050 { 17961, 3 }, // #322 scx=Dogra:Dogr
6051 { 17964, 7 }, // #323 scx=Gunjala_Gondi:Gong
6052 { 17971, 7 }, // #324 scx=Hanifi_Rohingya:Rohg
6053 { 17978, 2 }, // #325 scx=Sogdian:Sogd
6054 { 17980, 9 }, // #326 scx=Nandinagari:Nand
6055 { 17989, 7 }, // #327 scx=Yezidi:Yezi
6056 { 17996, 2 }, // #328 scx=Cypro_Minoan:Cpmn
6057 { 17998, 3 }, // #329 scx=Old_Uyghur:Ougr
6058 { 18001, 6766 }, // #330 bp=RGI_Emoji
6059 { 18001, 669 }, // #331 bp=Basic_Emoji
6060 { 18670, 24 }, // #332 bp=Emoji_Keycap_Sequence
6061 { 18694, 983 }, // #333 bp=RGI_Emoji_Modifier_Sequence
6062 { 19677, 387 }, // #334 bp=RGI_Emoji_Flag_Sequence
6063 { 20064, 12 }, // #335 bp=RGI_Emoji_Tag_Sequence
6064 { 20076, 4691 } // #336 bp=RGI_Emoji_ZWJ_Sequence
6065 };
6066
6067 template <typename T3, typename T4, typename T5>
6068 const T5 unicode_property_data<T3, T4, T5>::rangetable[] =
6069 {
6070 // #5 (0+734): gc=Other:C
6071 // Cc:2 + Cf:21 + Cn:707 + Co:3 + Cs:1
6072 // #6 (0+2): gc=Control:Cc:cntrl
6073 0x0000, 0x001F, 0x007F, 0x009F,
6074 // #7 (2+21): gc=Format:Cf
6075 0x00AD, 0x00AD, 0x0600, 0x0605, 0x061C, 0x061C, 0x06DD, 0x06DD,
6076 0x070F, 0x070F, 0x0890, 0x0891, 0x08E2, 0x08E2, 0x180E, 0x180E,
6077 0x200B, 0x200F, 0x202A, 0x202E, 0x2060, 0x2064, 0x2066, 0x206F,
6078 0xFEFF, 0xFEFF, 0xFFF9, 0xFFFB, 0x110BD, 0x110BD, 0x110CD, 0x110CD,
6079 0x13430, 0x1343F, 0x1BCA0, 0x1BCA3, 0x1D173, 0x1D17A, 0xE0001, 0xE0001,
6080 0xE0020, 0xE007F,
6081 // #8 (23+707): gc=Unassigned:Cn
6082 0x0378, 0x0379, 0x0380, 0x0383, 0x038B, 0x038B, 0x038D, 0x038D,
6083 0x03A2, 0x03A2, 0x0530, 0x0530, 0x0557, 0x0558, 0x058B, 0x058C,
6084 0x0590, 0x0590, 0x05C8, 0x05CF, 0x05EB, 0x05EE, 0x05F5, 0x05FF,
6085 0x070E, 0x070E, 0x074B, 0x074C, 0x07B2, 0x07BF, 0x07FB, 0x07FC,
6086 0x082E, 0x082F, 0x083F, 0x083F, 0x085C, 0x085D, 0x085F, 0x085F,
6087 0x086B, 0x086F, 0x088F, 0x088F, 0x0892, 0x0897, 0x0984, 0x0984,
6088 0x098D, 0x098E, 0x0991, 0x0992, 0x09A9, 0x09A9, 0x09B1, 0x09B1,
6089 0x09B3, 0x09B5, 0x09BA, 0x09BB, 0x09C5, 0x09C6, 0x09C9, 0x09CA,
6090 0x09CF, 0x09D6, 0x09D8, 0x09DB, 0x09DE, 0x09DE, 0x09E4, 0x09E5,
6091 0x09FF, 0x0A00, 0x0A04, 0x0A04, 0x0A0B, 0x0A0E, 0x0A11, 0x0A12,
6092 0x0A29, 0x0A29, 0x0A31, 0x0A31, 0x0A34, 0x0A34, 0x0A37, 0x0A37,
6093 0x0A3A, 0x0A3B, 0x0A3D, 0x0A3D, 0x0A43, 0x0A46, 0x0A49, 0x0A4A,
6094 0x0A4E, 0x0A50, 0x0A52, 0x0A58, 0x0A5D, 0x0A5D, 0x0A5F, 0x0A65,
6095 0x0A77, 0x0A80, 0x0A84, 0x0A84, 0x0A8E, 0x0A8E, 0x0A92, 0x0A92,
6096 0x0AA9, 0x0AA9, 0x0AB1, 0x0AB1, 0x0AB4, 0x0AB4, 0x0ABA, 0x0ABB,
6097 0x0AC6, 0x0AC6, 0x0ACA, 0x0ACA, 0x0ACE, 0x0ACF, 0x0AD1, 0x0ADF,
6098 0x0AE4, 0x0AE5, 0x0AF2, 0x0AF8, 0x0B00, 0x0B00, 0x0B04, 0x0B04,
6099 0x0B0D, 0x0B0E, 0x0B11, 0x0B12, 0x0B29, 0x0B29, 0x0B31, 0x0B31,
6100 0x0B34, 0x0B34, 0x0B3A, 0x0B3B, 0x0B45, 0x0B46, 0x0B49, 0x0B4A,
6101 0x0B4E, 0x0B54, 0x0B58, 0x0B5B, 0x0B5E, 0x0B5E, 0x0B64, 0x0B65,
6102 0x0B78, 0x0B81, 0x0B84, 0x0B84, 0x0B8B, 0x0B8D, 0x0B91, 0x0B91,
6103 0x0B96, 0x0B98, 0x0B9B, 0x0B9B, 0x0B9D, 0x0B9D, 0x0BA0, 0x0BA2,
6104 0x0BA5, 0x0BA7, 0x0BAB, 0x0BAD, 0x0BBA, 0x0BBD, 0x0BC3, 0x0BC5,
6105 0x0BC9, 0x0BC9, 0x0BCE, 0x0BCF, 0x0BD1, 0x0BD6, 0x0BD8, 0x0BE5,
6106 0x0BFB, 0x0BFF, 0x0C0D, 0x0C0D, 0x0C11, 0x0C11, 0x0C29, 0x0C29,
6107 0x0C3A, 0x0C3B, 0x0C45, 0x0C45, 0x0C49, 0x0C49, 0x0C4E, 0x0C54,
6108 0x0C57, 0x0C57, 0x0C5B, 0x0C5C, 0x0C5E, 0x0C5F, 0x0C64, 0x0C65,
6109 0x0C70, 0x0C76, 0x0C8D, 0x0C8D, 0x0C91, 0x0C91, 0x0CA9, 0x0CA9,
6110 0x0CB4, 0x0CB4, 0x0CBA, 0x0CBB, 0x0CC5, 0x0CC5, 0x0CC9, 0x0CC9,
6111 0x0CCE, 0x0CD4, 0x0CD7, 0x0CDC, 0x0CDF, 0x0CDF, 0x0CE4, 0x0CE5,
6112 0x0CF0, 0x0CF0, 0x0CF4, 0x0CFF, 0x0D0D, 0x0D0D, 0x0D11, 0x0D11,
6113 0x0D45, 0x0D45, 0x0D49, 0x0D49, 0x0D50, 0x0D53, 0x0D64, 0x0D65,
6114 0x0D80, 0x0D80, 0x0D84, 0x0D84, 0x0D97, 0x0D99, 0x0DB2, 0x0DB2,
6115 0x0DBC, 0x0DBC, 0x0DBE, 0x0DBF, 0x0DC7, 0x0DC9, 0x0DCB, 0x0DCE,
6116 0x0DD5, 0x0DD5, 0x0DD7, 0x0DD7, 0x0DE0, 0x0DE5, 0x0DF0, 0x0DF1,
6117 0x0DF5, 0x0E00, 0x0E3B, 0x0E3E, 0x0E5C, 0x0E80, 0x0E83, 0x0E83,
6118 0x0E85, 0x0E85, 0x0E8B, 0x0E8B, 0x0EA4, 0x0EA4, 0x0EA6, 0x0EA6,
6119 0x0EBE, 0x0EBF, 0x0EC5, 0x0EC5, 0x0EC7, 0x0EC7, 0x0ECF, 0x0ECF,
6120 0x0EDA, 0x0EDB, 0x0EE0, 0x0EFF, 0x0F48, 0x0F48, 0x0F6D, 0x0F70,
6121 0x0F98, 0x0F98, 0x0FBD, 0x0FBD, 0x0FCD, 0x0FCD, 0x0FDB, 0x0FFF,
6122 0x10C6, 0x10C6, 0x10C8, 0x10CC, 0x10CE, 0x10CF, 0x1249, 0x1249,
6123 0x124E, 0x124F, 0x1257, 0x1257, 0x1259, 0x1259, 0x125E, 0x125F,
6124 0x1289, 0x1289, 0x128E, 0x128F, 0x12B1, 0x12B1, 0x12B6, 0x12B7,
6125 0x12BF, 0x12BF, 0x12C1, 0x12C1, 0x12C6, 0x12C7, 0x12D7, 0x12D7,
6126 0x1311, 0x1311, 0x1316, 0x1317, 0x135B, 0x135C, 0x137D, 0x137F,
6127 0x139A, 0x139F, 0x13F6, 0x13F7, 0x13FE, 0x13FF, 0x169D, 0x169F,
6128 0x16F9, 0x16FF, 0x1716, 0x171E, 0x1737, 0x173F, 0x1754, 0x175F,
6129 0x176D, 0x176D, 0x1771, 0x1771, 0x1774, 0x177F, 0x17DE, 0x17DF,
6130 0x17EA, 0x17EF, 0x17FA, 0x17FF, 0x181A, 0x181F, 0x1879, 0x187F,
6131 0x18AB, 0x18AF, 0x18F6, 0x18FF, 0x191F, 0x191F, 0x192C, 0x192F,
6132 0x193C, 0x193F, 0x1941, 0x1943, 0x196E, 0x196F, 0x1975, 0x197F,
6133 0x19AC, 0x19AF, 0x19CA, 0x19CF, 0x19DB, 0x19DD, 0x1A1C, 0x1A1D,
6134 0x1A5F, 0x1A5F, 0x1A7D, 0x1A7E, 0x1A8A, 0x1A8F, 0x1A9A, 0x1A9F,
6135 0x1AAE, 0x1AAF, 0x1ACF, 0x1AFF, 0x1B4D, 0x1B4F, 0x1B7F, 0x1B7F,
6136 0x1BF4, 0x1BFB, 0x1C38, 0x1C3A, 0x1C4A, 0x1C4C, 0x1C89, 0x1C8F,
6137 0x1CBB, 0x1CBC, 0x1CC8, 0x1CCF, 0x1CFB, 0x1CFF, 0x1F16, 0x1F17,
6138 0x1F1E, 0x1F1F, 0x1F46, 0x1F47, 0x1F4E, 0x1F4F, 0x1F58, 0x1F58,
6139 0x1F5A, 0x1F5A, 0x1F5C, 0x1F5C, 0x1F5E, 0x1F5E, 0x1F7E, 0x1F7F,
6140 0x1FB5, 0x1FB5, 0x1FC5, 0x1FC5, 0x1FD4, 0x1FD5, 0x1FDC, 0x1FDC,
6141 0x1FF0, 0x1FF1, 0x1FF5, 0x1FF5, 0x1FFF, 0x1FFF, 0x2065, 0x2065,
6142 0x2072, 0x2073, 0x208F, 0x208F, 0x209D, 0x209F, 0x20C1, 0x20CF,
6143 0x20F1, 0x20FF, 0x218C, 0x218F, 0x2427, 0x243F, 0x244B, 0x245F,
6144 0x2B74, 0x2B75, 0x2B96, 0x2B96, 0x2CF4, 0x2CF8, 0x2D26, 0x2D26,
6145 0x2D28, 0x2D2C, 0x2D2E, 0x2D2F, 0x2D68, 0x2D6E, 0x2D71, 0x2D7E,
6146 0x2D97, 0x2D9F, 0x2DA7, 0x2DA7, 0x2DAF, 0x2DAF, 0x2DB7, 0x2DB7,
6147 0x2DBF, 0x2DBF, 0x2DC7, 0x2DC7, 0x2DCF, 0x2DCF, 0x2DD7, 0x2DD7,
6148 0x2DDF, 0x2DDF, 0x2E5E, 0x2E7F, 0x2E9A, 0x2E9A, 0x2EF4, 0x2EFF,
6149 0x2FD6, 0x2FEF, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104,
6150 0x3130, 0x3130, 0x318F, 0x318F, 0x31E4, 0x31EE, 0x321F, 0x321F,
6151 0xA48D, 0xA48F, 0xA4C7, 0xA4CF, 0xA62C, 0xA63F, 0xA6F8, 0xA6FF,
6152 0xA7CB, 0xA7CF, 0xA7D2, 0xA7D2, 0xA7D4, 0xA7D4, 0xA7DA, 0xA7F1,
6153 0xA82D, 0xA82F, 0xA83A, 0xA83F, 0xA878, 0xA87F, 0xA8C6, 0xA8CD,
6154 0xA8DA, 0xA8DF, 0xA954, 0xA95E, 0xA97D, 0xA97F, 0xA9CE, 0xA9CE,
6155 0xA9DA, 0xA9DD, 0xA9FF, 0xA9FF, 0xAA37, 0xAA3F, 0xAA4E, 0xAA4F,
6156 0xAA5A, 0xAA5B, 0xAAC3, 0xAADA, 0xAAF7, 0xAB00, 0xAB07, 0xAB08,
6157 0xAB0F, 0xAB10, 0xAB17, 0xAB1F, 0xAB27, 0xAB27, 0xAB2F, 0xAB2F,
6158 0xAB6C, 0xAB6F, 0xABEE, 0xABEF, 0xABFA, 0xABFF, 0xD7A4, 0xD7AF,
6159 0xD7C7, 0xD7CA, 0xD7FC, 0xD7FF, 0xFA6E, 0xFA6F, 0xFADA, 0xFAFF,
6160 0xFB07, 0xFB12, 0xFB18, 0xFB1C, 0xFB37, 0xFB37, 0xFB3D, 0xFB3D,
6161 0xFB3F, 0xFB3F, 0xFB42, 0xFB42, 0xFB45, 0xFB45, 0xFBC3, 0xFBD2,
6162 0xFD90, 0xFD91, 0xFDC8, 0xFDCE, 0xFDD0, 0xFDEF, 0xFE1A, 0xFE1F,
6163 0xFE53, 0xFE53, 0xFE67, 0xFE67, 0xFE6C, 0xFE6F, 0xFE75, 0xFE75,
6164 0xFEFD, 0xFEFE, 0xFF00, 0xFF00, 0xFFBF, 0xFFC1, 0xFFC8, 0xFFC9,
6165 0xFFD0, 0xFFD1, 0xFFD8, 0xFFD9, 0xFFDD, 0xFFDF, 0xFFE7, 0xFFE7,
6166 0xFFEF, 0xFFF8, 0xFFFE, 0xFFFF, 0x1000C, 0x1000C, 0x10027, 0x10027,
6167 0x1003B, 0x1003B, 0x1003E, 0x1003E, 0x1004E, 0x1004F, 0x1005E, 0x1007F,
6168 0x100FB, 0x100FF, 0x10103, 0x10106, 0x10134, 0x10136, 0x1018F, 0x1018F,
6169 0x1019D, 0x1019F, 0x101A1, 0x101CF, 0x101FE, 0x1027F, 0x1029D, 0x1029F,
6170 0x102D1, 0x102DF, 0x102FC, 0x102FF, 0x10324, 0x1032C, 0x1034B, 0x1034F,
6171 0x1037B, 0x1037F, 0x1039E, 0x1039E, 0x103C4, 0x103C7, 0x103D6, 0x103FF,
6172 0x1049E, 0x1049F, 0x104AA, 0x104AF, 0x104D4, 0x104D7, 0x104FC, 0x104FF,
6173 0x10528, 0x1052F, 0x10564, 0x1056E, 0x1057B, 0x1057B, 0x1058B, 0x1058B,
6174 0x10593, 0x10593, 0x10596, 0x10596, 0x105A2, 0x105A2, 0x105B2, 0x105B2,
6175 0x105BA, 0x105BA, 0x105BD, 0x105FF, 0x10737, 0x1073F, 0x10756, 0x1075F,
6176 0x10768, 0x1077F, 0x10786, 0x10786, 0x107B1, 0x107B1, 0x107BB, 0x107FF,
6177 0x10806, 0x10807, 0x10809, 0x10809, 0x10836, 0x10836, 0x10839, 0x1083B,
6178 0x1083D, 0x1083E, 0x10856, 0x10856, 0x1089F, 0x108A6, 0x108B0, 0x108DF,
6179 0x108F3, 0x108F3, 0x108F6, 0x108FA, 0x1091C, 0x1091E, 0x1093A, 0x1093E,
6180 0x10940, 0x1097F, 0x109B8, 0x109BB, 0x109D0, 0x109D1, 0x10A04, 0x10A04,
6181 0x10A07, 0x10A0B, 0x10A14, 0x10A14, 0x10A18, 0x10A18, 0x10A36, 0x10A37,
6182 0x10A3B, 0x10A3E, 0x10A49, 0x10A4F, 0x10A59, 0x10A5F, 0x10AA0, 0x10ABF,
6183 0x10AE7, 0x10AEA, 0x10AF7, 0x10AFF, 0x10B36, 0x10B38, 0x10B56, 0x10B57,
6184 0x10B73, 0x10B77, 0x10B92, 0x10B98, 0x10B9D, 0x10BA8, 0x10BB0, 0x10BFF,
6185 0x10C49, 0x10C7F, 0x10CB3, 0x10CBF, 0x10CF3, 0x10CF9, 0x10D28, 0x10D2F,
6186 0x10D3A, 0x10E5F, 0x10E7F, 0x10E7F, 0x10EAA, 0x10EAA, 0x10EAE, 0x10EAF,
6187 0x10EB2, 0x10EFC, 0x10F28, 0x10F2F, 0x10F5A, 0x10F6F, 0x10F8A, 0x10FAF,
6188 0x10FCC, 0x10FDF, 0x10FF7, 0x10FFF, 0x1104E, 0x11051, 0x11076, 0x1107E,
6189 0x110C3, 0x110CC, 0x110CE, 0x110CF, 0x110E9, 0x110EF, 0x110FA, 0x110FF,
6190 0x11135, 0x11135, 0x11148, 0x1114F, 0x11177, 0x1117F, 0x111E0, 0x111E0,
6191 0x111F5, 0x111FF, 0x11212, 0x11212, 0x11242, 0x1127F, 0x11287, 0x11287,
6192 0x11289, 0x11289, 0x1128E, 0x1128E, 0x1129E, 0x1129E, 0x112AA, 0x112AF,
6193 0x112EB, 0x112EF, 0x112FA, 0x112FF, 0x11304, 0x11304, 0x1130D, 0x1130E,
6194 0x11311, 0x11312, 0x11329, 0x11329, 0x11331, 0x11331, 0x11334, 0x11334,
6195 0x1133A, 0x1133A, 0x11345, 0x11346, 0x11349, 0x1134A, 0x1134E, 0x1134F,
6196 0x11351, 0x11356, 0x11358, 0x1135C, 0x11364, 0x11365, 0x1136D, 0x1136F,
6197 0x11375, 0x113FF, 0x1145C, 0x1145C, 0x11462, 0x1147F, 0x114C8, 0x114CF,
6198 0x114DA, 0x1157F, 0x115B6, 0x115B7, 0x115DE, 0x115FF, 0x11645, 0x1164F,
6199 0x1165A, 0x1165F, 0x1166D, 0x1167F, 0x116BA, 0x116BF, 0x116CA, 0x116FF,
6200 0x1171B, 0x1171C, 0x1172C, 0x1172F, 0x11747, 0x117FF, 0x1183C, 0x1189F,
6201 0x118F3, 0x118FE, 0x11907, 0x11908, 0x1190A, 0x1190B, 0x11914, 0x11914,
6202 0x11917, 0x11917, 0x11936, 0x11936, 0x11939, 0x1193A, 0x11947, 0x1194F,
6203 0x1195A, 0x1199F, 0x119A8, 0x119A9, 0x119D8, 0x119D9, 0x119E5, 0x119FF,
6204 0x11A48, 0x11A4F, 0x11AA3, 0x11AAF, 0x11AF9, 0x11AFF, 0x11B0A, 0x11BFF,
6205 0x11C09, 0x11C09, 0x11C37, 0x11C37, 0x11C46, 0x11C4F, 0x11C6D, 0x11C6F,
6206 0x11C90, 0x11C91, 0x11CA8, 0x11CA8, 0x11CB7, 0x11CFF, 0x11D07, 0x11D07,
6207 0x11D0A, 0x11D0A, 0x11D37, 0x11D39, 0x11D3B, 0x11D3B, 0x11D3E, 0x11D3E,
6208 0x11D48, 0x11D4F, 0x11D5A, 0x11D5F, 0x11D66, 0x11D66, 0x11D69, 0x11D69,
6209 0x11D8F, 0x11D8F, 0x11D92, 0x11D92, 0x11D99, 0x11D9F, 0x11DAA, 0x11EDF,
6210 0x11EF9, 0x11EFF, 0x11F11, 0x11F11, 0x11F3B, 0x11F3D, 0x11F5A, 0x11FAF,
6211 0x11FB1, 0x11FBF, 0x11FF2, 0x11FFE, 0x1239A, 0x123FF, 0x1246F, 0x1246F,
6212 0x12475, 0x1247F, 0x12544, 0x12F8F, 0x12FF3, 0x12FFF, 0x13456, 0x143FF,
6213 0x14647, 0x167FF, 0x16A39, 0x16A3F, 0x16A5F, 0x16A5F, 0x16A6A, 0x16A6D,
6214 0x16ABF, 0x16ABF, 0x16ACA, 0x16ACF, 0x16AEE, 0x16AEF, 0x16AF6, 0x16AFF,
6215 0x16B46, 0x16B4F, 0x16B5A, 0x16B5A, 0x16B62, 0x16B62, 0x16B78, 0x16B7C,
6216 0x16B90, 0x16E3F, 0x16E9B, 0x16EFF, 0x16F4B, 0x16F4E, 0x16F88, 0x16F8E,
6217 0x16FA0, 0x16FDF, 0x16FE5, 0x16FEF, 0x16FF2, 0x16FFF, 0x187F8, 0x187FF,
6218 0x18CD6, 0x18CFF, 0x18D09, 0x1AFEF, 0x1AFF4, 0x1AFF4, 0x1AFFC, 0x1AFFC,
6219 0x1AFFF, 0x1AFFF, 0x1B123, 0x1B131, 0x1B133, 0x1B14F, 0x1B153, 0x1B154,
6220 0x1B156, 0x1B163, 0x1B168, 0x1B16F, 0x1B2FC, 0x1BBFF, 0x1BC6B, 0x1BC6F,
6221 0x1BC7D, 0x1BC7F, 0x1BC89, 0x1BC8F, 0x1BC9A, 0x1BC9B, 0x1BCA4, 0x1CEFF,
6222 0x1CF2E, 0x1CF2F, 0x1CF47, 0x1CF4F, 0x1CFC4, 0x1CFFF, 0x1D0F6, 0x1D0FF,
6223 0x1D127, 0x1D128, 0x1D1EB, 0x1D1FF, 0x1D246, 0x1D2BF, 0x1D2D4, 0x1D2DF,
6224 0x1D2F4, 0x1D2FF, 0x1D357, 0x1D35F, 0x1D379, 0x1D3FF, 0x1D455, 0x1D455,
6225 0x1D49D, 0x1D49D, 0x1D4A0, 0x1D4A1, 0x1D4A3, 0x1D4A4, 0x1D4A7, 0x1D4A8,
6226 0x1D4AD, 0x1D4AD, 0x1D4BA, 0x1D4BA, 0x1D4BC, 0x1D4BC, 0x1D4C4, 0x1D4C4,
6227 0x1D506, 0x1D506, 0x1D50B, 0x1D50C, 0x1D515, 0x1D515, 0x1D51D, 0x1D51D,
6228 0x1D53A, 0x1D53A, 0x1D53F, 0x1D53F, 0x1D545, 0x1D545, 0x1D547, 0x1D549,
6229 0x1D551, 0x1D551, 0x1D6A6, 0x1D6A7, 0x1D7CC, 0x1D7CD, 0x1DA8C, 0x1DA9A,
6230 0x1DAA0, 0x1DAA0, 0x1DAB0, 0x1DEFF, 0x1DF1F, 0x1DF24, 0x1DF2B, 0x1DFFF,
6231 0x1E007, 0x1E007, 0x1E019, 0x1E01A, 0x1E022, 0x1E022, 0x1E025, 0x1E025,
6232 0x1E02B, 0x1E02F, 0x1E06E, 0x1E08E, 0x1E090, 0x1E0FF, 0x1E12D, 0x1E12F,
6233 0x1E13E, 0x1E13F, 0x1E14A, 0x1E14D, 0x1E150, 0x1E28F, 0x1E2AF, 0x1E2BF,
6234 0x1E2FA, 0x1E2FE, 0x1E300, 0x1E4CF, 0x1E4FA, 0x1E7DF, 0x1E7E7, 0x1E7E7,
6235 0x1E7EC, 0x1E7EC, 0x1E7EF, 0x1E7EF, 0x1E7FF, 0x1E7FF, 0x1E8C5, 0x1E8C6,
6236 0x1E8D7, 0x1E8FF, 0x1E94C, 0x1E94F, 0x1E95A, 0x1E95D, 0x1E960, 0x1EC70,
6237 0x1ECB5, 0x1ED00, 0x1ED3E, 0x1EDFF, 0x1EE04, 0x1EE04, 0x1EE20, 0x1EE20,
6238 0x1EE23, 0x1EE23, 0x1EE25, 0x1EE26, 0x1EE28, 0x1EE28, 0x1EE33, 0x1EE33,
6239 0x1EE38, 0x1EE38, 0x1EE3A, 0x1EE3A, 0x1EE3C, 0x1EE41, 0x1EE43, 0x1EE46,
6240 0x1EE48, 0x1EE48, 0x1EE4A, 0x1EE4A, 0x1EE4C, 0x1EE4C, 0x1EE50, 0x1EE50,
6241 0x1EE53, 0x1EE53, 0x1EE55, 0x1EE56, 0x1EE58, 0x1EE58, 0x1EE5A, 0x1EE5A,
6242 0x1EE5C, 0x1EE5C, 0x1EE5E, 0x1EE5E, 0x1EE60, 0x1EE60, 0x1EE63, 0x1EE63,
6243 0x1EE65, 0x1EE66, 0x1EE6B, 0x1EE6B, 0x1EE73, 0x1EE73, 0x1EE78, 0x1EE78,
6244 0x1EE7D, 0x1EE7D, 0x1EE7F, 0x1EE7F, 0x1EE8A, 0x1EE8A, 0x1EE9C, 0x1EEA0,
6245 0x1EEA4, 0x1EEA4, 0x1EEAA, 0x1EEAA, 0x1EEBC, 0x1EEEF, 0x1EEF2, 0x1EFFF,
6246 0x1F02C, 0x1F02F, 0x1F094, 0x1F09F, 0x1F0AF, 0x1F0B0, 0x1F0C0, 0x1F0C0,
6247 0x1F0D0, 0x1F0D0, 0x1F0F6, 0x1F0FF, 0x1F1AE, 0x1F1E5, 0x1F203, 0x1F20F,
6248 0x1F23C, 0x1F23F, 0x1F249, 0x1F24F, 0x1F252, 0x1F25F, 0x1F266, 0x1F2FF,
6249 0x1F6D8, 0x1F6DB, 0x1F6ED, 0x1F6EF, 0x1F6FD, 0x1F6FF, 0x1F777, 0x1F77A,
6250 0x1F7DA, 0x1F7DF, 0x1F7EC, 0x1F7EF, 0x1F7F1, 0x1F7FF, 0x1F80C, 0x1F80F,
6251 0x1F848, 0x1F84F, 0x1F85A, 0x1F85F, 0x1F888, 0x1F88F, 0x1F8AE, 0x1F8AF,
6252 0x1F8B2, 0x1F8FF, 0x1FA54, 0x1FA5F, 0x1FA6E, 0x1FA6F, 0x1FA7D, 0x1FA7F,
6253 0x1FA89, 0x1FA8F, 0x1FABE, 0x1FABE, 0x1FAC6, 0x1FACD, 0x1FADC, 0x1FADF,
6254 0x1FAE9, 0x1FAEF, 0x1FAF9, 0x1FAFF, 0x1FB93, 0x1FB93, 0x1FBCB, 0x1FBEF,
6255 0x1FBFA, 0x1FFFF, 0x2A6E0, 0x2A6FF, 0x2B73A, 0x2B73F, 0x2B81E, 0x2B81F,
6256 0x2CEA2, 0x2CEAF, 0x2EBE1, 0x2EBEF, 0x2EE5E, 0x2F7FF, 0x2FA1E, 0x2FFFF,
6257 0x3134B, 0x3134F, 0x323B0, 0xE0000, 0xE0002, 0xE001F, 0xE0080, 0xE00FF,
6258 0xE01F0, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF,
6259 // #9 (730+3): gc=Private_Use:Co
6260 0xE000, 0xF8FF, 0xF0000, 0xFFFFD, 0x100000, 0x10FFFD,
6261 // #10 (733+1): gc=Surrogate:Cs
6262 0xD800, 0xDFFF,
6263 // #11 (734+1896): gc=Letter:L
6264 // Ll:658 + Lt:10 + Lu:646 + Lm:71 + Lo:511
6265 // #12 (734+1314): gc=Cased_Letter:LC
6266 // Ll:658 + Lt:10 + Lu:646
6267 // #13 (734+658): gc=Lowercase_Letter:Ll
6268 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF,
6269 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107,
6270 0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F,
6271 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117,
6272 0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F,
6273 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127,
6274 0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F,
6275 0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0138,
6276 0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140,
6277 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149,
6278 0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151,
6279 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159,
6280 0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161,
6281 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169,
6282 0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171,
6283 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A,
6284 0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185,
6285 0x0188, 0x0188, 0x018C, 0x018D, 0x0192, 0x0192, 0x0195, 0x0195,
6286 0x0199, 0x019B, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3,
6287 0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AA, 0x01AB, 0x01AD, 0x01AD,
6288 0x01B0, 0x01B0, 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01BA,
6289 0x01BD, 0x01BF, 0x01C6, 0x01C6, 0x01C9, 0x01C9, 0x01CC, 0x01CC,
6290 0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2, 0x01D4, 0x01D4,
6291 0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA, 0x01DC, 0x01DD,
6292 0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3, 0x01E5, 0x01E5,
6293 0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB, 0x01ED, 0x01ED,
6294 0x01EF, 0x01F0, 0x01F3, 0x01F3, 0x01F5, 0x01F5, 0x01F9, 0x01F9,
6295 0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF, 0x0201, 0x0201,
6296 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, 0x0209, 0x0209,
6297 0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F, 0x0211, 0x0211,
6298 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, 0x0219, 0x0219,
6299 0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F, 0x0221, 0x0221,
6300 0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229,
6301 0x022B, 0x022B, 0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231,
6302 0x0233, 0x0239, 0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242,
6303 0x0247, 0x0247, 0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D,
6304 0x024F, 0x0293, 0x0295, 0x02AF, 0x0371, 0x0371, 0x0373, 0x0373,
6305 0x0377, 0x0377, 0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE,
6306 0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB,
6307 0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3,
6308 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB,
6309 0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8,
6310 0x03FB, 0x03FC, 0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463,
6311 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B,
6312 0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473,
6313 0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B,
6314 0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B,
6315 0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493,
6316 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B,
6317 0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3,
6318 0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB,
6319 0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3,
6320 0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB,
6321 0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4,
6322 0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC,
6323 0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5,
6324 0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD,
6325 0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5,
6326 0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED,
6327 0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5,
6328 0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD,
6329 0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505,
6330 0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D,
6331 0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515,
6332 0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D,
6333 0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525,
6334 0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D,
6335 0x052F, 0x052F, 0x0560, 0x0588, 0x10D0, 0x10FA, 0x10FD, 0x10FF,
6336 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1D00, 0x1D2B, 0x1D6B, 0x1D77,
6337 0x1D79, 0x1D9A, 0x1E01, 0x1E01, 0x1E03, 0x1E03, 0x1E05, 0x1E05,
6338 0x1E07, 0x1E07, 0x1E09, 0x1E09, 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D,
6339 0x1E0F, 0x1E0F, 0x1E11, 0x1E11, 0x1E13, 0x1E13, 0x1E15, 0x1E15,
6340 0x1E17, 0x1E17, 0x1E19, 0x1E19, 0x1E1B, 0x1E1B, 0x1E1D, 0x1E1D,
6341 0x1E1F, 0x1E1F, 0x1E21, 0x1E21, 0x1E23, 0x1E23, 0x1E25, 0x1E25,
6342 0x1E27, 0x1E27, 0x1E29, 0x1E29, 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D,
6343 0x1E2F, 0x1E2F, 0x1E31, 0x1E31, 0x1E33, 0x1E33, 0x1E35, 0x1E35,
6344 0x1E37, 0x1E37, 0x1E39, 0x1E39, 0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D,
6345 0x1E3F, 0x1E3F, 0x1E41, 0x1E41, 0x1E43, 0x1E43, 0x1E45, 0x1E45,
6346 0x1E47, 0x1E47, 0x1E49, 0x1E49, 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D,
6347 0x1E4F, 0x1E4F, 0x1E51, 0x1E51, 0x1E53, 0x1E53, 0x1E55, 0x1E55,
6348 0x1E57, 0x1E57, 0x1E59, 0x1E59, 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D,
6349 0x1E5F, 0x1E5F, 0x1E61, 0x1E61, 0x1E63, 0x1E63, 0x1E65, 0x1E65,
6350 0x1E67, 0x1E67, 0x1E69, 0x1E69, 0x1E6B, 0x1E6B, 0x1E6D, 0x1E6D,
6351 0x1E6F, 0x1E6F, 0x1E71, 0x1E71, 0x1E73, 0x1E73, 0x1E75, 0x1E75,
6352 0x1E77, 0x1E77, 0x1E79, 0x1E79, 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D,
6353 0x1E7F, 0x1E7F, 0x1E81, 0x1E81, 0x1E83, 0x1E83, 0x1E85, 0x1E85,
6354 0x1E87, 0x1E87, 0x1E89, 0x1E89, 0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D,
6355 0x1E8F, 0x1E8F, 0x1E91, 0x1E91, 0x1E93, 0x1E93, 0x1E95, 0x1E9D,
6356 0x1E9F, 0x1E9F, 0x1EA1, 0x1EA1, 0x1EA3, 0x1EA3, 0x1EA5, 0x1EA5,
6357 0x1EA7, 0x1EA7, 0x1EA9, 0x1EA9, 0x1EAB, 0x1EAB, 0x1EAD, 0x1EAD,
6358 0x1EAF, 0x1EAF, 0x1EB1, 0x1EB1, 0x1EB3, 0x1EB3, 0x1EB5, 0x1EB5,
6359 0x1EB7, 0x1EB7, 0x1EB9, 0x1EB9, 0x1EBB, 0x1EBB, 0x1EBD, 0x1EBD,
6360 0x1EBF, 0x1EBF, 0x1EC1, 0x1EC1, 0x1EC3, 0x1EC3, 0x1EC5, 0x1EC5,
6361 0x1EC7, 0x1EC7, 0x1EC9, 0x1EC9, 0x1ECB, 0x1ECB, 0x1ECD, 0x1ECD,
6362 0x1ECF, 0x1ECF, 0x1ED1, 0x1ED1, 0x1ED3, 0x1ED3, 0x1ED5, 0x1ED5,
6363 0x1ED7, 0x1ED7, 0x1ED9, 0x1ED9, 0x1EDB, 0x1EDB, 0x1EDD, 0x1EDD,
6364 0x1EDF, 0x1EDF, 0x1EE1, 0x1EE1, 0x1EE3, 0x1EE3, 0x1EE5, 0x1EE5,
6365 0x1EE7, 0x1EE7, 0x1EE9, 0x1EE9, 0x1EEB, 0x1EEB, 0x1EED, 0x1EED,
6366 0x1EEF, 0x1EEF, 0x1EF1, 0x1EF1, 0x1EF3, 0x1EF3, 0x1EF5, 0x1EF5,
6367 0x1EF7, 0x1EF7, 0x1EF9, 0x1EF9, 0x1EFB, 0x1EFB, 0x1EFD, 0x1EFD,
6368 0x1EFF, 0x1F07, 0x1F10, 0x1F15, 0x1F20, 0x1F27, 0x1F30, 0x1F37,
6369 0x1F40, 0x1F45, 0x1F50, 0x1F57, 0x1F60, 0x1F67, 0x1F70, 0x1F7D,
6370 0x1F80, 0x1F87, 0x1F90, 0x1F97, 0x1FA0, 0x1FA7, 0x1FB0, 0x1FB4,
6371 0x1FB6, 0x1FB7, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FC7,
6372 0x1FD0, 0x1FD3, 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7, 0x1FF2, 0x1FF4,
6373 0x1FF6, 0x1FF7, 0x210A, 0x210A, 0x210E, 0x210F, 0x2113, 0x2113,
6374 0x212F, 0x212F, 0x2134, 0x2134, 0x2139, 0x2139, 0x213C, 0x213D,
6375 0x2146, 0x2149, 0x214E, 0x214E, 0x2184, 0x2184, 0x2C30, 0x2C5F,
6376 0x2C61, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A,
6377 0x2C6C, 0x2C6C, 0x2C71, 0x2C71, 0x2C73, 0x2C74, 0x2C76, 0x2C7B,
6378 0x2C81, 0x2C81, 0x2C83, 0x2C83, 0x2C85, 0x2C85, 0x2C87, 0x2C87,
6379 0x2C89, 0x2C89, 0x2C8B, 0x2C8B, 0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F,
6380 0x2C91, 0x2C91, 0x2C93, 0x2C93, 0x2C95, 0x2C95, 0x2C97, 0x2C97,
6381 0x2C99, 0x2C99, 0x2C9B, 0x2C9B, 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F,
6382 0x2CA1, 0x2CA1, 0x2CA3, 0x2CA3, 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7,
6383 0x2CA9, 0x2CA9, 0x2CAB, 0x2CAB, 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF,
6384 0x2CB1, 0x2CB1, 0x2CB3, 0x2CB3, 0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7,
6385 0x2CB9, 0x2CB9, 0x2CBB, 0x2CBB, 0x2CBD, 0x2CBD, 0x2CBF, 0x2CBF,
6386 0x2CC1, 0x2CC1, 0x2CC3, 0x2CC3, 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7,
6387 0x2CC9, 0x2CC9, 0x2CCB, 0x2CCB, 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF,
6388 0x2CD1, 0x2CD1, 0x2CD3, 0x2CD3, 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7,
6389 0x2CD9, 0x2CD9, 0x2CDB, 0x2CDB, 0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF,
6390 0x2CE1, 0x2CE1, 0x2CE3, 0x2CE4, 0x2CEC, 0x2CEC, 0x2CEE, 0x2CEE,
6391 0x2CF3, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D,
6392 0xA641, 0xA641, 0xA643, 0xA643, 0xA645, 0xA645, 0xA647, 0xA647,
6393 0xA649, 0xA649, 0xA64B, 0xA64B, 0xA64D, 0xA64D, 0xA64F, 0xA64F,
6394 0xA651, 0xA651, 0xA653, 0xA653, 0xA655, 0xA655, 0xA657, 0xA657,
6395 0xA659, 0xA659, 0xA65B, 0xA65B, 0xA65D, 0xA65D, 0xA65F, 0xA65F,
6396 0xA661, 0xA661, 0xA663, 0xA663, 0xA665, 0xA665, 0xA667, 0xA667,
6397 0xA669, 0xA669, 0xA66B, 0xA66B, 0xA66D, 0xA66D, 0xA681, 0xA681,
6398 0xA683, 0xA683, 0xA685, 0xA685, 0xA687, 0xA687, 0xA689, 0xA689,
6399 0xA68B, 0xA68B, 0xA68D, 0xA68D, 0xA68F, 0xA68F, 0xA691, 0xA691,
6400 0xA693, 0xA693, 0xA695, 0xA695, 0xA697, 0xA697, 0xA699, 0xA699,
6401 0xA69B, 0xA69B, 0xA723, 0xA723, 0xA725, 0xA725, 0xA727, 0xA727,
6402 0xA729, 0xA729, 0xA72B, 0xA72B, 0xA72D, 0xA72D, 0xA72F, 0xA731,
6403 0xA733, 0xA733, 0xA735, 0xA735, 0xA737, 0xA737, 0xA739, 0xA739,
6404 0xA73B, 0xA73B, 0xA73D, 0xA73D, 0xA73F, 0xA73F, 0xA741, 0xA741,
6405 0xA743, 0xA743, 0xA745, 0xA745, 0xA747, 0xA747, 0xA749, 0xA749,
6406 0xA74B, 0xA74B, 0xA74D, 0xA74D, 0xA74F, 0xA74F, 0xA751, 0xA751,
6407 0xA753, 0xA753, 0xA755, 0xA755, 0xA757, 0xA757, 0xA759, 0xA759,
6408 0xA75B, 0xA75B, 0xA75D, 0xA75D, 0xA75F, 0xA75F, 0xA761, 0xA761,
6409 0xA763, 0xA763, 0xA765, 0xA765, 0xA767, 0xA767, 0xA769, 0xA769,
6410 0xA76B, 0xA76B, 0xA76D, 0xA76D, 0xA76F, 0xA76F, 0xA771, 0xA778,
6411 0xA77A, 0xA77A, 0xA77C, 0xA77C, 0xA77F, 0xA77F, 0xA781, 0xA781,
6412 0xA783, 0xA783, 0xA785, 0xA785, 0xA787, 0xA787, 0xA78C, 0xA78C,
6413 0xA78E, 0xA78E, 0xA791, 0xA791, 0xA793, 0xA795, 0xA797, 0xA797,
6414 0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D, 0xA79F, 0xA79F,
6415 0xA7A1, 0xA7A1, 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, 0xA7A7, 0xA7A7,
6416 0xA7A9, 0xA7A9, 0xA7AF, 0xA7AF, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7,
6417 0xA7B9, 0xA7B9, 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF,
6418 0xA7C1, 0xA7C1, 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA,
6419 0xA7D1, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D5, 0xA7D7, 0xA7D7,
6420 0xA7D9, 0xA7D9, 0xA7F6, 0xA7F6, 0xA7FA, 0xA7FA, 0xAB30, 0xAB5A,
6421 0xAB60, 0xAB68, 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17,
6422 0xFF41, 0xFF5A, 0x10428, 0x1044F, 0x104D8, 0x104FB, 0x10597, 0x105A1,
6423 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10CC0, 0x10CF2,
6424 0x118C0, 0x118DF, 0x16E60, 0x16E7F, 0x1D41A, 0x1D433, 0x1D44E, 0x1D454,
6425 0x1D456, 0x1D467, 0x1D482, 0x1D49B, 0x1D4B6, 0x1D4B9, 0x1D4BB, 0x1D4BB,
6426 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D4CF, 0x1D4EA, 0x1D503, 0x1D51E, 0x1D537,
6427 0x1D552, 0x1D56B, 0x1D586, 0x1D59F, 0x1D5BA, 0x1D5D3, 0x1D5EE, 0x1D607,
6428 0x1D622, 0x1D63B, 0x1D656, 0x1D66F, 0x1D68A, 0x1D6A5, 0x1D6C2, 0x1D6DA,
6429 0x1D6DC, 0x1D6E1, 0x1D6FC, 0x1D714, 0x1D716, 0x1D71B, 0x1D736, 0x1D74E,
6430 0x1D750, 0x1D755, 0x1D770, 0x1D788, 0x1D78A, 0x1D78F, 0x1D7AA, 0x1D7C2,
6431 0x1D7C4, 0x1D7C9, 0x1D7CB, 0x1D7CB, 0x1DF00, 0x1DF09, 0x1DF0B, 0x1DF1E,
6432 0x1DF25, 0x1DF2A, 0x1E922, 0x1E943,
6433 // #14 (1392+10): gc=Titlecase_Letter:Lt
6434 0x01C5, 0x01C5, 0x01C8, 0x01C8, 0x01CB, 0x01CB, 0x01F2, 0x01F2,
6435 0x1F88, 0x1F8F, 0x1F98, 0x1F9F, 0x1FA8, 0x1FAF, 0x1FBC, 0x1FBC,
6436 0x1FCC, 0x1FCC, 0x1FFC, 0x1FFC,
6437 // #15 (1402+646): gc=Uppercase_Letter:Lu
6438 0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100,
6439 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108,
6440 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110,
6441 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118,
6442 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120,
6443 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128,
6444 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130,
6445 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139,
6446 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141,
6447 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A,
6448 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152,
6449 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A,
6450 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162,
6451 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A,
6452 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172,
6453 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B,
6454 0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187,
6455 0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198,
6456 0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4,
6457 0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF,
6458 0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC,
6459 0x01C4, 0x01C4, 0x01C7, 0x01C7, 0x01CA, 0x01CA, 0x01CD, 0x01CD,
6460 0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5,
6461 0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE,
6462 0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6,
6463 0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE,
6464 0x01F1, 0x01F1, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA,
6465 0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202,
6466 0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A,
6467 0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212,
6468 0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A,
6469 0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222,
6470 0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A,
6471 0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232,
6472 0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246,
6473 0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E,
6474 0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F,
6475 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F,
6476 0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D2, 0x03D4,
6477 0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE,
6478 0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6,
6479 0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE,
6480 0x03F4, 0x03F4, 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F,
6481 0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466,
6482 0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E,
6483 0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476,
6484 0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E,
6485 0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E,
6486 0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496,
6487 0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E,
6488 0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6,
6489 0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE,
6490 0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6,
6491 0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE,
6492 0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7,
6493 0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0,
6494 0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8,
6495 0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0,
6496 0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8,
6497 0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0,
6498 0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8,
6499 0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500,
6500 0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508,
6501 0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510,
6502 0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518,
6503 0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520,
6504 0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528,
6505 0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556,
6506 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x13A0, 0x13F5,
6507 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02,
6508 0x1E04, 0x1E04, 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A,
6509 0x1E0C, 0x1E0C, 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12,
6510 0x1E14, 0x1E14, 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A,
6511 0x1E1C, 0x1E1C, 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22,
6512 0x1E24, 0x1E24, 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A,
6513 0x1E2C, 0x1E2C, 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32,
6514 0x1E34, 0x1E34, 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A,
6515 0x1E3C, 0x1E3C, 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42,
6516 0x1E44, 0x1E44, 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A,
6517 0x1E4C, 0x1E4C, 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52,
6518 0x1E54, 0x1E54, 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A,
6519 0x1E5C, 0x1E5C, 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62,
6520 0x1E64, 0x1E64, 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A,
6521 0x1E6C, 0x1E6C, 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72,
6522 0x1E74, 0x1E74, 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A,
6523 0x1E7C, 0x1E7C, 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82,
6524 0x1E84, 0x1E84, 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A,
6525 0x1E8C, 0x1E8C, 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92,
6526 0x1E94, 0x1E94, 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, 0x1EA2, 0x1EA2,
6527 0x1EA4, 0x1EA4, 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, 0x1EAA, 0x1EAA,
6528 0x1EAC, 0x1EAC, 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, 0x1EB2, 0x1EB2,
6529 0x1EB4, 0x1EB4, 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, 0x1EBA, 0x1EBA,
6530 0x1EBC, 0x1EBC, 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, 0x1EC2, 0x1EC2,
6531 0x1EC4, 0x1EC4, 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, 0x1ECA, 0x1ECA,
6532 0x1ECC, 0x1ECC, 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, 0x1ED2, 0x1ED2,
6533 0x1ED4, 0x1ED4, 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, 0x1EDA, 0x1EDA,
6534 0x1EDC, 0x1EDC, 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, 0x1EE2, 0x1EE2,
6535 0x1EE4, 0x1EE4, 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, 0x1EEA, 0x1EEA,
6536 0x1EEC, 0x1EEC, 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, 0x1EF2, 0x1EF2,
6537 0x1EF4, 0x1EF4, 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, 0x1EFA, 0x1EFA,
6538 0x1EFC, 0x1EFC, 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, 0x1F18, 0x1F1D,
6539 0x1F28, 0x1F2F, 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, 0x1F59, 0x1F59,
6540 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, 0x1F68, 0x1F6F,
6541 0x1FB8, 0x1FBB, 0x1FC8, 0x1FCB, 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC,
6542 0x1FF8, 0x1FFB, 0x2102, 0x2102, 0x2107, 0x2107, 0x210B, 0x210D,
6543 0x2110, 0x2112, 0x2115, 0x2115, 0x2119, 0x211D, 0x2124, 0x2124,
6544 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D, 0x2130, 0x2133,
6545 0x213E, 0x213F, 0x2145, 0x2145, 0x2183, 0x2183, 0x2C00, 0x2C2F,
6546 0x2C60, 0x2C60, 0x2C62, 0x2C64, 0x2C67, 0x2C67, 0x2C69, 0x2C69,
6547 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70, 0x2C72, 0x2C72, 0x2C75, 0x2C75,
6548 0x2C7E, 0x2C80, 0x2C82, 0x2C82, 0x2C84, 0x2C84, 0x2C86, 0x2C86,
6549 0x2C88, 0x2C88, 0x2C8A, 0x2C8A, 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E,
6550 0x2C90, 0x2C90, 0x2C92, 0x2C92, 0x2C94, 0x2C94, 0x2C96, 0x2C96,
6551 0x2C98, 0x2C98, 0x2C9A, 0x2C9A, 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E,
6552 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2, 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6,
6553 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA, 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE,
6554 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2, 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6,
6555 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA, 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE,
6556 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2, 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6,
6557 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA, 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE,
6558 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2, 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6,
6559 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA, 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE,
6560 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2, 0x2CEB, 0x2CEB, 0x2CED, 0x2CED,
6561 0x2CF2, 0x2CF2, 0xA640, 0xA640, 0xA642, 0xA642, 0xA644, 0xA644,
6562 0xA646, 0xA646, 0xA648, 0xA648, 0xA64A, 0xA64A, 0xA64C, 0xA64C,
6563 0xA64E, 0xA64E, 0xA650, 0xA650, 0xA652, 0xA652, 0xA654, 0xA654,
6564 0xA656, 0xA656, 0xA658, 0xA658, 0xA65A, 0xA65A, 0xA65C, 0xA65C,
6565 0xA65E, 0xA65E, 0xA660, 0xA660, 0xA662, 0xA662, 0xA664, 0xA664,
6566 0xA666, 0xA666, 0xA668, 0xA668, 0xA66A, 0xA66A, 0xA66C, 0xA66C,
6567 0xA680, 0xA680, 0xA682, 0xA682, 0xA684, 0xA684, 0xA686, 0xA686,
6568 0xA688, 0xA688, 0xA68A, 0xA68A, 0xA68C, 0xA68C, 0xA68E, 0xA68E,
6569 0xA690, 0xA690, 0xA692, 0xA692, 0xA694, 0xA694, 0xA696, 0xA696,
6570 0xA698, 0xA698, 0xA69A, 0xA69A, 0xA722, 0xA722, 0xA724, 0xA724,
6571 0xA726, 0xA726, 0xA728, 0xA728, 0xA72A, 0xA72A, 0xA72C, 0xA72C,
6572 0xA72E, 0xA72E, 0xA732, 0xA732, 0xA734, 0xA734, 0xA736, 0xA736,
6573 0xA738, 0xA738, 0xA73A, 0xA73A, 0xA73C, 0xA73C, 0xA73E, 0xA73E,
6574 0xA740, 0xA740, 0xA742, 0xA742, 0xA744, 0xA744, 0xA746, 0xA746,
6575 0xA748, 0xA748, 0xA74A, 0xA74A, 0xA74C, 0xA74C, 0xA74E, 0xA74E,
6576 0xA750, 0xA750, 0xA752, 0xA752, 0xA754, 0xA754, 0xA756, 0xA756,
6577 0xA758, 0xA758, 0xA75A, 0xA75A, 0xA75C, 0xA75C, 0xA75E, 0xA75E,
6578 0xA760, 0xA760, 0xA762, 0xA762, 0xA764, 0xA764, 0xA766, 0xA766,
6579 0xA768, 0xA768, 0xA76A, 0xA76A, 0xA76C, 0xA76C, 0xA76E, 0xA76E,
6580 0xA779, 0xA779, 0xA77B, 0xA77B, 0xA77D, 0xA77E, 0xA780, 0xA780,
6581 0xA782, 0xA782, 0xA784, 0xA784, 0xA786, 0xA786, 0xA78B, 0xA78B,
6582 0xA78D, 0xA78D, 0xA790, 0xA790, 0xA792, 0xA792, 0xA796, 0xA796,
6583 0xA798, 0xA798, 0xA79A, 0xA79A, 0xA79C, 0xA79C, 0xA79E, 0xA79E,
6584 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2, 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6,
6585 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE, 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6,
6586 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA, 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE,
6587 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2, 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9,
6588 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6, 0xA7D8, 0xA7D8, 0xA7F5, 0xA7F5,
6589 0xFF21, 0xFF3A, 0x10400, 0x10427, 0x104B0, 0x104D3, 0x10570, 0x1057A,
6590 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, 0x10C80, 0x10CB2,
6591 0x118A0, 0x118BF, 0x16E40, 0x16E5F, 0x1D400, 0x1D419, 0x1D434, 0x1D44D,
6592 0x1D468, 0x1D481, 0x1D49C, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2,
6593 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B5, 0x1D4D0, 0x1D4E9,
6594 0x1D504, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C,
6595 0x1D538, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546,
6596 0x1D54A, 0x1D550, 0x1D56C, 0x1D585, 0x1D5A0, 0x1D5B9, 0x1D5D4, 0x1D5ED,
6597 0x1D608, 0x1D621, 0x1D63C, 0x1D655, 0x1D670, 0x1D689, 0x1D6A8, 0x1D6C0,
6598 0x1D6E2, 0x1D6FA, 0x1D71C, 0x1D734, 0x1D756, 0x1D76E, 0x1D790, 0x1D7A8,
6599 0x1D7CA, 0x1D7CA, 0x1E900, 0x1E921,
6600 // #16 (2048+71): gc=Modifier_Letter:Lm
6601 0x02B0, 0x02C1, 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC,
6602 0x02EE, 0x02EE, 0x0374, 0x0374, 0x037A, 0x037A, 0x0559, 0x0559,
6603 0x0640, 0x0640, 0x06E5, 0x06E6, 0x07F4, 0x07F5, 0x07FA, 0x07FA,
6604 0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x08C9, 0x08C9,
6605 0x0971, 0x0971, 0x0E46, 0x0E46, 0x0EC6, 0x0EC6, 0x10FC, 0x10FC,
6606 0x17D7, 0x17D7, 0x1843, 0x1843, 0x1AA7, 0x1AA7, 0x1C78, 0x1C7D,
6607 0x1D2C, 0x1D6A, 0x1D78, 0x1D78, 0x1D9B, 0x1DBF, 0x2071, 0x2071,
6608 0x207F, 0x207F, 0x2090, 0x209C, 0x2C7C, 0x2C7D, 0x2D6F, 0x2D6F,
6609 0x2E2F, 0x2E2F, 0x3005, 0x3005, 0x3031, 0x3035, 0x303B, 0x303B,
6610 0x309D, 0x309E, 0x30FC, 0x30FE, 0xA015, 0xA015, 0xA4F8, 0xA4FD,
6611 0xA60C, 0xA60C, 0xA67F, 0xA67F, 0xA69C, 0xA69D, 0xA717, 0xA71F,
6612 0xA770, 0xA770, 0xA788, 0xA788, 0xA7F2, 0xA7F4, 0xA7F8, 0xA7F9,
6613 0xA9CF, 0xA9CF, 0xA9E6, 0xA9E6, 0xAA70, 0xAA70, 0xAADD, 0xAADD,
6614 0xAAF3, 0xAAF4, 0xAB5C, 0xAB5F, 0xAB69, 0xAB69, 0xFF70, 0xFF70,
6615 0xFF9E, 0xFF9F, 0x10780, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA,
6616 0x16B40, 0x16B43, 0x16F93, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3,
6617 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1E030, 0x1E06D,
6618 0x1E137, 0x1E13D, 0x1E4EB, 0x1E4EB, 0x1E94B, 0x1E94B,
6619 // #17 (2119+511): gc=Other_Letter:Lo
6620 0x00AA, 0x00AA, 0x00BA, 0x00BA, 0x01BB, 0x01BB, 0x01C0, 0x01C3,
6621 0x0294, 0x0294, 0x05D0, 0x05EA, 0x05EF, 0x05F2, 0x0620, 0x063F,
6622 0x0641, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5,
6623 0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x0710,
6624 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1, 0x07CA, 0x07EA,
6625 0x0800, 0x0815, 0x0840, 0x0858, 0x0860, 0x086A, 0x0870, 0x0887,
6626 0x0889, 0x088E, 0x08A0, 0x08C8, 0x0904, 0x0939, 0x093D, 0x093D,
6627 0x0950, 0x0950, 0x0958, 0x0961, 0x0972, 0x0980, 0x0985, 0x098C,
6628 0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2,
6629 0x09B6, 0x09B9, 0x09BD, 0x09BD, 0x09CE, 0x09CE, 0x09DC, 0x09DD,
6630 0x09DF, 0x09E1, 0x09F0, 0x09F1, 0x09FC, 0x09FC, 0x0A05, 0x0A0A,
6631 0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33,
6632 0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E,
6633 0x0A72, 0x0A74, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
6634 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD,
6635 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1, 0x0AF9, 0x0AF9, 0x0B05, 0x0B0C,
6636 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
6637 0x0B35, 0x0B39, 0x0B3D, 0x0B3D, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61,
6638 0x0B71, 0x0B71, 0x0B83, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90,
6639 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F,
6640 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0,
6641 0x0C05, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C39,
6642 0x0C3D, 0x0C3D, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C61,
6643 0x0C80, 0x0C80, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8,
6644 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE,
6645 0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2, 0x0D04, 0x0D0C, 0x0D0E, 0x0D10,
6646 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D, 0x0D4E, 0x0D4E, 0x0D54, 0x0D56,
6647 0x0D5F, 0x0D61, 0x0D7A, 0x0D7F, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1,
6648 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0E01, 0x0E30,
6649 0x0E32, 0x0E33, 0x0E40, 0x0E45, 0x0E81, 0x0E82, 0x0E84, 0x0E84,
6650 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0,
6651 0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EDC, 0x0EDF,
6652 0x0F00, 0x0F00, 0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C,
6653 0x1000, 0x102A, 0x103F, 0x103F, 0x1050, 0x1055, 0x105A, 0x105D,
6654 0x1061, 0x1061, 0x1065, 0x1066, 0x106E, 0x1070, 0x1075, 0x1081,
6655 0x108E, 0x108E, 0x1100, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256,
6656 0x1258, 0x1258, 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D,
6657 0x1290, 0x12B0, 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0,
6658 0x12C2, 0x12C5, 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315,
6659 0x1318, 0x135A, 0x1380, 0x138F, 0x1401, 0x166C, 0x166F, 0x167F,
6660 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16F1, 0x16F8, 0x1700, 0x1711,
6661 0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C, 0x176E, 0x1770,
6662 0x1780, 0x17B3, 0x17DC, 0x17DC, 0x1820, 0x1842, 0x1844, 0x1878,
6663 0x1880, 0x1884, 0x1887, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5,
6664 0x1900, 0x191E, 0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB,
6665 0x19B0, 0x19C9, 0x1A00, 0x1A16, 0x1A20, 0x1A54, 0x1B05, 0x1B33,
6666 0x1B45, 0x1B4C, 0x1B83, 0x1BA0, 0x1BAE, 0x1BAF, 0x1BBA, 0x1BE5,
6667 0x1C00, 0x1C23, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C77, 0x1CE9, 0x1CEC,
6668 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x2135, 0x2138,
6669 0x2D30, 0x2D67, 0x2D80, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE,
6670 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE,
6671 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0x3006, 0x3006, 0x303C, 0x303C,
6672 0x3041, 0x3096, 0x309F, 0x309F, 0x30A1, 0x30FA, 0x30FF, 0x30FF,
6673 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF,
6674 0x3400, 0x4DBF, 0x4E00, 0xA014, 0xA016, 0xA48C, 0xA4D0, 0xA4F7,
6675 0xA500, 0xA60B, 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA66E, 0xA66E,
6676 0xA6A0, 0xA6E5, 0xA78F, 0xA78F, 0xA7F7, 0xA7F7, 0xA7FB, 0xA801,
6677 0xA803, 0xA805, 0xA807, 0xA80A, 0xA80C, 0xA822, 0xA840, 0xA873,
6678 0xA882, 0xA8B3, 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FE,
6679 0xA90A, 0xA925, 0xA930, 0xA946, 0xA960, 0xA97C, 0xA984, 0xA9B2,
6680 0xA9E0, 0xA9E4, 0xA9E7, 0xA9EF, 0xA9FA, 0xA9FE, 0xAA00, 0xAA28,
6681 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA60, 0xAA6F, 0xAA71, 0xAA76,
6682 0xAA7A, 0xAA7A, 0xAA7E, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6,
6683 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADC,
6684 0xAAE0, 0xAAEA, 0xAAF2, 0xAAF2, 0xAB01, 0xAB06, 0xAB09, 0xAB0E,
6685 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xABC0, 0xABE2,
6686 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D,
6687 0xFA70, 0xFAD9, 0xFB1D, 0xFB1D, 0xFB1F, 0xFB28, 0xFB2A, 0xFB36,
6688 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44,
6689 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F, 0xFD92, 0xFDC7,
6690 0xFDF0, 0xFDFB, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0xFF66, 0xFF6F,
6691 0xFF71, 0xFF9D, 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF,
6692 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0x10000, 0x1000B, 0x1000D, 0x10026,
6693 0x10028, 0x1003A, 0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D,
6694 0x10080, 0x100FA, 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x10300, 0x1031F,
6695 0x1032D, 0x10340, 0x10342, 0x10349, 0x10350, 0x10375, 0x10380, 0x1039D,
6696 0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x10450, 0x1049D, 0x10500, 0x10527,
6697 0x10530, 0x10563, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767,
6698 0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838,
6699 0x1083C, 0x1083C, 0x1083F, 0x10855, 0x10860, 0x10876, 0x10880, 0x1089E,
6700 0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x10900, 0x10915, 0x10920, 0x10939,
6701 0x10980, 0x109B7, 0x109BE, 0x109BF, 0x10A00, 0x10A00, 0x10A10, 0x10A13,
6702 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A60, 0x10A7C, 0x10A80, 0x10A9C,
6703 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE4, 0x10B00, 0x10B35, 0x10B40, 0x10B55,
6704 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48, 0x10D00, 0x10D23,
6705 0x10E80, 0x10EA9, 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27,
6706 0x10F30, 0x10F45, 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6,
6707 0x11003, 0x11037, 0x11071, 0x11072, 0x11075, 0x11075, 0x11083, 0x110AF,
6708 0x110D0, 0x110E8, 0x11103, 0x11126, 0x11144, 0x11144, 0x11147, 0x11147,
6709 0x11150, 0x11172, 0x11176, 0x11176, 0x11183, 0x111B2, 0x111C1, 0x111C4,
6710 0x111DA, 0x111DA, 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x1122B,
6711 0x1123F, 0x11240, 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D,
6712 0x1128F, 0x1129D, 0x1129F, 0x112A8, 0x112B0, 0x112DE, 0x11305, 0x1130C,
6713 0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330, 0x11332, 0x11333,
6714 0x11335, 0x11339, 0x1133D, 0x1133D, 0x11350, 0x11350, 0x1135D, 0x11361,
6715 0x11400, 0x11434, 0x11447, 0x1144A, 0x1145F, 0x11461, 0x11480, 0x114AF,
6716 0x114C4, 0x114C5, 0x114C7, 0x114C7, 0x11580, 0x115AE, 0x115D8, 0x115DB,
6717 0x11600, 0x1162F, 0x11644, 0x11644, 0x11680, 0x116AA, 0x116B8, 0x116B8,
6718 0x11700, 0x1171A, 0x11740, 0x11746, 0x11800, 0x1182B, 0x118FF, 0x11906,
6719 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x1192F,
6720 0x1193F, 0x1193F, 0x11941, 0x11941, 0x119A0, 0x119A7, 0x119AA, 0x119D0,
6721 0x119E1, 0x119E1, 0x119E3, 0x119E3, 0x11A00, 0x11A00, 0x11A0B, 0x11A32,
6722 0x11A3A, 0x11A3A, 0x11A50, 0x11A50, 0x11A5C, 0x11A89, 0x11A9D, 0x11A9D,
6723 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C2E, 0x11C40, 0x11C40,
6724 0x11C72, 0x11C8F, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D30,
6725 0x11D46, 0x11D46, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D89,
6726 0x11D98, 0x11D98, 0x11EE0, 0x11EF2, 0x11F02, 0x11F02, 0x11F04, 0x11F10,
6727 0x11F12, 0x11F33, 0x11FB0, 0x11FB0, 0x12000, 0x12399, 0x12480, 0x12543,
6728 0x12F90, 0x12FF0, 0x13000, 0x1342F, 0x13441, 0x13446, 0x14400, 0x14646,
6729 0x16800, 0x16A38, 0x16A40, 0x16A5E, 0x16A70, 0x16ABE, 0x16AD0, 0x16AED,
6730 0x16B00, 0x16B2F, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16F00, 0x16F4A,
6731 0x16F50, 0x16F50, 0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08,
6732 0x1B000, 0x1B122, 0x1B132, 0x1B132, 0x1B150, 0x1B152, 0x1B155, 0x1B155,
6733 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C,
6734 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1DF0A, 0x1DF0A, 0x1E100, 0x1E12C,
6735 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, 0x1E4D0, 0x1E4EA,
6736 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE,
6737 0x1E800, 0x1E8C4, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22,
6738 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37,
6739 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47,
6740 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52,
6741 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B,
6742 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64,
6743 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C,
6744 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3,
6745 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x20000, 0x2A6DF, 0x2A700, 0x2B739,
6746 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D,
6747 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, 0x323AF,
6748 // #18 (2630+533): gc=Mark:M:Combining_Mark
6749 // Mc:182 + Me:5 + Mn:346
6750 // #19 (2630+182): gc=Spacing_Mark:Mc
6751 0x0903, 0x0903, 0x093B, 0x093B, 0x093E, 0x0940, 0x0949, 0x094C,
6752 0x094E, 0x094F, 0x0982, 0x0983, 0x09BE, 0x09C0, 0x09C7, 0x09C8,
6753 0x09CB, 0x09CC, 0x09D7, 0x09D7, 0x0A03, 0x0A03, 0x0A3E, 0x0A40,
6754 0x0A83, 0x0A83, 0x0ABE, 0x0AC0, 0x0AC9, 0x0AC9, 0x0ACB, 0x0ACC,
6755 0x0B02, 0x0B03, 0x0B3E, 0x0B3E, 0x0B40, 0x0B40, 0x0B47, 0x0B48,
6756 0x0B4B, 0x0B4C, 0x0B57, 0x0B57, 0x0BBE, 0x0BBF, 0x0BC1, 0x0BC2,
6757 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC, 0x0BD7, 0x0BD7, 0x0C01, 0x0C03,
6758 0x0C41, 0x0C44, 0x0C82, 0x0C83, 0x0CBE, 0x0CBE, 0x0CC0, 0x0CC4,
6759 0x0CC7, 0x0CC8, 0x0CCA, 0x0CCB, 0x0CD5, 0x0CD6, 0x0CF3, 0x0CF3,
6760 0x0D02, 0x0D03, 0x0D3E, 0x0D40, 0x0D46, 0x0D48, 0x0D4A, 0x0D4C,
6761 0x0D57, 0x0D57, 0x0D82, 0x0D83, 0x0DCF, 0x0DD1, 0x0DD8, 0x0DDF,
6762 0x0DF2, 0x0DF3, 0x0F3E, 0x0F3F, 0x0F7F, 0x0F7F, 0x102B, 0x102C,
6763 0x1031, 0x1031, 0x1038, 0x1038, 0x103B, 0x103C, 0x1056, 0x1057,
6764 0x1062, 0x1064, 0x1067, 0x106D, 0x1083, 0x1084, 0x1087, 0x108C,
6765 0x108F, 0x108F, 0x109A, 0x109C, 0x1715, 0x1715, 0x1734, 0x1734,
6766 0x17B6, 0x17B6, 0x17BE, 0x17C5, 0x17C7, 0x17C8, 0x1923, 0x1926,
6767 0x1929, 0x192B, 0x1930, 0x1931, 0x1933, 0x1938, 0x1A19, 0x1A1A,
6768 0x1A55, 0x1A55, 0x1A57, 0x1A57, 0x1A61, 0x1A61, 0x1A63, 0x1A64,
6769 0x1A6D, 0x1A72, 0x1B04, 0x1B04, 0x1B35, 0x1B35, 0x1B3B, 0x1B3B,
6770 0x1B3D, 0x1B41, 0x1B43, 0x1B44, 0x1B82, 0x1B82, 0x1BA1, 0x1BA1,
6771 0x1BA6, 0x1BA7, 0x1BAA, 0x1BAA, 0x1BE7, 0x1BE7, 0x1BEA, 0x1BEC,
6772 0x1BEE, 0x1BEE, 0x1BF2, 0x1BF3, 0x1C24, 0x1C2B, 0x1C34, 0x1C35,
6773 0x1CE1, 0x1CE1, 0x1CF7, 0x1CF7, 0x302E, 0x302F, 0xA823, 0xA824,
6774 0xA827, 0xA827, 0xA880, 0xA881, 0xA8B4, 0xA8C3, 0xA952, 0xA953,
6775 0xA983, 0xA983, 0xA9B4, 0xA9B5, 0xA9BA, 0xA9BB, 0xA9BE, 0xA9C0,
6776 0xAA2F, 0xAA30, 0xAA33, 0xAA34, 0xAA4D, 0xAA4D, 0xAA7B, 0xAA7B,
6777 0xAA7D, 0xAA7D, 0xAAEB, 0xAAEB, 0xAAEE, 0xAAEF, 0xAAF5, 0xAAF5,
6778 0xABE3, 0xABE4, 0xABE6, 0xABE7, 0xABE9, 0xABEA, 0xABEC, 0xABEC,
6779 0x11000, 0x11000, 0x11002, 0x11002, 0x11082, 0x11082, 0x110B0, 0x110B2,
6780 0x110B7, 0x110B8, 0x1112C, 0x1112C, 0x11145, 0x11146, 0x11182, 0x11182,
6781 0x111B3, 0x111B5, 0x111BF, 0x111C0, 0x111CE, 0x111CE, 0x1122C, 0x1122E,
6782 0x11232, 0x11233, 0x11235, 0x11235, 0x112E0, 0x112E2, 0x11302, 0x11303,
6783 0x1133E, 0x1133F, 0x11341, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D,
6784 0x11357, 0x11357, 0x11362, 0x11363, 0x11435, 0x11437, 0x11440, 0x11441,
6785 0x11445, 0x11445, 0x114B0, 0x114B2, 0x114B9, 0x114B9, 0x114BB, 0x114BE,
6786 0x114C1, 0x114C1, 0x115AF, 0x115B1, 0x115B8, 0x115BB, 0x115BE, 0x115BE,
6787 0x11630, 0x11632, 0x1163B, 0x1163C, 0x1163E, 0x1163E, 0x116AC, 0x116AC,
6788 0x116AE, 0x116AF, 0x116B6, 0x116B6, 0x11720, 0x11721, 0x11726, 0x11726,
6789 0x1182C, 0x1182E, 0x11838, 0x11838, 0x11930, 0x11935, 0x11937, 0x11938,
6790 0x1193D, 0x1193D, 0x11940, 0x11940, 0x11942, 0x11942, 0x119D1, 0x119D3,
6791 0x119DC, 0x119DF, 0x119E4, 0x119E4, 0x11A39, 0x11A39, 0x11A57, 0x11A58,
6792 0x11A97, 0x11A97, 0x11C2F, 0x11C2F, 0x11C3E, 0x11C3E, 0x11CA9, 0x11CA9,
6793 0x11CB1, 0x11CB1, 0x11CB4, 0x11CB4, 0x11D8A, 0x11D8E, 0x11D93, 0x11D94,
6794 0x11D96, 0x11D96, 0x11EF5, 0x11EF6, 0x11F03, 0x11F03, 0x11F34, 0x11F35,
6795 0x11F3E, 0x11F3F, 0x11F41, 0x11F41, 0x16F51, 0x16F87, 0x16FF0, 0x16FF1,
6796 0x1D165, 0x1D166, 0x1D16D, 0x1D172,
6797 // #20 (2812+5): gc=Enclosing_Mark:Me
6798 0x0488, 0x0489, 0x1ABE, 0x1ABE, 0x20DD, 0x20E0, 0x20E2, 0x20E4,
6799 0xA670, 0xA672,
6800 // #21 (2817+346): gc=Nonspacing_Mark:Mn
6801 0x0300, 0x036F, 0x0483, 0x0487, 0x0591, 0x05BD, 0x05BF, 0x05BF,
6802 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x0610, 0x061A,
6803 0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DC, 0x06DF, 0x06E4,
6804 0x06E7, 0x06E8, 0x06EA, 0x06ED, 0x0711, 0x0711, 0x0730, 0x074A,
6805 0x07A6, 0x07B0, 0x07EB, 0x07F3, 0x07FD, 0x07FD, 0x0816, 0x0819,
6806 0x081B, 0x0823, 0x0825, 0x0827, 0x0829, 0x082D, 0x0859, 0x085B,
6807 0x0898, 0x089F, 0x08CA, 0x08E1, 0x08E3, 0x0902, 0x093A, 0x093A,
6808 0x093C, 0x093C, 0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957,
6809 0x0962, 0x0963, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09C1, 0x09C4,
6810 0x09CD, 0x09CD, 0x09E2, 0x09E3, 0x09FE, 0x09FE, 0x0A01, 0x0A02,
6811 0x0A3C, 0x0A3C, 0x0A41, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
6812 0x0A51, 0x0A51, 0x0A70, 0x0A71, 0x0A75, 0x0A75, 0x0A81, 0x0A82,
6813 0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5, 0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD,
6814 0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF, 0x0B01, 0x0B01, 0x0B3C, 0x0B3C,
6815 0x0B3F, 0x0B3F, 0x0B41, 0x0B44, 0x0B4D, 0x0B4D, 0x0B55, 0x0B56,
6816 0x0B62, 0x0B63, 0x0B82, 0x0B82, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD,
6817 0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40,
6818 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63,
6819 0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC6, 0x0CC6,
6820 0x0CCC, 0x0CCD, 0x0CE2, 0x0CE3, 0x0D00, 0x0D01, 0x0D3B, 0x0D3C,
6821 0x0D41, 0x0D44, 0x0D4D, 0x0D4D, 0x0D62, 0x0D63, 0x0D81, 0x0D81,
6822 0x0DCA, 0x0DCA, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6, 0x0E31, 0x0E31,
6823 0x0E34, 0x0E3A, 0x0E47, 0x0E4E, 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC,
6824 0x0EC8, 0x0ECE, 0x0F18, 0x0F19, 0x0F35, 0x0F35, 0x0F37, 0x0F37,
6825 0x0F39, 0x0F39, 0x0F71, 0x0F7E, 0x0F80, 0x0F84, 0x0F86, 0x0F87,
6826 0x0F8D, 0x0F97, 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x102D, 0x1030,
6827 0x1032, 0x1037, 0x1039, 0x103A, 0x103D, 0x103E, 0x1058, 0x1059,
6828 0x105E, 0x1060, 0x1071, 0x1074, 0x1082, 0x1082, 0x1085, 0x1086,
6829 0x108D, 0x108D, 0x109D, 0x109D, 0x135D, 0x135F, 0x1712, 0x1714,
6830 0x1732, 0x1733, 0x1752, 0x1753, 0x1772, 0x1773, 0x17B4, 0x17B5,
6831 0x17B7, 0x17BD, 0x17C6, 0x17C6, 0x17C9, 0x17D3, 0x17DD, 0x17DD,
6832 0x180B, 0x180D, 0x180F, 0x180F, 0x1885, 0x1886, 0x18A9, 0x18A9,
6833 0x1920, 0x1922, 0x1927, 0x1928, 0x1932, 0x1932, 0x1939, 0x193B,
6834 0x1A17, 0x1A18, 0x1A1B, 0x1A1B, 0x1A56, 0x1A56, 0x1A58, 0x1A5E,
6835 0x1A60, 0x1A60, 0x1A62, 0x1A62, 0x1A65, 0x1A6C, 0x1A73, 0x1A7C,
6836 0x1A7F, 0x1A7F, 0x1AB0, 0x1ABD, 0x1ABF, 0x1ACE, 0x1B00, 0x1B03,
6837 0x1B34, 0x1B34, 0x1B36, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42,
6838 0x1B6B, 0x1B73, 0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9,
6839 0x1BAB, 0x1BAD, 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED,
6840 0x1BEF, 0x1BF1, 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1CD0, 0x1CD2,
6841 0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4,
6842 0x1CF8, 0x1CF9, 0x1DC0, 0x1DFF, 0x20D0, 0x20DC, 0x20E1, 0x20E1,
6843 0x20E5, 0x20F0, 0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF,
6844 0x302A, 0x302D, 0x3099, 0x309A, 0xA66F, 0xA66F, 0xA674, 0xA67D,
6845 0xA69E, 0xA69F, 0xA6F0, 0xA6F1, 0xA802, 0xA802, 0xA806, 0xA806,
6846 0xA80B, 0xA80B, 0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5,
6847 0xA8E0, 0xA8F1, 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA951,
6848 0xA980, 0xA982, 0xA9B3, 0xA9B3, 0xA9B6, 0xA9B9, 0xA9BC, 0xA9BD,
6849 0xA9E5, 0xA9E5, 0xAA29, 0xAA2E, 0xAA31, 0xAA32, 0xAA35, 0xAA36,
6850 0xAA43, 0xAA43, 0xAA4C, 0xAA4C, 0xAA7C, 0xAA7C, 0xAAB0, 0xAAB0,
6851 0xAAB2, 0xAAB4, 0xAAB7, 0xAAB8, 0xAABE, 0xAABF, 0xAAC1, 0xAAC1,
6852 0xAAEC, 0xAAED, 0xAAF6, 0xAAF6, 0xABE5, 0xABE5, 0xABE8, 0xABE8,
6853 0xABED, 0xABED, 0xFB1E, 0xFB1E, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F,
6854 0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10A01, 0x10A03,
6855 0x10A05, 0x10A06, 0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F,
6856 0x10AE5, 0x10AE6, 0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10EFD, 0x10EFF,
6857 0x10F46, 0x10F50, 0x10F82, 0x10F85, 0x11001, 0x11001, 0x11038, 0x11046,
6858 0x11070, 0x11070, 0x11073, 0x11074, 0x1107F, 0x11081, 0x110B3, 0x110B6,
6859 0x110B9, 0x110BA, 0x110C2, 0x110C2, 0x11100, 0x11102, 0x11127, 0x1112B,
6860 0x1112D, 0x11134, 0x11173, 0x11173, 0x11180, 0x11181, 0x111B6, 0x111BE,
6861 0x111C9, 0x111CC, 0x111CF, 0x111CF, 0x1122F, 0x11231, 0x11234, 0x11234,
6862 0x11236, 0x11237, 0x1123E, 0x1123E, 0x11241, 0x11241, 0x112DF, 0x112DF,
6863 0x112E3, 0x112EA, 0x11300, 0x11301, 0x1133B, 0x1133C, 0x11340, 0x11340,
6864 0x11366, 0x1136C, 0x11370, 0x11374, 0x11438, 0x1143F, 0x11442, 0x11444,
6865 0x11446, 0x11446, 0x1145E, 0x1145E, 0x114B3, 0x114B8, 0x114BA, 0x114BA,
6866 0x114BF, 0x114C0, 0x114C2, 0x114C3, 0x115B2, 0x115B5, 0x115BC, 0x115BD,
6867 0x115BF, 0x115C0, 0x115DC, 0x115DD, 0x11633, 0x1163A, 0x1163D, 0x1163D,
6868 0x1163F, 0x11640, 0x116AB, 0x116AB, 0x116AD, 0x116AD, 0x116B0, 0x116B5,
6869 0x116B7, 0x116B7, 0x1171D, 0x1171F, 0x11722, 0x11725, 0x11727, 0x1172B,
6870 0x1182F, 0x11837, 0x11839, 0x1183A, 0x1193B, 0x1193C, 0x1193E, 0x1193E,
6871 0x11943, 0x11943, 0x119D4, 0x119D7, 0x119DA, 0x119DB, 0x119E0, 0x119E0,
6872 0x11A01, 0x11A0A, 0x11A33, 0x11A38, 0x11A3B, 0x11A3E, 0x11A47, 0x11A47,
6873 0x11A51, 0x11A56, 0x11A59, 0x11A5B, 0x11A8A, 0x11A96, 0x11A98, 0x11A99,
6874 0x11C30, 0x11C36, 0x11C38, 0x11C3D, 0x11C3F, 0x11C3F, 0x11C92, 0x11CA7,
6875 0x11CAA, 0x11CB0, 0x11CB2, 0x11CB3, 0x11CB5, 0x11CB6, 0x11D31, 0x11D36,
6876 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D45, 0x11D47, 0x11D47,
6877 0x11D90, 0x11D91, 0x11D95, 0x11D95, 0x11D97, 0x11D97, 0x11EF3, 0x11EF4,
6878 0x11F00, 0x11F01, 0x11F36, 0x11F3A, 0x11F40, 0x11F40, 0x11F42, 0x11F42,
6879 0x13440, 0x13440, 0x13447, 0x13455, 0x16AF0, 0x16AF4, 0x16B30, 0x16B36,
6880 0x16F4F, 0x16F4F, 0x16F8F, 0x16F92, 0x16FE4, 0x16FE4, 0x1BC9D, 0x1BC9E,
6881 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167, 0x1D169, 0x1D17B, 0x1D182,
6882 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, 0x1DA00, 0x1DA36,
6883 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F,
6884 0x1DAA1, 0x1DAAF, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021,
6885 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E08F, 0x1E08F, 0x1E130, 0x1E136,
6886 0x1E2AE, 0x1E2AE, 0x1E2EC, 0x1E2EF, 0x1E4EC, 0x1E4EF, 0x1E8D0, 0x1E8D6,
6887 0x1E944, 0x1E94A, 0xE0100, 0xE01EF,
6888 // #22 (3163+148): gc=Number:N
6889 // Nd:64 + Nl:12 + No:72
6890 // #23 (3163+64): gc=Decimal_Number:Nd:digit
6891 0x0030, 0x0039, 0x0660, 0x0669, 0x06F0, 0x06F9, 0x07C0, 0x07C9,
6892 0x0966, 0x096F, 0x09E6, 0x09EF, 0x0A66, 0x0A6F, 0x0AE6, 0x0AEF,
6893 0x0B66, 0x0B6F, 0x0BE6, 0x0BEF, 0x0C66, 0x0C6F, 0x0CE6, 0x0CEF,
6894 0x0D66, 0x0D6F, 0x0DE6, 0x0DEF, 0x0E50, 0x0E59, 0x0ED0, 0x0ED9,
6895 0x0F20, 0x0F29, 0x1040, 0x1049, 0x1090, 0x1099, 0x17E0, 0x17E9,
6896 0x1810, 0x1819, 0x1946, 0x194F, 0x19D0, 0x19D9, 0x1A80, 0x1A89,
6897 0x1A90, 0x1A99, 0x1B50, 0x1B59, 0x1BB0, 0x1BB9, 0x1C40, 0x1C49,
6898 0x1C50, 0x1C59, 0xA620, 0xA629, 0xA8D0, 0xA8D9, 0xA900, 0xA909,
6899 0xA9D0, 0xA9D9, 0xA9F0, 0xA9F9, 0xAA50, 0xAA59, 0xABF0, 0xABF9,
6900 0xFF10, 0xFF19, 0x104A0, 0x104A9, 0x10D30, 0x10D39, 0x11066, 0x1106F,
6901 0x110F0, 0x110F9, 0x11136, 0x1113F, 0x111D0, 0x111D9, 0x112F0, 0x112F9,
6902 0x11450, 0x11459, 0x114D0, 0x114D9, 0x11650, 0x11659, 0x116C0, 0x116C9,
6903 0x11730, 0x11739, 0x118E0, 0x118E9, 0x11950, 0x11959, 0x11C50, 0x11C59,
6904 0x11D50, 0x11D59, 0x11DA0, 0x11DA9, 0x11F50, 0x11F59, 0x16A60, 0x16A69,
6905 0x16AC0, 0x16AC9, 0x16B50, 0x16B59, 0x1D7CE, 0x1D7FF, 0x1E140, 0x1E149,
6906 0x1E2F0, 0x1E2F9, 0x1E4F0, 0x1E4F9, 0x1E950, 0x1E959, 0x1FBF0, 0x1FBF9,
6907 // #24 (3227+12): gc=Letter_Number:Nl
6908 0x16EE, 0x16F0, 0x2160, 0x2182, 0x2185, 0x2188, 0x3007, 0x3007,
6909 0x3021, 0x3029, 0x3038, 0x303A, 0xA6E6, 0xA6EF, 0x10140, 0x10174,
6910 0x10341, 0x10341, 0x1034A, 0x1034A, 0x103D1, 0x103D5, 0x12400, 0x1246E,
6911 // #25 (3239+72): gc=Other_Number:No
6912 0x00B2, 0x00B3, 0x00B9, 0x00B9, 0x00BC, 0x00BE, 0x09F4, 0x09F9,
6913 0x0B72, 0x0B77, 0x0BF0, 0x0BF2, 0x0C78, 0x0C7E, 0x0D58, 0x0D5E,
6914 0x0D70, 0x0D78, 0x0F2A, 0x0F33, 0x1369, 0x137C, 0x17F0, 0x17F9,
6915 0x19DA, 0x19DA, 0x2070, 0x2070, 0x2074, 0x2079, 0x2080, 0x2089,
6916 0x2150, 0x215F, 0x2189, 0x2189, 0x2460, 0x249B, 0x24EA, 0x24FF,
6917 0x2776, 0x2793, 0x2CFD, 0x2CFD, 0x3192, 0x3195, 0x3220, 0x3229,
6918 0x3248, 0x324F, 0x3251, 0x325F, 0x3280, 0x3289, 0x32B1, 0x32BF,
6919 0xA830, 0xA835, 0x10107, 0x10133, 0x10175, 0x10178, 0x1018A, 0x1018B,
6920 0x102E1, 0x102FB, 0x10320, 0x10323, 0x10858, 0x1085F, 0x10879, 0x1087F,
6921 0x108A7, 0x108AF, 0x108FB, 0x108FF, 0x10916, 0x1091B, 0x109BC, 0x109BD,
6922 0x109C0, 0x109CF, 0x109D2, 0x109FF, 0x10A40, 0x10A48, 0x10A7D, 0x10A7E,
6923 0x10A9D, 0x10A9F, 0x10AEB, 0x10AEF, 0x10B58, 0x10B5F, 0x10B78, 0x10B7F,
6924 0x10BA9, 0x10BAF, 0x10CFA, 0x10CFF, 0x10E60, 0x10E7E, 0x10F1D, 0x10F26,
6925 0x10F51, 0x10F54, 0x10FC5, 0x10FCB, 0x11052, 0x11065, 0x111E1, 0x111F4,
6926 0x1173A, 0x1173B, 0x118EA, 0x118F2, 0x11C5A, 0x11C6C, 0x11FC0, 0x11FD4,
6927 0x16B5B, 0x16B61, 0x16E80, 0x16E96, 0x1D2C0, 0x1D2D3, 0x1D2E0, 0x1D2F3,
6928 0x1D360, 0x1D378, 0x1E8C7, 0x1E8CF, 0x1EC71, 0x1ECAB, 0x1ECAD, 0x1ECAF,
6929 0x1ECB1, 0x1ECB4, 0x1ED01, 0x1ED2D, 0x1ED2F, 0x1ED3D, 0x1F100, 0x1F10C,
6930 // #26 (3311+388): gc=Punctuation:P:punct
6931 // Pc:6 + Pd:19 + Pe:76 + Pf:10 + Pi:11 + Po:187 + Ps:79
6932 // #27 (3311+6): gc=Connector_Punctuation:Pc
6933 0x005F, 0x005F, 0x203F, 0x2040, 0x2054, 0x2054, 0xFE33, 0xFE34,
6934 0xFE4D, 0xFE4F, 0xFF3F, 0xFF3F,
6935 // #28 (3317+19): gc=Dash_Punctuation:Pd
6936 0x002D, 0x002D, 0x058A, 0x058A, 0x05BE, 0x05BE, 0x1400, 0x1400,
6937 0x1806, 0x1806, 0x2010, 0x2015, 0x2E17, 0x2E17, 0x2E1A, 0x2E1A,
6938 0x2E3A, 0x2E3B, 0x2E40, 0x2E40, 0x2E5D, 0x2E5D, 0x301C, 0x301C,
6939 0x3030, 0x3030, 0x30A0, 0x30A0, 0xFE31, 0xFE32, 0xFE58, 0xFE58,
6940 0xFE63, 0xFE63, 0xFF0D, 0xFF0D, 0x10EAD, 0x10EAD,
6941 // #29 (3336+76): gc=Close_Punctuation:Pe
6942 0x0029, 0x0029, 0x005D, 0x005D, 0x007D, 0x007D, 0x0F3B, 0x0F3B,
6943 0x0F3D, 0x0F3D, 0x169C, 0x169C, 0x2046, 0x2046, 0x207E, 0x207E,
6944 0x208E, 0x208E, 0x2309, 0x2309, 0x230B, 0x230B, 0x232A, 0x232A,
6945 0x2769, 0x2769, 0x276B, 0x276B, 0x276D, 0x276D, 0x276F, 0x276F,
6946 0x2771, 0x2771, 0x2773, 0x2773, 0x2775, 0x2775, 0x27C6, 0x27C6,
6947 0x27E7, 0x27E7, 0x27E9, 0x27E9, 0x27EB, 0x27EB, 0x27ED, 0x27ED,
6948 0x27EF, 0x27EF, 0x2984, 0x2984, 0x2986, 0x2986, 0x2988, 0x2988,
6949 0x298A, 0x298A, 0x298C, 0x298C, 0x298E, 0x298E, 0x2990, 0x2990,
6950 0x2992, 0x2992, 0x2994, 0x2994, 0x2996, 0x2996, 0x2998, 0x2998,
6951 0x29D9, 0x29D9, 0x29DB, 0x29DB, 0x29FD, 0x29FD, 0x2E23, 0x2E23,
6952 0x2E25, 0x2E25, 0x2E27, 0x2E27, 0x2E29, 0x2E29, 0x2E56, 0x2E56,
6953 0x2E58, 0x2E58, 0x2E5A, 0x2E5A, 0x2E5C, 0x2E5C, 0x3009, 0x3009,
6954 0x300B, 0x300B, 0x300D, 0x300D, 0x300F, 0x300F, 0x3011, 0x3011,
6955 0x3015, 0x3015, 0x3017, 0x3017, 0x3019, 0x3019, 0x301B, 0x301B,
6956 0x301E, 0x301F, 0xFD3E, 0xFD3E, 0xFE18, 0xFE18, 0xFE36, 0xFE36,
6957 0xFE38, 0xFE38, 0xFE3A, 0xFE3A, 0xFE3C, 0xFE3C, 0xFE3E, 0xFE3E,
6958 0xFE40, 0xFE40, 0xFE42, 0xFE42, 0xFE44, 0xFE44, 0xFE48, 0xFE48,
6959 0xFE5A, 0xFE5A, 0xFE5C, 0xFE5C, 0xFE5E, 0xFE5E, 0xFF09, 0xFF09,
6960 0xFF3D, 0xFF3D, 0xFF5D, 0xFF5D, 0xFF60, 0xFF60, 0xFF63, 0xFF63,
6961 // #30 (3412+10): gc=Final_Punctuation:Pf
6962 0x00BB, 0x00BB, 0x2019, 0x2019, 0x201D, 0x201D, 0x203A, 0x203A,
6963 0x2E03, 0x2E03, 0x2E05, 0x2E05, 0x2E0A, 0x2E0A, 0x2E0D, 0x2E0D,
6964 0x2E1D, 0x2E1D, 0x2E21, 0x2E21,
6965 // #31 (3422+11): gc=Initial_Punctuation:Pi
6966 0x00AB, 0x00AB, 0x2018, 0x2018, 0x201B, 0x201C, 0x201F, 0x201F,
6967 0x2039, 0x2039, 0x2E02, 0x2E02, 0x2E04, 0x2E04, 0x2E09, 0x2E09,
6968 0x2E0C, 0x2E0C, 0x2E1C, 0x2E1C, 0x2E20, 0x2E20,
6969 // #32 (3433+187): gc=Other_Punctuation:Po
6970 0x0021, 0x0023, 0x0025, 0x0027, 0x002A, 0x002A, 0x002C, 0x002C,
6971 0x002E, 0x002F, 0x003A, 0x003B, 0x003F, 0x0040, 0x005C, 0x005C,
6972 0x00A1, 0x00A1, 0x00A7, 0x00A7, 0x00B6, 0x00B7, 0x00BF, 0x00BF,
6973 0x037E, 0x037E, 0x0387, 0x0387, 0x055A, 0x055F, 0x0589, 0x0589,
6974 0x05C0, 0x05C0, 0x05C3, 0x05C3, 0x05C6, 0x05C6, 0x05F3, 0x05F4,
6975 0x0609, 0x060A, 0x060C, 0x060D, 0x061B, 0x061B, 0x061D, 0x061F,
6976 0x066A, 0x066D, 0x06D4, 0x06D4, 0x0700, 0x070D, 0x07F7, 0x07F9,
6977 0x0830, 0x083E, 0x085E, 0x085E, 0x0964, 0x0965, 0x0970, 0x0970,
6978 0x09FD, 0x09FD, 0x0A76, 0x0A76, 0x0AF0, 0x0AF0, 0x0C77, 0x0C77,
6979 0x0C84, 0x0C84, 0x0DF4, 0x0DF4, 0x0E4F, 0x0E4F, 0x0E5A, 0x0E5B,
6980 0x0F04, 0x0F12, 0x0F14, 0x0F14, 0x0F85, 0x0F85, 0x0FD0, 0x0FD4,
6981 0x0FD9, 0x0FDA, 0x104A, 0x104F, 0x10FB, 0x10FB, 0x1360, 0x1368,
6982 0x166E, 0x166E, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x17D4, 0x17D6,
6983 0x17D8, 0x17DA, 0x1800, 0x1805, 0x1807, 0x180A, 0x1944, 0x1945,
6984 0x1A1E, 0x1A1F, 0x1AA0, 0x1AA6, 0x1AA8, 0x1AAD, 0x1B5A, 0x1B60,
6985 0x1B7D, 0x1B7E, 0x1BFC, 0x1BFF, 0x1C3B, 0x1C3F, 0x1C7E, 0x1C7F,
6986 0x1CC0, 0x1CC7, 0x1CD3, 0x1CD3, 0x2016, 0x2017, 0x2020, 0x2027,
6987 0x2030, 0x2038, 0x203B, 0x203E, 0x2041, 0x2043, 0x2047, 0x2051,
6988 0x2053, 0x2053, 0x2055, 0x205E, 0x2CF9, 0x2CFC, 0x2CFE, 0x2CFF,
6989 0x2D70, 0x2D70, 0x2E00, 0x2E01, 0x2E06, 0x2E08, 0x2E0B, 0x2E0B,
6990 0x2E0E, 0x2E16, 0x2E18, 0x2E19, 0x2E1B, 0x2E1B, 0x2E1E, 0x2E1F,
6991 0x2E2A, 0x2E2E, 0x2E30, 0x2E39, 0x2E3C, 0x2E3F, 0x2E41, 0x2E41,
6992 0x2E43, 0x2E4F, 0x2E52, 0x2E54, 0x3001, 0x3003, 0x303D, 0x303D,
6993 0x30FB, 0x30FB, 0xA4FE, 0xA4FF, 0xA60D, 0xA60F, 0xA673, 0xA673,
6994 0xA67E, 0xA67E, 0xA6F2, 0xA6F7, 0xA874, 0xA877, 0xA8CE, 0xA8CF,
6995 0xA8F8, 0xA8FA, 0xA8FC, 0xA8FC, 0xA92E, 0xA92F, 0xA95F, 0xA95F,
6996 0xA9C1, 0xA9CD, 0xA9DE, 0xA9DF, 0xAA5C, 0xAA5F, 0xAADE, 0xAADF,
6997 0xAAF0, 0xAAF1, 0xABEB, 0xABEB, 0xFE10, 0xFE16, 0xFE19, 0xFE19,
6998 0xFE30, 0xFE30, 0xFE45, 0xFE46, 0xFE49, 0xFE4C, 0xFE50, 0xFE52,
6999 0xFE54, 0xFE57, 0xFE5F, 0xFE61, 0xFE68, 0xFE68, 0xFE6A, 0xFE6B,
7000 0xFF01, 0xFF03, 0xFF05, 0xFF07, 0xFF0A, 0xFF0A, 0xFF0C, 0xFF0C,
7001 0xFF0E, 0xFF0F, 0xFF1A, 0xFF1B, 0xFF1F, 0xFF20, 0xFF3C, 0xFF3C,
7002 0xFF61, 0xFF61, 0xFF64, 0xFF65, 0x10100, 0x10102, 0x1039F, 0x1039F,
7003 0x103D0, 0x103D0, 0x1056F, 0x1056F, 0x10857, 0x10857, 0x1091F, 0x1091F,
7004 0x1093F, 0x1093F, 0x10A50, 0x10A58, 0x10A7F, 0x10A7F, 0x10AF0, 0x10AF6,
7005 0x10B39, 0x10B3F, 0x10B99, 0x10B9C, 0x10F55, 0x10F59, 0x10F86, 0x10F89,
7006 0x11047, 0x1104D, 0x110BB, 0x110BC, 0x110BE, 0x110C1, 0x11140, 0x11143,
7007 0x11174, 0x11175, 0x111C5, 0x111C8, 0x111CD, 0x111CD, 0x111DB, 0x111DB,
7008 0x111DD, 0x111DF, 0x11238, 0x1123D, 0x112A9, 0x112A9, 0x1144B, 0x1144F,
7009 0x1145A, 0x1145B, 0x1145D, 0x1145D, 0x114C6, 0x114C6, 0x115C1, 0x115D7,
7010 0x11641, 0x11643, 0x11660, 0x1166C, 0x116B9, 0x116B9, 0x1173C, 0x1173E,
7011 0x1183B, 0x1183B, 0x11944, 0x11946, 0x119E2, 0x119E2, 0x11A3F, 0x11A46,
7012 0x11A9A, 0x11A9C, 0x11A9E, 0x11AA2, 0x11B00, 0x11B09, 0x11C41, 0x11C45,
7013 0x11C70, 0x11C71, 0x11EF7, 0x11EF8, 0x11F43, 0x11F4F, 0x11FFF, 0x11FFF,
7014 0x12470, 0x12474, 0x12FF1, 0x12FF2, 0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5,
7015 0x16B37, 0x16B3B, 0x16B44, 0x16B44, 0x16E97, 0x16E9A, 0x16FE2, 0x16FE2,
7016 0x1BC9F, 0x1BC9F, 0x1DA87, 0x1DA8B, 0x1E95E, 0x1E95F,
7017 // #33 (3620+79): gc=Open_Punctuation:Ps
7018 0x0028, 0x0028, 0x005B, 0x005B, 0x007B, 0x007B, 0x0F3A, 0x0F3A,
7019 0x0F3C, 0x0F3C, 0x169B, 0x169B, 0x201A, 0x201A, 0x201E, 0x201E,
7020 0x2045, 0x2045, 0x207D, 0x207D, 0x208D, 0x208D, 0x2308, 0x2308,
7021 0x230A, 0x230A, 0x2329, 0x2329, 0x2768, 0x2768, 0x276A, 0x276A,
7022 0x276C, 0x276C, 0x276E, 0x276E, 0x2770, 0x2770, 0x2772, 0x2772,
7023 0x2774, 0x2774, 0x27C5, 0x27C5, 0x27E6, 0x27E6, 0x27E8, 0x27E8,
7024 0x27EA, 0x27EA, 0x27EC, 0x27EC, 0x27EE, 0x27EE, 0x2983, 0x2983,
7025 0x2985, 0x2985, 0x2987, 0x2987, 0x2989, 0x2989, 0x298B, 0x298B,
7026 0x298D, 0x298D, 0x298F, 0x298F, 0x2991, 0x2991, 0x2993, 0x2993,
7027 0x2995, 0x2995, 0x2997, 0x2997, 0x29D8, 0x29D8, 0x29DA, 0x29DA,
7028 0x29FC, 0x29FC, 0x2E22, 0x2E22, 0x2E24, 0x2E24, 0x2E26, 0x2E26,
7029 0x2E28, 0x2E28, 0x2E42, 0x2E42, 0x2E55, 0x2E55, 0x2E57, 0x2E57,
7030 0x2E59, 0x2E59, 0x2E5B, 0x2E5B, 0x3008, 0x3008, 0x300A, 0x300A,
7031 0x300C, 0x300C, 0x300E, 0x300E, 0x3010, 0x3010, 0x3014, 0x3014,
7032 0x3016, 0x3016, 0x3018, 0x3018, 0x301A, 0x301A, 0x301D, 0x301D,
7033 0xFD3F, 0xFD3F, 0xFE17, 0xFE17, 0xFE35, 0xFE35, 0xFE37, 0xFE37,
7034 0xFE39, 0xFE39, 0xFE3B, 0xFE3B, 0xFE3D, 0xFE3D, 0xFE3F, 0xFE3F,
7035 0xFE41, 0xFE41, 0xFE43, 0xFE43, 0xFE47, 0xFE47, 0xFE59, 0xFE59,
7036 0xFE5B, 0xFE5B, 0xFE5D, 0xFE5D, 0xFF08, 0xFF08, 0xFF3B, 0xFF3B,
7037 0xFF5B, 0xFF5B, 0xFF5F, 0xFF5F, 0xFF62, 0xFF62,
7038 // #34 (3699+301): gc=Symbol:S
7039 // Sc:21 + Sk:31 + Sm:64 + So:185
7040 // #35 (3699+21): gc=Currency_Symbol:Sc
7041 0x0024, 0x0024, 0x00A2, 0x00A5, 0x058F, 0x058F, 0x060B, 0x060B,
7042 0x07FE, 0x07FF, 0x09F2, 0x09F3, 0x09FB, 0x09FB, 0x0AF1, 0x0AF1,
7043 0x0BF9, 0x0BF9, 0x0E3F, 0x0E3F, 0x17DB, 0x17DB, 0x20A0, 0x20C0,
7044 0xA838, 0xA838, 0xFDFC, 0xFDFC, 0xFE69, 0xFE69, 0xFF04, 0xFF04,
7045 0xFFE0, 0xFFE1, 0xFFE5, 0xFFE6, 0x11FDD, 0x11FE0, 0x1E2FF, 0x1E2FF,
7046 0x1ECB0, 0x1ECB0,
7047 // #36 (3720+31): gc=Modifier_Symbol:Sk
7048 0x005E, 0x005E, 0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AF, 0x00AF,
7049 0x00B4, 0x00B4, 0x00B8, 0x00B8, 0x02C2, 0x02C5, 0x02D2, 0x02DF,
7050 0x02E5, 0x02EB, 0x02ED, 0x02ED, 0x02EF, 0x02FF, 0x0375, 0x0375,
7051 0x0384, 0x0385, 0x0888, 0x0888, 0x1FBD, 0x1FBD, 0x1FBF, 0x1FC1,
7052 0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF, 0x1FED, 0x1FEF, 0x1FFD, 0x1FFE,
7053 0x309B, 0x309C, 0xA700, 0xA716, 0xA720, 0xA721, 0xA789, 0xA78A,
7054 0xAB5B, 0xAB5B, 0xAB6A, 0xAB6B, 0xFBB2, 0xFBC2, 0xFF3E, 0xFF3E,
7055 0xFF40, 0xFF40, 0xFFE3, 0xFFE3, 0x1F3FB, 0x1F3FF,
7056 // #37 (3751+64): gc=Math_Symbol:Sm
7057 0x002B, 0x002B, 0x003C, 0x003E, 0x007C, 0x007C, 0x007E, 0x007E,
7058 0x00AC, 0x00AC, 0x00B1, 0x00B1, 0x00D7, 0x00D7, 0x00F7, 0x00F7,
7059 0x03F6, 0x03F6, 0x0606, 0x0608, 0x2044, 0x2044, 0x2052, 0x2052,
7060 0x207A, 0x207C, 0x208A, 0x208C, 0x2118, 0x2118, 0x2140, 0x2144,
7061 0x214B, 0x214B, 0x2190, 0x2194, 0x219A, 0x219B, 0x21A0, 0x21A0,
7062 0x21A3, 0x21A3, 0x21A6, 0x21A6, 0x21AE, 0x21AE, 0x21CE, 0x21CF,
7063 0x21D2, 0x21D2, 0x21D4, 0x21D4, 0x21F4, 0x22FF, 0x2320, 0x2321,
7064 0x237C, 0x237C, 0x239B, 0x23B3, 0x23DC, 0x23E1, 0x25B7, 0x25B7,
7065 0x25C1, 0x25C1, 0x25F8, 0x25FF, 0x266F, 0x266F, 0x27C0, 0x27C4,
7066 0x27C7, 0x27E5, 0x27F0, 0x27FF, 0x2900, 0x2982, 0x2999, 0x29D7,
7067 0x29DC, 0x29FB, 0x29FE, 0x2AFF, 0x2B30, 0x2B44, 0x2B47, 0x2B4C,
7068 0xFB29, 0xFB29, 0xFE62, 0xFE62, 0xFE64, 0xFE66, 0xFF0B, 0xFF0B,
7069 0xFF1C, 0xFF1E, 0xFF5C, 0xFF5C, 0xFF5E, 0xFF5E, 0xFFE2, 0xFFE2,
7070 0xFFE9, 0xFFEC, 0x1D6C1, 0x1D6C1, 0x1D6DB, 0x1D6DB, 0x1D6FB, 0x1D6FB,
7071 0x1D715, 0x1D715, 0x1D735, 0x1D735, 0x1D74F, 0x1D74F, 0x1D76F, 0x1D76F,
7072 0x1D789, 0x1D789, 0x1D7A9, 0x1D7A9, 0x1D7C3, 0x1D7C3, 0x1EEF0, 0x1EEF1,
7073 // #38 (3815+185): gc=Other_Symbol:So
7074 0x00A6, 0x00A6, 0x00A9, 0x00A9, 0x00AE, 0x00AE, 0x00B0, 0x00B0,
7075 0x0482, 0x0482, 0x058D, 0x058E, 0x060E, 0x060F, 0x06DE, 0x06DE,
7076 0x06E9, 0x06E9, 0x06FD, 0x06FE, 0x07F6, 0x07F6, 0x09FA, 0x09FA,
7077 0x0B70, 0x0B70, 0x0BF3, 0x0BF8, 0x0BFA, 0x0BFA, 0x0C7F, 0x0C7F,
7078 0x0D4F, 0x0D4F, 0x0D79, 0x0D79, 0x0F01, 0x0F03, 0x0F13, 0x0F13,
7079 0x0F15, 0x0F17, 0x0F1A, 0x0F1F, 0x0F34, 0x0F34, 0x0F36, 0x0F36,
7080 0x0F38, 0x0F38, 0x0FBE, 0x0FC5, 0x0FC7, 0x0FCC, 0x0FCE, 0x0FCF,
7081 0x0FD5, 0x0FD8, 0x109E, 0x109F, 0x1390, 0x1399, 0x166D, 0x166D,
7082 0x1940, 0x1940, 0x19DE, 0x19FF, 0x1B61, 0x1B6A, 0x1B74, 0x1B7C,
7083 0x2100, 0x2101, 0x2103, 0x2106, 0x2108, 0x2109, 0x2114, 0x2114,
7084 0x2116, 0x2117, 0x211E, 0x2123, 0x2125, 0x2125, 0x2127, 0x2127,
7085 0x2129, 0x2129, 0x212E, 0x212E, 0x213A, 0x213B, 0x214A, 0x214A,
7086 0x214C, 0x214D, 0x214F, 0x214F, 0x218A, 0x218B, 0x2195, 0x2199,
7087 0x219C, 0x219F, 0x21A1, 0x21A2, 0x21A4, 0x21A5, 0x21A7, 0x21AD,
7088 0x21AF, 0x21CD, 0x21D0, 0x21D1, 0x21D3, 0x21D3, 0x21D5, 0x21F3,
7089 0x2300, 0x2307, 0x230C, 0x231F, 0x2322, 0x2328, 0x232B, 0x237B,
7090 0x237D, 0x239A, 0x23B4, 0x23DB, 0x23E2, 0x2426, 0x2440, 0x244A,
7091 0x249C, 0x24E9, 0x2500, 0x25B6, 0x25B8, 0x25C0, 0x25C2, 0x25F7,
7092 0x2600, 0x266E, 0x2670, 0x2767, 0x2794, 0x27BF, 0x2800, 0x28FF,
7093 0x2B00, 0x2B2F, 0x2B45, 0x2B46, 0x2B4D, 0x2B73, 0x2B76, 0x2B95,
7094 0x2B97, 0x2BFF, 0x2CE5, 0x2CEA, 0x2E50, 0x2E51, 0x2E80, 0x2E99,
7095 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x2FF0, 0x2FFF, 0x3004, 0x3004,
7096 0x3012, 0x3013, 0x3020, 0x3020, 0x3036, 0x3037, 0x303E, 0x303F,
7097 0x3190, 0x3191, 0x3196, 0x319F, 0x31C0, 0x31E3, 0x31EF, 0x31EF,
7098 0x3200, 0x321E, 0x322A, 0x3247, 0x3250, 0x3250, 0x3260, 0x327F,
7099 0x328A, 0x32B0, 0x32C0, 0x33FF, 0x4DC0, 0x4DFF, 0xA490, 0xA4C6,
7100 0xA828, 0xA82B, 0xA836, 0xA837, 0xA839, 0xA839, 0xAA77, 0xAA79,
7101 0xFD40, 0xFD4F, 0xFDCF, 0xFDCF, 0xFDFD, 0xFDFF, 0xFFE4, 0xFFE4,
7102 0xFFE8, 0xFFE8, 0xFFED, 0xFFEE, 0xFFFC, 0xFFFD, 0x10137, 0x1013F,
7103 0x10179, 0x10189, 0x1018C, 0x1018E, 0x10190, 0x1019C, 0x101A0, 0x101A0,
7104 0x101D0, 0x101FC, 0x10877, 0x10878, 0x10AC8, 0x10AC8, 0x1173F, 0x1173F,
7105 0x11FD5, 0x11FDC, 0x11FE1, 0x11FF1, 0x16B3C, 0x16B3F, 0x16B45, 0x16B45,
7106 0x1BC9C, 0x1BC9C, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5, 0x1D100, 0x1D126,
7107 0x1D129, 0x1D164, 0x1D16A, 0x1D16C, 0x1D183, 0x1D184, 0x1D18C, 0x1D1A9,
7108 0x1D1AE, 0x1D1EA, 0x1D200, 0x1D241, 0x1D245, 0x1D245, 0x1D300, 0x1D356,
7109 0x1D800, 0x1D9FF, 0x1DA37, 0x1DA3A, 0x1DA6D, 0x1DA74, 0x1DA76, 0x1DA83,
7110 0x1DA85, 0x1DA86, 0x1E14F, 0x1E14F, 0x1ECAC, 0x1ECAC, 0x1ED2E, 0x1ED2E,
7111 0x1F000, 0x1F02B, 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF,
7112 0x1F0C1, 0x1F0CF, 0x1F0D1, 0x1F0F5, 0x1F10D, 0x1F1AD, 0x1F1E6, 0x1F202,
7113 0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F250, 0x1F251, 0x1F260, 0x1F265,
7114 0x1F300, 0x1F3FA, 0x1F400, 0x1F6D7, 0x1F6DC, 0x1F6EC, 0x1F6F0, 0x1F6FC,
7115 0x1F700, 0x1F776, 0x1F77B, 0x1F7D9, 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0,
7116 0x1F800, 0x1F80B, 0x1F810, 0x1F847, 0x1F850, 0x1F859, 0x1F860, 0x1F887,
7117 0x1F890, 0x1F8AD, 0x1F8B0, 0x1F8B1, 0x1F900, 0x1FA53, 0x1FA60, 0x1FA6D,
7118 0x1FA70, 0x1FA7C, 0x1FA80, 0x1FA88, 0x1FA90, 0x1FABD, 0x1FABF, 0x1FAC5,
7119 0x1FACE, 0x1FADB, 0x1FAE0, 0x1FAE8, 0x1FAF0, 0x1FAF8, 0x1FB00, 0x1FB92,
7120 0x1FB94, 0x1FBCA,
7121 // #39 (4000+9): gc=Separator:Z
7122 // Zl:1 + Zp:1 + Zs:7
7123 // #40 (4000+1): gc=Line_Separator:Zl
7124 0x2028, 0x2028,
7125 // #41 (4001+1): gc=Paragraph_Separator:Zp
7126 0x2029, 0x2029,
7127 // #42 (4002+7): gc=Space_Separator:Zs
7128 0x0020, 0x0020, 0x00A0, 0x00A0, 0x1680, 0x1680, 0x2000, 0x200A,
7129 0x202F, 0x202F, 0x205F, 0x205F, 0x3000, 0x3000,
7130 // #43 (4009+1): bp=ASCII
7131 0x0000, 0x007F,
7132 // #44 (4010+3): bp=ASCII_Hex_Digit:AHex
7133 0x0030, 0x0039, 0x0041, 0x0046, 0x0061, 0x0066,
7134 // #45 (4013+733): bp=Alphabetic:Alpha
7135 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5,
7136 0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1,
7137 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE,
7138 0x0345, 0x0345, 0x0370, 0x0374, 0x0376, 0x0377, 0x037A, 0x037D,
7139 0x037F, 0x037F, 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C,
7140 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F,
7141 0x0531, 0x0556, 0x0559, 0x0559, 0x0560, 0x0588, 0x05B0, 0x05BD,
7142 0x05BF, 0x05BF, 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7,
7143 0x05D0, 0x05EA, 0x05EF, 0x05F2, 0x0610, 0x061A, 0x0620, 0x0657,
7144 0x0659, 0x065F, 0x066E, 0x06D3, 0x06D5, 0x06DC, 0x06E1, 0x06E8,
7145 0x06ED, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x073F,
7146 0x074D, 0x07B1, 0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA,
7147 0x0800, 0x0817, 0x081A, 0x082C, 0x0840, 0x0858, 0x0860, 0x086A,
7148 0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9, 0x08D4, 0x08DF,
7149 0x08E3, 0x08E9, 0x08F0, 0x093B, 0x093D, 0x094C, 0x094E, 0x0950,
7150 0x0955, 0x0963, 0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990,
7151 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9,
7152 0x09BD, 0x09C4, 0x09C7, 0x09C8, 0x09CB, 0x09CC, 0x09CE, 0x09CE,
7153 0x09D7, 0x09D7, 0x09DC, 0x09DD, 0x09DF, 0x09E3, 0x09F0, 0x09F1,
7154 0x09FC, 0x09FC, 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10,
7155 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36,
7156 0x0A38, 0x0A39, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4C,
7157 0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A70, 0x0A75,
7158 0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
7159 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0AC5,
7160 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACC, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3,
7161 0x0AF9, 0x0AFC, 0x0B01, 0x0B03, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10,
7162 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39,
7163 0x0B3D, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4C, 0x0B56, 0x0B57,
7164 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B71, 0x0B71, 0x0B82, 0x0B83,
7165 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A,
7166 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA,
7167 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC,
7168 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10,
7169 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C44, 0x0C46, 0x0C48,
7170 0x0C4A, 0x0C4C, 0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D,
7171 0x0C60, 0x0C63, 0x0C80, 0x0C83, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90,
7172 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBD, 0x0CC4,
7173 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCC, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE,
7174 0x0CE0, 0x0CE3, 0x0CF1, 0x0CF3, 0x0D00, 0x0D0C, 0x0D0E, 0x0D10,
7175 0x0D12, 0x0D3A, 0x0D3D, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4C,
7176 0x0D4E, 0x0D4E, 0x0D54, 0x0D57, 0x0D5F, 0x0D63, 0x0D7A, 0x0D7F,
7177 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB,
7178 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCF, 0x0DD4, 0x0DD6, 0x0DD6,
7179 0x0DD8, 0x0DDF, 0x0DF2, 0x0DF3, 0x0E01, 0x0E3A, 0x0E40, 0x0E46,
7180 0x0E4D, 0x0E4D, 0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A,
7181 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB9, 0x0EBB, 0x0EBD,
7182 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0ECD, 0x0ECD, 0x0EDC, 0x0EDF,
7183 0x0F00, 0x0F00, 0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F83,
7184 0x0F88, 0x0F97, 0x0F99, 0x0FBC, 0x1000, 0x1036, 0x1038, 0x1038,
7185 0x103B, 0x103F, 0x1050, 0x108F, 0x109A, 0x109D, 0x10A0, 0x10C5,
7186 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, 0x10FC, 0x1248,
7187 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, 0x125A, 0x125D,
7188 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, 0x12B2, 0x12B5,
7189 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5, 0x12C8, 0x12D6,
7190 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A, 0x1380, 0x138F,
7191 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1401, 0x166C, 0x166F, 0x167F,
7192 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16EE, 0x16F8, 0x1700, 0x1713,
7193 0x171F, 0x1733, 0x1740, 0x1753, 0x1760, 0x176C, 0x176E, 0x1770,
7194 0x1772, 0x1773, 0x1780, 0x17B3, 0x17B6, 0x17C8, 0x17D7, 0x17D7,
7195 0x17DC, 0x17DC, 0x1820, 0x1878, 0x1880, 0x18AA, 0x18B0, 0x18F5,
7196 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x1938, 0x1950, 0x196D,
7197 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9, 0x1A00, 0x1A1B,
7198 0x1A20, 0x1A5E, 0x1A61, 0x1A74, 0x1AA7, 0x1AA7, 0x1ABF, 0x1AC0,
7199 0x1ACC, 0x1ACE, 0x1B00, 0x1B33, 0x1B35, 0x1B43, 0x1B45, 0x1B4C,
7200 0x1B80, 0x1BA9, 0x1BAC, 0x1BAF, 0x1BBA, 0x1BE5, 0x1BE7, 0x1BF1,
7201 0x1C00, 0x1C36, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C7D, 0x1C80, 0x1C88,
7202 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC, 0x1CEE, 0x1CF3,
7203 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF, 0x1DE7, 0x1DF4,
7204 0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D,
7205 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D,
7206 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE,
7207 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB,
7208 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, 0x2071, 0x2071,
7209 0x207F, 0x207F, 0x2090, 0x209C, 0x2102, 0x2102, 0x2107, 0x2107,
7210 0x210A, 0x2113, 0x2115, 0x2115, 0x2119, 0x211D, 0x2124, 0x2124,
7211 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D, 0x212F, 0x2139,
7212 0x213C, 0x213F, 0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x2188,
7213 0x24B6, 0x24E9, 0x2C00, 0x2CE4, 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3,
7214 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0x2D30, 0x2D67,
7215 0x2D6F, 0x2D6F, 0x2D80, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE,
7216 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE,
7217 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0x2DE0, 0x2DFF, 0x2E2F, 0x2E2F,
7218 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303C,
7219 0x3041, 0x3096, 0x309D, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF,
7220 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF,
7221 0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C,
7222 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E, 0xA674, 0xA67B,
7223 0xA67F, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788, 0xA78B, 0xA7CA,
7224 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA805,
7225 0xA807, 0xA827, 0xA840, 0xA873, 0xA880, 0xA8C3, 0xA8C5, 0xA8C5,
7226 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FF, 0xA90A, 0xA92A,
7227 0xA930, 0xA952, 0xA960, 0xA97C, 0xA980, 0xA9B2, 0xA9B4, 0xA9BF,
7228 0xA9CF, 0xA9CF, 0xA9E0, 0xA9EF, 0xA9FA, 0xA9FE, 0xAA00, 0xAA36,
7229 0xAA40, 0xAA4D, 0xAA60, 0xAA76, 0xAA7A, 0xAABE, 0xAAC0, 0xAAC0,
7230 0xAAC2, 0xAAC2, 0xAADB, 0xAADD, 0xAAE0, 0xAAEF, 0xAAF2, 0xAAF5,
7231 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16, 0xAB20, 0xAB26,
7232 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, 0xAB5C, 0xAB69, 0xAB70, 0xABEA,
7233 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D,
7234 0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB28,
7235 0xFB2A, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41,
7236 0xFB43, 0xFB44, 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F,
7237 0xFD92, 0xFDC7, 0xFDF0, 0xFDFB, 0xFE70, 0xFE74, 0xFE76, 0xFEFC,
7238 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0xFF66, 0xFFBE, 0xFFC2, 0xFFC7,
7239 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0x10000, 0x1000B,
7240 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D, 0x1003F, 0x1004D,
7241 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10140, 0x10174, 0x10280, 0x1029C,
7242 0x102A0, 0x102D0, 0x10300, 0x1031F, 0x1032D, 0x1034A, 0x10350, 0x1037A,
7243 0x10380, 0x1039D, 0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x103D1, 0x103D5,
7244 0x10400, 0x1049D, 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527,
7245 0x10530, 0x10563, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592,
7246 0x10594, 0x10595, 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9,
7247 0x105BB, 0x105BC, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767,
7248 0x10780, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805,
7249 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C,
7250 0x1083F, 0x10855, 0x10860, 0x10876, 0x10880, 0x1089E, 0x108E0, 0x108F2,
7251 0x108F4, 0x108F5, 0x10900, 0x10915, 0x10920, 0x10939, 0x10980, 0x109B7,
7252 0x109BE, 0x109BF, 0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13,
7253 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A60, 0x10A7C, 0x10A80, 0x10A9C,
7254 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE4, 0x10B00, 0x10B35, 0x10B40, 0x10B55,
7255 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48, 0x10C80, 0x10CB2,
7256 0x10CC0, 0x10CF2, 0x10D00, 0x10D27, 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC,
7257 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27, 0x10F30, 0x10F45,
7258 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, 0x11000, 0x11045,
7259 0x11071, 0x11075, 0x11080, 0x110B8, 0x110C2, 0x110C2, 0x110D0, 0x110E8,
7260 0x11100, 0x11132, 0x11144, 0x11147, 0x11150, 0x11172, 0x11176, 0x11176,
7261 0x11180, 0x111BF, 0x111C1, 0x111C4, 0x111CE, 0x111CF, 0x111DA, 0x111DA,
7262 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x11234, 0x11237, 0x11237,
7263 0x1123E, 0x11241, 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D,
7264 0x1128F, 0x1129D, 0x1129F, 0x112A8, 0x112B0, 0x112E8, 0x11300, 0x11303,
7265 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330,
7266 0x11332, 0x11333, 0x11335, 0x11339, 0x1133D, 0x11344, 0x11347, 0x11348,
7267 0x1134B, 0x1134C, 0x11350, 0x11350, 0x11357, 0x11357, 0x1135D, 0x11363,
7268 0x11400, 0x11441, 0x11443, 0x11445, 0x11447, 0x1144A, 0x1145F, 0x11461,
7269 0x11480, 0x114C1, 0x114C4, 0x114C5, 0x114C7, 0x114C7, 0x11580, 0x115B5,
7270 0x115B8, 0x115BE, 0x115D8, 0x115DD, 0x11600, 0x1163E, 0x11640, 0x11640,
7271 0x11644, 0x11644, 0x11680, 0x116B5, 0x116B8, 0x116B8, 0x11700, 0x1171A,
7272 0x1171D, 0x1172A, 0x11740, 0x11746, 0x11800, 0x11838, 0x118A0, 0x118DF,
7273 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916,
7274 0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x1193C, 0x1193F, 0x11942,
7275 0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119DF, 0x119E1, 0x119E1,
7276 0x119E3, 0x119E4, 0x11A00, 0x11A32, 0x11A35, 0x11A3E, 0x11A50, 0x11A97,
7277 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C36,
7278 0x11C38, 0x11C3E, 0x11C40, 0x11C40, 0x11C72, 0x11C8F, 0x11C92, 0x11CA7,
7279 0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36,
7280 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D41, 0x11D43, 0x11D43,
7281 0x11D46, 0x11D47, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E,
7282 0x11D90, 0x11D91, 0x11D93, 0x11D96, 0x11D98, 0x11D98, 0x11EE0, 0x11EF6,
7283 0x11F00, 0x11F10, 0x11F12, 0x11F3A, 0x11F3E, 0x11F40, 0x11FB0, 0x11FB0,
7284 0x12000, 0x12399, 0x12400, 0x1246E, 0x12480, 0x12543, 0x12F90, 0x12FF0,
7285 0x13000, 0x1342F, 0x13441, 0x13446, 0x14400, 0x14646, 0x16800, 0x16A38,
7286 0x16A40, 0x16A5E, 0x16A70, 0x16ABE, 0x16AD0, 0x16AED, 0x16B00, 0x16B2F,
7287 0x16B40, 0x16B43, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F,
7288 0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1,
7289 0x16FE3, 0x16FE3, 0x16FF0, 0x16FF1, 0x17000, 0x187F7, 0x18800, 0x18CD5,
7290 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE,
7291 0x1B000, 0x1B122, 0x1B132, 0x1B132, 0x1B150, 0x1B152, 0x1B155, 0x1B155,
7292 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C,
7293 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1BC9E, 0x1BC9E, 0x1D400, 0x1D454,
7294 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6,
7295 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3,
7296 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C,
7297 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546,
7298 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0, 0x1D6C2, 0x1D6DA,
7299 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734, 0x1D736, 0x1D74E,
7300 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8, 0x1D7AA, 0x1D7C2,
7301 0x1D7C4, 0x1D7CB, 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A, 0x1E000, 0x1E006,
7302 0x1E008, 0x1E018, 0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026, 0x1E02A,
7303 0x1E030, 0x1E06D, 0x1E08F, 0x1E08F, 0x1E100, 0x1E12C, 0x1E137, 0x1E13D,
7304 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, 0x1E4D0, 0x1E4EB,
7305 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE,
7306 0x1E800, 0x1E8C4, 0x1E900, 0x1E943, 0x1E947, 0x1E947, 0x1E94B, 0x1E94B,
7307 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24,
7308 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39,
7309 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49,
7310 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54,
7311 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D,
7312 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A,
7313 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E,
7314 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9,
7315 0x1EEAB, 0x1EEBB, 0x1F130, 0x1F149, 0x1F150, 0x1F169, 0x1F170, 0x1F189,
7316 0x20000, 0x2A6DF, 0x2A700, 0x2B739, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1,
7317 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D, 0x2F800, 0x2FA1D, 0x30000, 0x3134A,
7318 0x31350, 0x323AF,
7319 // #46 (4746+1): bp=Any
7320 0x0000, 0x10FFFF,
7321 // #47 (4747+0): bp=Assigned
7322
7323 // #48 (4747+4): bp=Bidi_Control:Bidi_C
7324 0x061C, 0x061C, 0x200E, 0x200F, 0x202A, 0x202E, 0x2066, 0x2069,
7325 // #49 (4751+114): bp=Bidi_Mirrored:Bidi_M
7326 0x0028, 0x0029, 0x003C, 0x003C, 0x003E, 0x003E, 0x005B, 0x005B,
7327 0x005D, 0x005D, 0x007B, 0x007B, 0x007D, 0x007D, 0x00AB, 0x00AB,
7328 0x00BB, 0x00BB, 0x0F3A, 0x0F3D, 0x169B, 0x169C, 0x2039, 0x203A,
7329 0x2045, 0x2046, 0x207D, 0x207E, 0x208D, 0x208E, 0x2140, 0x2140,
7330 0x2201, 0x2204, 0x2208, 0x220D, 0x2211, 0x2211, 0x2215, 0x2216,
7331 0x221A, 0x221D, 0x221F, 0x2222, 0x2224, 0x2224, 0x2226, 0x2226,
7332 0x222B, 0x2233, 0x2239, 0x2239, 0x223B, 0x224C, 0x2252, 0x2255,
7333 0x225F, 0x2260, 0x2262, 0x2262, 0x2264, 0x226B, 0x226E, 0x228C,
7334 0x228F, 0x2292, 0x2298, 0x2298, 0x22A2, 0x22A3, 0x22A6, 0x22B8,
7335 0x22BE, 0x22BF, 0x22C9, 0x22CD, 0x22D0, 0x22D1, 0x22D6, 0x22ED,
7336 0x22F0, 0x22FF, 0x2308, 0x230B, 0x2320, 0x2321, 0x2329, 0x232A,
7337 0x2768, 0x2775, 0x27C0, 0x27C0, 0x27C3, 0x27C6, 0x27C8, 0x27C9,
7338 0x27CB, 0x27CD, 0x27D3, 0x27D6, 0x27DC, 0x27DE, 0x27E2, 0x27EF,
7339 0x2983, 0x2998, 0x299B, 0x29A0, 0x29A2, 0x29AF, 0x29B8, 0x29B8,
7340 0x29C0, 0x29C5, 0x29C9, 0x29C9, 0x29CE, 0x29D2, 0x29D4, 0x29D5,
7341 0x29D8, 0x29DC, 0x29E1, 0x29E1, 0x29E3, 0x29E5, 0x29E8, 0x29E9,
7342 0x29F4, 0x29F9, 0x29FC, 0x29FD, 0x2A0A, 0x2A1C, 0x2A1E, 0x2A21,
7343 0x2A24, 0x2A24, 0x2A26, 0x2A26, 0x2A29, 0x2A29, 0x2A2B, 0x2A2E,
7344 0x2A34, 0x2A35, 0x2A3C, 0x2A3E, 0x2A57, 0x2A58, 0x2A64, 0x2A65,
7345 0x2A6A, 0x2A6D, 0x2A6F, 0x2A70, 0x2A73, 0x2A74, 0x2A79, 0x2AA3,
7346 0x2AA6, 0x2AAD, 0x2AAF, 0x2AD6, 0x2ADC, 0x2ADC, 0x2ADE, 0x2ADE,
7347 0x2AE2, 0x2AE6, 0x2AEC, 0x2AEE, 0x2AF3, 0x2AF3, 0x2AF7, 0x2AFB,
7348 0x2AFD, 0x2AFD, 0x2BFE, 0x2BFE, 0x2E02, 0x2E05, 0x2E09, 0x2E0A,
7349 0x2E0C, 0x2E0D, 0x2E1C, 0x2E1D, 0x2E20, 0x2E29, 0x2E55, 0x2E5C,
7350 0x3008, 0x3011, 0x3014, 0x301B, 0xFE59, 0xFE5E, 0xFE64, 0xFE65,
7351 0xFF08, 0xFF09, 0xFF1C, 0xFF1C, 0xFF1E, 0xFF1E, 0xFF3B, 0xFF3B,
7352 0xFF3D, 0xFF3D, 0xFF5B, 0xFF5B, 0xFF5D, 0xFF5D, 0xFF5F, 0xFF60,
7353 0xFF62, 0xFF63, 0x1D6DB, 0x1D6DB, 0x1D715, 0x1D715, 0x1D74F, 0x1D74F,
7354 0x1D789, 0x1D789, 0x1D7C3, 0x1D7C3,
7355 // #50 (4865+437): bp=Case_Ignorable:CI
7356 0x0027, 0x0027, 0x002E, 0x002E, 0x003A, 0x003A, 0x005E, 0x005E,
7357 0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AD, 0x00AD, 0x00AF, 0x00AF,
7358 0x00B4, 0x00B4, 0x00B7, 0x00B8, 0x02B0, 0x036F, 0x0374, 0x0375,
7359 0x037A, 0x037A, 0x0384, 0x0385, 0x0387, 0x0387, 0x0483, 0x0489,
7360 0x0559, 0x0559, 0x055F, 0x055F, 0x0591, 0x05BD, 0x05BF, 0x05BF,
7361 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05F4, 0x05F4,
7362 0x0600, 0x0605, 0x0610, 0x061A, 0x061C, 0x061C, 0x0640, 0x0640,
7363 0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DD, 0x06DF, 0x06E8,
7364 0x06EA, 0x06ED, 0x070F, 0x070F, 0x0711, 0x0711, 0x0730, 0x074A,
7365 0x07A6, 0x07B0, 0x07EB, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD,
7366 0x0816, 0x082D, 0x0859, 0x085B, 0x0888, 0x0888, 0x0890, 0x0891,
7367 0x0898, 0x089F, 0x08C9, 0x0902, 0x093A, 0x093A, 0x093C, 0x093C,
7368 0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957, 0x0962, 0x0963,
7369 0x0971, 0x0971, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09C1, 0x09C4,
7370 0x09CD, 0x09CD, 0x09E2, 0x09E3, 0x09FE, 0x09FE, 0x0A01, 0x0A02,
7371 0x0A3C, 0x0A3C, 0x0A41, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
7372 0x0A51, 0x0A51, 0x0A70, 0x0A71, 0x0A75, 0x0A75, 0x0A81, 0x0A82,
7373 0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5, 0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD,
7374 0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF, 0x0B01, 0x0B01, 0x0B3C, 0x0B3C,
7375 0x0B3F, 0x0B3F, 0x0B41, 0x0B44, 0x0B4D, 0x0B4D, 0x0B55, 0x0B56,
7376 0x0B62, 0x0B63, 0x0B82, 0x0B82, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD,
7377 0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40,
7378 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63,
7379 0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC6, 0x0CC6,
7380 0x0CCC, 0x0CCD, 0x0CE2, 0x0CE3, 0x0D00, 0x0D01, 0x0D3B, 0x0D3C,
7381 0x0D41, 0x0D44, 0x0D4D, 0x0D4D, 0x0D62, 0x0D63, 0x0D81, 0x0D81,
7382 0x0DCA, 0x0DCA, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6, 0x0E31, 0x0E31,
7383 0x0E34, 0x0E3A, 0x0E46, 0x0E4E, 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC,
7384 0x0EC6, 0x0EC6, 0x0EC8, 0x0ECE, 0x0F18, 0x0F19, 0x0F35, 0x0F35,
7385 0x0F37, 0x0F37, 0x0F39, 0x0F39, 0x0F71, 0x0F7E, 0x0F80, 0x0F84,
7386 0x0F86, 0x0F87, 0x0F8D, 0x0F97, 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6,
7387 0x102D, 0x1030, 0x1032, 0x1037, 0x1039, 0x103A, 0x103D, 0x103E,
7388 0x1058, 0x1059, 0x105E, 0x1060, 0x1071, 0x1074, 0x1082, 0x1082,
7389 0x1085, 0x1086, 0x108D, 0x108D, 0x109D, 0x109D, 0x10FC, 0x10FC,
7390 0x135D, 0x135F, 0x1712, 0x1714, 0x1732, 0x1733, 0x1752, 0x1753,
7391 0x1772, 0x1773, 0x17B4, 0x17B5, 0x17B7, 0x17BD, 0x17C6, 0x17C6,
7392 0x17C9, 0x17D3, 0x17D7, 0x17D7, 0x17DD, 0x17DD, 0x180B, 0x180F,
7393 0x1843, 0x1843, 0x1885, 0x1886, 0x18A9, 0x18A9, 0x1920, 0x1922,
7394 0x1927, 0x1928, 0x1932, 0x1932, 0x1939, 0x193B, 0x1A17, 0x1A18,
7395 0x1A1B, 0x1A1B, 0x1A56, 0x1A56, 0x1A58, 0x1A5E, 0x1A60, 0x1A60,
7396 0x1A62, 0x1A62, 0x1A65, 0x1A6C, 0x1A73, 0x1A7C, 0x1A7F, 0x1A7F,
7397 0x1AA7, 0x1AA7, 0x1AB0, 0x1ACE, 0x1B00, 0x1B03, 0x1B34, 0x1B34,
7398 0x1B36, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42, 0x1B6B, 0x1B73,
7399 0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9, 0x1BAB, 0x1BAD,
7400 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED, 0x1BEF, 0x1BF1,
7401 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1C78, 0x1C7D, 0x1CD0, 0x1CD2,
7402 0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4,
7403 0x1CF8, 0x1CF9, 0x1D2C, 0x1D6A, 0x1D78, 0x1D78, 0x1D9B, 0x1DFF,
7404 0x1FBD, 0x1FBD, 0x1FBF, 0x1FC1, 0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF,
7405 0x1FED, 0x1FEF, 0x1FFD, 0x1FFE, 0x200B, 0x200F, 0x2018, 0x2019,
7406 0x2024, 0x2024, 0x2027, 0x2027, 0x202A, 0x202E, 0x2060, 0x2064,
7407 0x2066, 0x206F, 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C,
7408 0x20D0, 0x20F0, 0x2C7C, 0x2C7D, 0x2CEF, 0x2CF1, 0x2D6F, 0x2D6F,
7409 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, 0x2E2F, 0x2E2F, 0x3005, 0x3005,
7410 0x302A, 0x302D, 0x3031, 0x3035, 0x303B, 0x303B, 0x3099, 0x309E,
7411 0x30FC, 0x30FE, 0xA015, 0xA015, 0xA4F8, 0xA4FD, 0xA60C, 0xA60C,
7412 0xA66F, 0xA672, 0xA674, 0xA67D, 0xA67F, 0xA67F, 0xA69C, 0xA69F,
7413 0xA6F0, 0xA6F1, 0xA700, 0xA721, 0xA770, 0xA770, 0xA788, 0xA78A,
7414 0xA7F2, 0xA7F4, 0xA7F8, 0xA7F9, 0xA802, 0xA802, 0xA806, 0xA806,
7415 0xA80B, 0xA80B, 0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5,
7416 0xA8E0, 0xA8F1, 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA951,
7417 0xA980, 0xA982, 0xA9B3, 0xA9B3, 0xA9B6, 0xA9B9, 0xA9BC, 0xA9BD,
7418 0xA9CF, 0xA9CF, 0xA9E5, 0xA9E6, 0xAA29, 0xAA2E, 0xAA31, 0xAA32,
7419 0xAA35, 0xAA36, 0xAA43, 0xAA43, 0xAA4C, 0xAA4C, 0xAA70, 0xAA70,
7420 0xAA7C, 0xAA7C, 0xAAB0, 0xAAB0, 0xAAB2, 0xAAB4, 0xAAB7, 0xAAB8,
7421 0xAABE, 0xAABF, 0xAAC1, 0xAAC1, 0xAADD, 0xAADD, 0xAAEC, 0xAAED,
7422 0xAAF3, 0xAAF4, 0xAAF6, 0xAAF6, 0xAB5B, 0xAB5F, 0xAB69, 0xAB6B,
7423 0xABE5, 0xABE5, 0xABE8, 0xABE8, 0xABED, 0xABED, 0xFB1E, 0xFB1E,
7424 0xFBB2, 0xFBC2, 0xFE00, 0xFE0F, 0xFE13, 0xFE13, 0xFE20, 0xFE2F,
7425 0xFE52, 0xFE52, 0xFE55, 0xFE55, 0xFEFF, 0xFEFF, 0xFF07, 0xFF07,
7426 0xFF0E, 0xFF0E, 0xFF1A, 0xFF1A, 0xFF3E, 0xFF3E, 0xFF40, 0xFF40,
7427 0xFF70, 0xFF70, 0xFF9E, 0xFF9F, 0xFFE3, 0xFFE3, 0xFFF9, 0xFFFB,
7428 0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10780, 0x10785,
7429 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10A01, 0x10A03, 0x10A05, 0x10A06,
7430 0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, 0x10AE5, 0x10AE6,
7431 0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10EFD, 0x10EFF, 0x10F46, 0x10F50,
7432 0x10F82, 0x10F85, 0x11001, 0x11001, 0x11038, 0x11046, 0x11070, 0x11070,
7433 0x11073, 0x11074, 0x1107F, 0x11081, 0x110B3, 0x110B6, 0x110B9, 0x110BA,
7434 0x110BD, 0x110BD, 0x110C2, 0x110C2, 0x110CD, 0x110CD, 0x11100, 0x11102,
7435 0x11127, 0x1112B, 0x1112D, 0x11134, 0x11173, 0x11173, 0x11180, 0x11181,
7436 0x111B6, 0x111BE, 0x111C9, 0x111CC, 0x111CF, 0x111CF, 0x1122F, 0x11231,
7437 0x11234, 0x11234, 0x11236, 0x11237, 0x1123E, 0x1123E, 0x11241, 0x11241,
7438 0x112DF, 0x112DF, 0x112E3, 0x112EA, 0x11300, 0x11301, 0x1133B, 0x1133C,
7439 0x11340, 0x11340, 0x11366, 0x1136C, 0x11370, 0x11374, 0x11438, 0x1143F,
7440 0x11442, 0x11444, 0x11446, 0x11446, 0x1145E, 0x1145E, 0x114B3, 0x114B8,
7441 0x114BA, 0x114BA, 0x114BF, 0x114C0, 0x114C2, 0x114C3, 0x115B2, 0x115B5,
7442 0x115BC, 0x115BD, 0x115BF, 0x115C0, 0x115DC, 0x115DD, 0x11633, 0x1163A,
7443 0x1163D, 0x1163D, 0x1163F, 0x11640, 0x116AB, 0x116AB, 0x116AD, 0x116AD,
7444 0x116B0, 0x116B5, 0x116B7, 0x116B7, 0x1171D, 0x1171F, 0x11722, 0x11725,
7445 0x11727, 0x1172B, 0x1182F, 0x11837, 0x11839, 0x1183A, 0x1193B, 0x1193C,
7446 0x1193E, 0x1193E, 0x11943, 0x11943, 0x119D4, 0x119D7, 0x119DA, 0x119DB,
7447 0x119E0, 0x119E0, 0x11A01, 0x11A0A, 0x11A33, 0x11A38, 0x11A3B, 0x11A3E,
7448 0x11A47, 0x11A47, 0x11A51, 0x11A56, 0x11A59, 0x11A5B, 0x11A8A, 0x11A96,
7449 0x11A98, 0x11A99, 0x11C30, 0x11C36, 0x11C38, 0x11C3D, 0x11C3F, 0x11C3F,
7450 0x11C92, 0x11CA7, 0x11CAA, 0x11CB0, 0x11CB2, 0x11CB3, 0x11CB5, 0x11CB6,
7451 0x11D31, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D45,
7452 0x11D47, 0x11D47, 0x11D90, 0x11D91, 0x11D95, 0x11D95, 0x11D97, 0x11D97,
7453 0x11EF3, 0x11EF4, 0x11F00, 0x11F01, 0x11F36, 0x11F3A, 0x11F40, 0x11F40,
7454 0x11F42, 0x11F42, 0x13430, 0x13440, 0x13447, 0x13455, 0x16AF0, 0x16AF4,
7455 0x16B30, 0x16B36, 0x16B40, 0x16B43, 0x16F4F, 0x16F4F, 0x16F8F, 0x16F9F,
7456 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE4, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB,
7457 0x1AFFD, 0x1AFFE, 0x1BC9D, 0x1BC9E, 0x1BCA0, 0x1BCA3, 0x1CF00, 0x1CF2D,
7458 0x1CF30, 0x1CF46, 0x1D167, 0x1D169, 0x1D173, 0x1D182, 0x1D185, 0x1D18B,
7459 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, 0x1DA00, 0x1DA36, 0x1DA3B, 0x1DA6C,
7460 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F, 0x1DAA1, 0x1DAAF,
7461 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, 0x1E023, 0x1E024,
7462 0x1E026, 0x1E02A, 0x1E030, 0x1E06D, 0x1E08F, 0x1E08F, 0x1E130, 0x1E13D,
7463 0x1E2AE, 0x1E2AE, 0x1E2EC, 0x1E2EF, 0x1E4EB, 0x1E4EF, 0x1E8D0, 0x1E8D6,
7464 0x1E944, 0x1E94B, 0x1F3FB, 0x1F3FF, 0xE0001, 0xE0001, 0xE0020, 0xE007F,
7465 0xE0100, 0xE01EF,
7466 // #51 (5302+157): bp=Cased
7467 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5,
7468 0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x01BA,
7469 0x01BC, 0x01BF, 0x01C4, 0x0293, 0x0295, 0x02B8, 0x02C0, 0x02C1,
7470 0x02E0, 0x02E4, 0x0345, 0x0345, 0x0370, 0x0373, 0x0376, 0x0377,
7471 0x037A, 0x037D, 0x037F, 0x037F, 0x0386, 0x0386, 0x0388, 0x038A,
7472 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481,
7473 0x048A, 0x052F, 0x0531, 0x0556, 0x0560, 0x0588, 0x10A0, 0x10C5,
7474 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, 0x10FC, 0x10FF,
7475 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1C90, 0x1CBA,
7476 0x1CBD, 0x1CBF, 0x1D00, 0x1DBF, 0x1E00, 0x1F15, 0x1F18, 0x1F1D,
7477 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59,
7478 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4,
7479 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC,
7480 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4,
7481 0x1FF6, 0x1FFC, 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C,
7482 0x2102, 0x2102, 0x2107, 0x2107, 0x210A, 0x2113, 0x2115, 0x2115,
7483 0x2119, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128,
7484 0x212A, 0x212D, 0x212F, 0x2134, 0x2139, 0x2139, 0x213C, 0x213F,
7485 0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x217F, 0x2183, 0x2184,
7486 0x24B6, 0x24E9, 0x2C00, 0x2CE4, 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3,
7487 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0xA640, 0xA66D,
7488 0xA680, 0xA69D, 0xA722, 0xA787, 0xA78B, 0xA78E, 0xA790, 0xA7CA,
7489 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA7F6,
7490 0xA7F8, 0xA7FA, 0xAB30, 0xAB5A, 0xAB5C, 0xAB69, 0xAB70, 0xABBF,
7491 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A,
7492 0x10400, 0x1044F, 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10570, 0x1057A,
7493 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1,
7494 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10780, 0x10780,
7495 0x10783, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10C80, 0x10CB2,
7496 0x10CC0, 0x10CF2, 0x118A0, 0x118DF, 0x16E40, 0x16E7F, 0x1D400, 0x1D454,
7497 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6,
7498 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3,
7499 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C,
7500 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546,
7501 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0, 0x1D6C2, 0x1D6DA,
7502 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734, 0x1D736, 0x1D74E,
7503 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8, 0x1D7AA, 0x1D7C2,
7504 0x1D7C4, 0x1D7CB, 0x1DF00, 0x1DF09, 0x1DF0B, 0x1DF1E, 0x1DF25, 0x1DF2A,
7505 0x1E030, 0x1E06D, 0x1E900, 0x1E943, 0x1F130, 0x1F149, 0x1F150, 0x1F169,
7506 0x1F170, 0x1F189,
7507 // #52 (5459+622): bp=Changes_When_Casefolded:CWCF
7508 0x0041, 0x005A, 0x00B5, 0x00B5, 0x00C0, 0x00D6, 0x00D8, 0x00DF,
7509 0x0100, 0x0100, 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106,
7510 0x0108, 0x0108, 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E,
7511 0x0110, 0x0110, 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116,
7512 0x0118, 0x0118, 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E,
7513 0x0120, 0x0120, 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126,
7514 0x0128, 0x0128, 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E,
7515 0x0130, 0x0130, 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136,
7516 0x0139, 0x0139, 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F,
7517 0x0141, 0x0141, 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147,
7518 0x0149, 0x014A, 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150,
7519 0x0152, 0x0152, 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158,
7520 0x015A, 0x015A, 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160,
7521 0x0162, 0x0162, 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168,
7522 0x016A, 0x016A, 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170,
7523 0x0172, 0x0172, 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179,
7524 0x017B, 0x017B, 0x017D, 0x017D, 0x017F, 0x017F, 0x0181, 0x0182,
7525 0x0184, 0x0184, 0x0186, 0x0187, 0x0189, 0x018B, 0x018E, 0x0191,
7526 0x0193, 0x0194, 0x0196, 0x0198, 0x019C, 0x019D, 0x019F, 0x01A0,
7527 0x01A2, 0x01A2, 0x01A4, 0x01A4, 0x01A6, 0x01A7, 0x01A9, 0x01A9,
7528 0x01AC, 0x01AC, 0x01AE, 0x01AF, 0x01B1, 0x01B3, 0x01B5, 0x01B5,
7529 0x01B7, 0x01B8, 0x01BC, 0x01BC, 0x01C4, 0x01C5, 0x01C7, 0x01C8,
7530 0x01CA, 0x01CB, 0x01CD, 0x01CD, 0x01CF, 0x01CF, 0x01D1, 0x01D1,
7531 0x01D3, 0x01D3, 0x01D5, 0x01D5, 0x01D7, 0x01D7, 0x01D9, 0x01D9,
7532 0x01DB, 0x01DB, 0x01DE, 0x01DE, 0x01E0, 0x01E0, 0x01E2, 0x01E2,
7533 0x01E4, 0x01E4, 0x01E6, 0x01E6, 0x01E8, 0x01E8, 0x01EA, 0x01EA,
7534 0x01EC, 0x01EC, 0x01EE, 0x01EE, 0x01F1, 0x01F2, 0x01F4, 0x01F4,
7535 0x01F6, 0x01F8, 0x01FA, 0x01FA, 0x01FC, 0x01FC, 0x01FE, 0x01FE,
7536 0x0200, 0x0200, 0x0202, 0x0202, 0x0204, 0x0204, 0x0206, 0x0206,
7537 0x0208, 0x0208, 0x020A, 0x020A, 0x020C, 0x020C, 0x020E, 0x020E,
7538 0x0210, 0x0210, 0x0212, 0x0212, 0x0214, 0x0214, 0x0216, 0x0216,
7539 0x0218, 0x0218, 0x021A, 0x021A, 0x021C, 0x021C, 0x021E, 0x021E,
7540 0x0220, 0x0220, 0x0222, 0x0222, 0x0224, 0x0224, 0x0226, 0x0226,
7541 0x0228, 0x0228, 0x022A, 0x022A, 0x022C, 0x022C, 0x022E, 0x022E,
7542 0x0230, 0x0230, 0x0232, 0x0232, 0x023A, 0x023B, 0x023D, 0x023E,
7543 0x0241, 0x0241, 0x0243, 0x0246, 0x0248, 0x0248, 0x024A, 0x024A,
7544 0x024C, 0x024C, 0x024E, 0x024E, 0x0345, 0x0345, 0x0370, 0x0370,
7545 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F, 0x0386, 0x0386,
7546 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F, 0x0391, 0x03A1,
7547 0x03A3, 0x03AB, 0x03C2, 0x03C2, 0x03CF, 0x03D1, 0x03D5, 0x03D6,
7548 0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE,
7549 0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6,
7550 0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE,
7551 0x03F0, 0x03F1, 0x03F4, 0x03F5, 0x03F7, 0x03F7, 0x03F9, 0x03FA,
7552 0x03FD, 0x042F, 0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464,
7553 0x0466, 0x0466, 0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C,
7554 0x046E, 0x046E, 0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474,
7555 0x0476, 0x0476, 0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C,
7556 0x047E, 0x047E, 0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C,
7557 0x048E, 0x048E, 0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494,
7558 0x0496, 0x0496, 0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C,
7559 0x049E, 0x049E, 0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4,
7560 0x04A6, 0x04A6, 0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC,
7561 0x04AE, 0x04AE, 0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4,
7562 0x04B6, 0x04B6, 0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC,
7563 0x04BE, 0x04BE, 0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5,
7564 0x04C7, 0x04C7, 0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD,
7565 0x04D0, 0x04D0, 0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6,
7566 0x04D8, 0x04D8, 0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE,
7567 0x04E0, 0x04E0, 0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6,
7568 0x04E8, 0x04E8, 0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE,
7569 0x04F0, 0x04F0, 0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6,
7570 0x04F8, 0x04F8, 0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE,
7571 0x0500, 0x0500, 0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506,
7572 0x0508, 0x0508, 0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E,
7573 0x0510, 0x0510, 0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516,
7574 0x0518, 0x0518, 0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E,
7575 0x0520, 0x0520, 0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526,
7576 0x0528, 0x0528, 0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E,
7577 0x0531, 0x0556, 0x0587, 0x0587, 0x10A0, 0x10C5, 0x10C7, 0x10C7,
7578 0x10CD, 0x10CD, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1C90, 0x1CBA,
7579 0x1CBD, 0x1CBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02, 0x1E04, 0x1E04,
7580 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A, 0x1E0C, 0x1E0C,
7581 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12, 0x1E14, 0x1E14,
7582 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A, 0x1E1C, 0x1E1C,
7583 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22, 0x1E24, 0x1E24,
7584 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A, 0x1E2C, 0x1E2C,
7585 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32, 0x1E34, 0x1E34,
7586 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A, 0x1E3C, 0x1E3C,
7587 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42, 0x1E44, 0x1E44,
7588 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A, 0x1E4C, 0x1E4C,
7589 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52, 0x1E54, 0x1E54,
7590 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A, 0x1E5C, 0x1E5C,
7591 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62, 0x1E64, 0x1E64,
7592 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A, 0x1E6C, 0x1E6C,
7593 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72, 0x1E74, 0x1E74,
7594 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A, 0x1E7C, 0x1E7C,
7595 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82, 0x1E84, 0x1E84,
7596 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A, 0x1E8C, 0x1E8C,
7597 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92, 0x1E94, 0x1E94,
7598 0x1E9A, 0x1E9B, 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, 0x1EA2, 0x1EA2,
7599 0x1EA4, 0x1EA4, 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, 0x1EAA, 0x1EAA,
7600 0x1EAC, 0x1EAC, 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, 0x1EB2, 0x1EB2,
7601 0x1EB4, 0x1EB4, 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, 0x1EBA, 0x1EBA,
7602 0x1EBC, 0x1EBC, 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, 0x1EC2, 0x1EC2,
7603 0x1EC4, 0x1EC4, 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, 0x1ECA, 0x1ECA,
7604 0x1ECC, 0x1ECC, 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, 0x1ED2, 0x1ED2,
7605 0x1ED4, 0x1ED4, 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, 0x1EDA, 0x1EDA,
7606 0x1EDC, 0x1EDC, 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, 0x1EE2, 0x1EE2,
7607 0x1EE4, 0x1EE4, 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, 0x1EEA, 0x1EEA,
7608 0x1EEC, 0x1EEC, 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, 0x1EF2, 0x1EF2,
7609 0x1EF4, 0x1EF4, 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, 0x1EFA, 0x1EFA,
7610 0x1EFC, 0x1EFC, 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, 0x1F18, 0x1F1D,
7611 0x1F28, 0x1F2F, 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, 0x1F59, 0x1F59,
7612 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, 0x1F68, 0x1F6F,
7613 0x1F80, 0x1FAF, 0x1FB2, 0x1FB4, 0x1FB7, 0x1FBC, 0x1FC2, 0x1FC4,
7614 0x1FC7, 0x1FCC, 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC, 0x1FF2, 0x1FF4,
7615 0x1FF7, 0x1FFC, 0x2126, 0x2126, 0x212A, 0x212B, 0x2132, 0x2132,
7616 0x2160, 0x216F, 0x2183, 0x2183, 0x24B6, 0x24CF, 0x2C00, 0x2C2F,
7617 0x2C60, 0x2C60, 0x2C62, 0x2C64, 0x2C67, 0x2C67, 0x2C69, 0x2C69,
7618 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70, 0x2C72, 0x2C72, 0x2C75, 0x2C75,
7619 0x2C7E, 0x2C80, 0x2C82, 0x2C82, 0x2C84, 0x2C84, 0x2C86, 0x2C86,
7620 0x2C88, 0x2C88, 0x2C8A, 0x2C8A, 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E,
7621 0x2C90, 0x2C90, 0x2C92, 0x2C92, 0x2C94, 0x2C94, 0x2C96, 0x2C96,
7622 0x2C98, 0x2C98, 0x2C9A, 0x2C9A, 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E,
7623 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2, 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6,
7624 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA, 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE,
7625 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2, 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6,
7626 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA, 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE,
7627 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2, 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6,
7628 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA, 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE,
7629 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2, 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6,
7630 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA, 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE,
7631 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2, 0x2CEB, 0x2CEB, 0x2CED, 0x2CED,
7632 0x2CF2, 0x2CF2, 0xA640, 0xA640, 0xA642, 0xA642, 0xA644, 0xA644,
7633 0xA646, 0xA646, 0xA648, 0xA648, 0xA64A, 0xA64A, 0xA64C, 0xA64C,
7634 0xA64E, 0xA64E, 0xA650, 0xA650, 0xA652, 0xA652, 0xA654, 0xA654,
7635 0xA656, 0xA656, 0xA658, 0xA658, 0xA65A, 0xA65A, 0xA65C, 0xA65C,
7636 0xA65E, 0xA65E, 0xA660, 0xA660, 0xA662, 0xA662, 0xA664, 0xA664,
7637 0xA666, 0xA666, 0xA668, 0xA668, 0xA66A, 0xA66A, 0xA66C, 0xA66C,
7638 0xA680, 0xA680, 0xA682, 0xA682, 0xA684, 0xA684, 0xA686, 0xA686,
7639 0xA688, 0xA688, 0xA68A, 0xA68A, 0xA68C, 0xA68C, 0xA68E, 0xA68E,
7640 0xA690, 0xA690, 0xA692, 0xA692, 0xA694, 0xA694, 0xA696, 0xA696,
7641 0xA698, 0xA698, 0xA69A, 0xA69A, 0xA722, 0xA722, 0xA724, 0xA724,
7642 0xA726, 0xA726, 0xA728, 0xA728, 0xA72A, 0xA72A, 0xA72C, 0xA72C,
7643 0xA72E, 0xA72E, 0xA732, 0xA732, 0xA734, 0xA734, 0xA736, 0xA736,
7644 0xA738, 0xA738, 0xA73A, 0xA73A, 0xA73C, 0xA73C, 0xA73E, 0xA73E,
7645 0xA740, 0xA740, 0xA742, 0xA742, 0xA744, 0xA744, 0xA746, 0xA746,
7646 0xA748, 0xA748, 0xA74A, 0xA74A, 0xA74C, 0xA74C, 0xA74E, 0xA74E,
7647 0xA750, 0xA750, 0xA752, 0xA752, 0xA754, 0xA754, 0xA756, 0xA756,
7648 0xA758, 0xA758, 0xA75A, 0xA75A, 0xA75C, 0xA75C, 0xA75E, 0xA75E,
7649 0xA760, 0xA760, 0xA762, 0xA762, 0xA764, 0xA764, 0xA766, 0xA766,
7650 0xA768, 0xA768, 0xA76A, 0xA76A, 0xA76C, 0xA76C, 0xA76E, 0xA76E,
7651 0xA779, 0xA779, 0xA77B, 0xA77B, 0xA77D, 0xA77E, 0xA780, 0xA780,
7652 0xA782, 0xA782, 0xA784, 0xA784, 0xA786, 0xA786, 0xA78B, 0xA78B,
7653 0xA78D, 0xA78D, 0xA790, 0xA790, 0xA792, 0xA792, 0xA796, 0xA796,
7654 0xA798, 0xA798, 0xA79A, 0xA79A, 0xA79C, 0xA79C, 0xA79E, 0xA79E,
7655 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2, 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6,
7656 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE, 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6,
7657 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA, 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE,
7658 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2, 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9,
7659 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6, 0xA7D8, 0xA7D8, 0xA7F5, 0xA7F5,
7660 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF21, 0xFF3A,
7661 0x10400, 0x10427, 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A,
7662 0x1058C, 0x10592, 0x10594, 0x10595, 0x10C80, 0x10CB2, 0x118A0, 0x118BF,
7663 0x16E40, 0x16E5F, 0x1E900, 0x1E921,
7664 // #53 (6081+131): bp=Changes_When_Casemapped:CWCM
7665 0x0041, 0x005A, 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00C0, 0x00D6,
7666 0x00D8, 0x00F6, 0x00F8, 0x0137, 0x0139, 0x018C, 0x018E, 0x019A,
7667 0x019C, 0x01A9, 0x01AC, 0x01B9, 0x01BC, 0x01BD, 0x01BF, 0x01BF,
7668 0x01C4, 0x0220, 0x0222, 0x0233, 0x023A, 0x0254, 0x0256, 0x0257,
7669 0x0259, 0x0259, 0x025B, 0x025C, 0x0260, 0x0261, 0x0263, 0x0263,
7670 0x0265, 0x0266, 0x0268, 0x026C, 0x026F, 0x026F, 0x0271, 0x0272,
7671 0x0275, 0x0275, 0x027D, 0x027D, 0x0280, 0x0280, 0x0282, 0x0283,
7672 0x0287, 0x028C, 0x0292, 0x0292, 0x029D, 0x029E, 0x0345, 0x0345,
7673 0x0370, 0x0373, 0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F,
7674 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1,
7675 0x03A3, 0x03D1, 0x03D5, 0x03F5, 0x03F7, 0x03FB, 0x03FD, 0x0481,
7676 0x048A, 0x052F, 0x0531, 0x0556, 0x0561, 0x0587, 0x10A0, 0x10C5,
7677 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, 0x10FD, 0x10FF,
7678 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1C90, 0x1CBA,
7679 0x1CBD, 0x1CBF, 0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E,
7680 0x1E00, 0x1E9B, 0x1E9E, 0x1E9E, 0x1EA0, 0x1F15, 0x1F18, 0x1F1D,
7681 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59,
7682 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4,
7683 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC,
7684 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4,
7685 0x1FF6, 0x1FFC, 0x2126, 0x2126, 0x212A, 0x212B, 0x2132, 0x2132,
7686 0x214E, 0x214E, 0x2160, 0x217F, 0x2183, 0x2184, 0x24B6, 0x24E9,
7687 0x2C00, 0x2C70, 0x2C72, 0x2C73, 0x2C75, 0x2C76, 0x2C7E, 0x2CE3,
7688 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27,
7689 0x2D2D, 0x2D2D, 0xA640, 0xA66D, 0xA680, 0xA69B, 0xA722, 0xA72F,
7690 0xA732, 0xA76F, 0xA779, 0xA787, 0xA78B, 0xA78D, 0xA790, 0xA794,
7691 0xA796, 0xA7AE, 0xA7B0, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D6, 0xA7D9,
7692 0xA7F5, 0xA7F6, 0xAB53, 0xAB53, 0xAB70, 0xABBF, 0xFB00, 0xFB06,
7693 0xFB13, 0xFB17, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10400, 0x1044F,
7694 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10570, 0x1057A, 0x1057C, 0x1058A,
7695 0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1, 0x105A3, 0x105B1,
7696 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2,
7697 0x118A0, 0x118DF, 0x16E40, 0x16E7F, 0x1E900, 0x1E943,
7698 // #54 (6212+609): bp=Changes_When_Lowercased:CWL
7699 0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100,
7700 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108,
7701 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110,
7702 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118,
7703 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120,
7704 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128,
7705 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130,
7706 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139,
7707 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141,
7708 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A,
7709 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152,
7710 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A,
7711 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162,
7712 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A,
7713 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172,
7714 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B,
7715 0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187,
7716 0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198,
7717 0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4,
7718 0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF,
7719 0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC,
7720 0x01C4, 0x01C5, 0x01C7, 0x01C8, 0x01CA, 0x01CB, 0x01CD, 0x01CD,
7721 0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5,
7722 0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE,
7723 0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6,
7724 0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE,
7725 0x01F1, 0x01F2, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA,
7726 0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202,
7727 0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A,
7728 0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212,
7729 0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A,
7730 0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222,
7731 0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A,
7732 0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232,
7733 0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246,
7734 0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E,
7735 0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F,
7736 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F,
7737 0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D8, 0x03D8,
7738 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE, 0x03E0, 0x03E0,
7739 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6, 0x03E8, 0x03E8,
7740 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE, 0x03F4, 0x03F4,
7741 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F, 0x0460, 0x0460,
7742 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, 0x0468, 0x0468,
7743 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E, 0x0470, 0x0470,
7744 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, 0x0478, 0x0478,
7745 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E, 0x0480, 0x0480,
7746 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E, 0x0490, 0x0490,
7747 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, 0x0498, 0x0498,
7748 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E, 0x04A0, 0x04A0,
7749 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, 0x04A8, 0x04A8,
7750 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE, 0x04B0, 0x04B0,
7751 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, 0x04B8, 0x04B8,
7752 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE, 0x04C0, 0x04C1,
7753 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7, 0x04C9, 0x04C9,
7754 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0, 0x04D2, 0x04D2,
7755 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8, 0x04DA, 0x04DA,
7756 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0, 0x04E2, 0x04E2,
7757 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8, 0x04EA, 0x04EA,
7758 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0, 0x04F2, 0x04F2,
7759 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8, 0x04FA, 0x04FA,
7760 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500, 0x0502, 0x0502,
7761 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508, 0x050A, 0x050A,
7762 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510, 0x0512, 0x0512,
7763 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518, 0x051A, 0x051A,
7764 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520, 0x0522, 0x0522,
7765 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528, 0x052A, 0x052A,
7766 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556, 0x10A0, 0x10C5,
7767 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x13A0, 0x13F5, 0x1C90, 0x1CBA,
7768 0x1CBD, 0x1CBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02, 0x1E04, 0x1E04,
7769 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A, 0x1E0C, 0x1E0C,
7770 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12, 0x1E14, 0x1E14,
7771 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A, 0x1E1C, 0x1E1C,
7772 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22, 0x1E24, 0x1E24,
7773 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A, 0x1E2C, 0x1E2C,
7774 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32, 0x1E34, 0x1E34,
7775 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A, 0x1E3C, 0x1E3C,
7776 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42, 0x1E44, 0x1E44,
7777 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A, 0x1E4C, 0x1E4C,
7778 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52, 0x1E54, 0x1E54,
7779 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A, 0x1E5C, 0x1E5C,
7780 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62, 0x1E64, 0x1E64,
7781 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A, 0x1E6C, 0x1E6C,
7782 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72, 0x1E74, 0x1E74,
7783 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A, 0x1E7C, 0x1E7C,
7784 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82, 0x1E84, 0x1E84,
7785 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A, 0x1E8C, 0x1E8C,
7786 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92, 0x1E94, 0x1E94,
7787 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, 0x1EA2, 0x1EA2, 0x1EA4, 0x1EA4,
7788 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, 0x1EAA, 0x1EAA, 0x1EAC, 0x1EAC,
7789 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, 0x1EB2, 0x1EB2, 0x1EB4, 0x1EB4,
7790 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, 0x1EBA, 0x1EBA, 0x1EBC, 0x1EBC,
7791 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, 0x1EC2, 0x1EC2, 0x1EC4, 0x1EC4,
7792 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, 0x1ECA, 0x1ECA, 0x1ECC, 0x1ECC,
7793 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, 0x1ED2, 0x1ED2, 0x1ED4, 0x1ED4,
7794 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, 0x1EDA, 0x1EDA, 0x1EDC, 0x1EDC,
7795 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, 0x1EE2, 0x1EE2, 0x1EE4, 0x1EE4,
7796 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, 0x1EEA, 0x1EEA, 0x1EEC, 0x1EEC,
7797 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, 0x1EF2, 0x1EF2, 0x1EF4, 0x1EF4,
7798 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, 0x1EFA, 0x1EFA, 0x1EFC, 0x1EFC,
7799 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, 0x1F18, 0x1F1D, 0x1F28, 0x1F2F,
7800 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B,
7801 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, 0x1F68, 0x1F6F, 0x1F88, 0x1F8F,
7802 0x1F98, 0x1F9F, 0x1FA8, 0x1FAF, 0x1FB8, 0x1FBC, 0x1FC8, 0x1FCC,
7803 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC, 0x1FF8, 0x1FFC, 0x2126, 0x2126,
7804 0x212A, 0x212B, 0x2132, 0x2132, 0x2160, 0x216F, 0x2183, 0x2183,
7805 0x24B6, 0x24CF, 0x2C00, 0x2C2F, 0x2C60, 0x2C60, 0x2C62, 0x2C64,
7806 0x2C67, 0x2C67, 0x2C69, 0x2C69, 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70,
7807 0x2C72, 0x2C72, 0x2C75, 0x2C75, 0x2C7E, 0x2C80, 0x2C82, 0x2C82,
7808 0x2C84, 0x2C84, 0x2C86, 0x2C86, 0x2C88, 0x2C88, 0x2C8A, 0x2C8A,
7809 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E, 0x2C90, 0x2C90, 0x2C92, 0x2C92,
7810 0x2C94, 0x2C94, 0x2C96, 0x2C96, 0x2C98, 0x2C98, 0x2C9A, 0x2C9A,
7811 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E, 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2,
7812 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6, 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA,
7813 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE, 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2,
7814 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6, 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA,
7815 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE, 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2,
7816 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6, 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA,
7817 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE, 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2,
7818 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6, 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA,
7819 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE, 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2,
7820 0x2CEB, 0x2CEB, 0x2CED, 0x2CED, 0x2CF2, 0x2CF2, 0xA640, 0xA640,
7821 0xA642, 0xA642, 0xA644, 0xA644, 0xA646, 0xA646, 0xA648, 0xA648,
7822 0xA64A, 0xA64A, 0xA64C, 0xA64C, 0xA64E, 0xA64E, 0xA650, 0xA650,
7823 0xA652, 0xA652, 0xA654, 0xA654, 0xA656, 0xA656, 0xA658, 0xA658,
7824 0xA65A, 0xA65A, 0xA65C, 0xA65C, 0xA65E, 0xA65E, 0xA660, 0xA660,
7825 0xA662, 0xA662, 0xA664, 0xA664, 0xA666, 0xA666, 0xA668, 0xA668,
7826 0xA66A, 0xA66A, 0xA66C, 0xA66C, 0xA680, 0xA680, 0xA682, 0xA682,
7827 0xA684, 0xA684, 0xA686, 0xA686, 0xA688, 0xA688, 0xA68A, 0xA68A,
7828 0xA68C, 0xA68C, 0xA68E, 0xA68E, 0xA690, 0xA690, 0xA692, 0xA692,
7829 0xA694, 0xA694, 0xA696, 0xA696, 0xA698, 0xA698, 0xA69A, 0xA69A,
7830 0xA722, 0xA722, 0xA724, 0xA724, 0xA726, 0xA726, 0xA728, 0xA728,
7831 0xA72A, 0xA72A, 0xA72C, 0xA72C, 0xA72E, 0xA72E, 0xA732, 0xA732,
7832 0xA734, 0xA734, 0xA736, 0xA736, 0xA738, 0xA738, 0xA73A, 0xA73A,
7833 0xA73C, 0xA73C, 0xA73E, 0xA73E, 0xA740, 0xA740, 0xA742, 0xA742,
7834 0xA744, 0xA744, 0xA746, 0xA746, 0xA748, 0xA748, 0xA74A, 0xA74A,
7835 0xA74C, 0xA74C, 0xA74E, 0xA74E, 0xA750, 0xA750, 0xA752, 0xA752,
7836 0xA754, 0xA754, 0xA756, 0xA756, 0xA758, 0xA758, 0xA75A, 0xA75A,
7837 0xA75C, 0xA75C, 0xA75E, 0xA75E, 0xA760, 0xA760, 0xA762, 0xA762,
7838 0xA764, 0xA764, 0xA766, 0xA766, 0xA768, 0xA768, 0xA76A, 0xA76A,
7839 0xA76C, 0xA76C, 0xA76E, 0xA76E, 0xA779, 0xA779, 0xA77B, 0xA77B,
7840 0xA77D, 0xA77E, 0xA780, 0xA780, 0xA782, 0xA782, 0xA784, 0xA784,
7841 0xA786, 0xA786, 0xA78B, 0xA78B, 0xA78D, 0xA78D, 0xA790, 0xA790,
7842 0xA792, 0xA792, 0xA796, 0xA796, 0xA798, 0xA798, 0xA79A, 0xA79A,
7843 0xA79C, 0xA79C, 0xA79E, 0xA79E, 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2,
7844 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6, 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE,
7845 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6, 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA,
7846 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE, 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2,
7847 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9, 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6,
7848 0xA7D8, 0xA7D8, 0xA7F5, 0xA7F5, 0xFF21, 0xFF3A, 0x10400, 0x10427,
7849 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592,
7850 0x10594, 0x10595, 0x10C80, 0x10CB2, 0x118A0, 0x118BF, 0x16E40, 0x16E5F,
7851 0x1E900, 0x1E921,
7852 // #55 (6821+839): bp=Changes_When_NFKC_Casefolded:CWKCF
7853 0x0041, 0x005A, 0x00A0, 0x00A0, 0x00A8, 0x00A8, 0x00AA, 0x00AA,
7854 0x00AD, 0x00AD, 0x00AF, 0x00AF, 0x00B2, 0x00B5, 0x00B8, 0x00BA,
7855 0x00BC, 0x00BE, 0x00C0, 0x00D6, 0x00D8, 0x00DF, 0x0100, 0x0100,
7856 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108,
7857 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110,
7858 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118,
7859 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120,
7860 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128,
7861 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130,
7862 0x0132, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139, 0x013B, 0x013B,
7863 0x013D, 0x013D, 0x013F, 0x0141, 0x0143, 0x0143, 0x0145, 0x0145,
7864 0x0147, 0x0147, 0x0149, 0x014A, 0x014C, 0x014C, 0x014E, 0x014E,
7865 0x0150, 0x0150, 0x0152, 0x0152, 0x0154, 0x0154, 0x0156, 0x0156,
7866 0x0158, 0x0158, 0x015A, 0x015A, 0x015C, 0x015C, 0x015E, 0x015E,
7867 0x0160, 0x0160, 0x0162, 0x0162, 0x0164, 0x0164, 0x0166, 0x0166,
7868 0x0168, 0x0168, 0x016A, 0x016A, 0x016C, 0x016C, 0x016E, 0x016E,
7869 0x0170, 0x0170, 0x0172, 0x0172, 0x0174, 0x0174, 0x0176, 0x0176,
7870 0x0178, 0x0179, 0x017B, 0x017B, 0x017D, 0x017D, 0x017F, 0x017F,
7871 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, 0x0189, 0x018B,
7872 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198, 0x019C, 0x019D,
7873 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4, 0x01A6, 0x01A7,
7874 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF, 0x01B1, 0x01B3,
7875 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC, 0x01C4, 0x01CD,
7876 0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5,
7877 0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE,
7878 0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6,
7879 0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE,
7880 0x01F1, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA, 0x01FC, 0x01FC,
7881 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202, 0x0204, 0x0204,
7882 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A, 0x020C, 0x020C,
7883 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212, 0x0214, 0x0214,
7884 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A, 0x021C, 0x021C,
7885 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222, 0x0224, 0x0224,
7886 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A, 0x022C, 0x022C,
7887 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232, 0x023A, 0x023B,
7888 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246, 0x0248, 0x0248,
7889 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E, 0x02B0, 0x02B8,
7890 0x02D8, 0x02DD, 0x02E0, 0x02E4, 0x0340, 0x0341, 0x0343, 0x0345,
7891 0x034F, 0x034F, 0x0370, 0x0370, 0x0372, 0x0372, 0x0374, 0x0374,
7892 0x0376, 0x0376, 0x037A, 0x037A, 0x037E, 0x037F, 0x0384, 0x038A,
7893 0x038C, 0x038C, 0x038E, 0x038F, 0x0391, 0x03A1, 0x03A3, 0x03AB,
7894 0x03C2, 0x03C2, 0x03CF, 0x03D6, 0x03D8, 0x03D8, 0x03DA, 0x03DA,
7895 0x03DC, 0x03DC, 0x03DE, 0x03DE, 0x03E0, 0x03E0, 0x03E2, 0x03E2,
7896 0x03E4, 0x03E4, 0x03E6, 0x03E6, 0x03E8, 0x03E8, 0x03EA, 0x03EA,
7897 0x03EC, 0x03EC, 0x03EE, 0x03EE, 0x03F0, 0x03F2, 0x03F4, 0x03F5,
7898 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F, 0x0460, 0x0460,
7899 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, 0x0468, 0x0468,
7900 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E, 0x0470, 0x0470,
7901 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, 0x0478, 0x0478,
7902 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E, 0x0480, 0x0480,
7903 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E, 0x0490, 0x0490,
7904 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, 0x0498, 0x0498,
7905 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E, 0x04A0, 0x04A0,
7906 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, 0x04A8, 0x04A8,
7907 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE, 0x04B0, 0x04B0,
7908 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, 0x04B8, 0x04B8,
7909 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE, 0x04C0, 0x04C1,
7910 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7, 0x04C9, 0x04C9,
7911 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0, 0x04D2, 0x04D2,
7912 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8, 0x04DA, 0x04DA,
7913 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0, 0x04E2, 0x04E2,
7914 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8, 0x04EA, 0x04EA,
7915 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0, 0x04F2, 0x04F2,
7916 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8, 0x04FA, 0x04FA,
7917 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500, 0x0502, 0x0502,
7918 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508, 0x050A, 0x050A,
7919 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510, 0x0512, 0x0512,
7920 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518, 0x051A, 0x051A,
7921 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520, 0x0522, 0x0522,
7922 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528, 0x052A, 0x052A,
7923 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556, 0x0587, 0x0587,
7924 0x061C, 0x061C, 0x0675, 0x0678, 0x0958, 0x095F, 0x09DC, 0x09DD,
7925 0x09DF, 0x09DF, 0x0A33, 0x0A33, 0x0A36, 0x0A36, 0x0A59, 0x0A5B,
7926 0x0A5E, 0x0A5E, 0x0B5C, 0x0B5D, 0x0E33, 0x0E33, 0x0EB3, 0x0EB3,
7927 0x0EDC, 0x0EDD, 0x0F0C, 0x0F0C, 0x0F43, 0x0F43, 0x0F4D, 0x0F4D,
7928 0x0F52, 0x0F52, 0x0F57, 0x0F57, 0x0F5C, 0x0F5C, 0x0F69, 0x0F69,
7929 0x0F73, 0x0F73, 0x0F75, 0x0F79, 0x0F81, 0x0F81, 0x0F93, 0x0F93,
7930 0x0F9D, 0x0F9D, 0x0FA2, 0x0FA2, 0x0FA7, 0x0FA7, 0x0FAC, 0x0FAC,
7931 0x0FB9, 0x0FB9, 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD,
7932 0x10FC, 0x10FC, 0x115F, 0x1160, 0x13F8, 0x13FD, 0x17B4, 0x17B5,
7933 0x180B, 0x180F, 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF,
7934 0x1D2C, 0x1D2E, 0x1D30, 0x1D3A, 0x1D3C, 0x1D4D, 0x1D4F, 0x1D6A,
7935 0x1D78, 0x1D78, 0x1D9B, 0x1DBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02,
7936 0x1E04, 0x1E04, 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A,
7937 0x1E0C, 0x1E0C, 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12,
7938 0x1E14, 0x1E14, 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A,
7939 0x1E1C, 0x1E1C, 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22,
7940 0x1E24, 0x1E24, 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A,
7941 0x1E2C, 0x1E2C, 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32,
7942 0x1E34, 0x1E34, 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A,
7943 0x1E3C, 0x1E3C, 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42,
7944 0x1E44, 0x1E44, 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A,
7945 0x1E4C, 0x1E4C, 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52,
7946 0x1E54, 0x1E54, 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A,
7947 0x1E5C, 0x1E5C, 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62,
7948 0x1E64, 0x1E64, 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A,
7949 0x1E6C, 0x1E6C, 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72,
7950 0x1E74, 0x1E74, 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A,
7951 0x1E7C, 0x1E7C, 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82,
7952 0x1E84, 0x1E84, 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A,
7953 0x1E8C, 0x1E8C, 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92,
7954 0x1E94, 0x1E94, 0x1E9A, 0x1E9B, 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0,
7955 0x1EA2, 0x1EA2, 0x1EA4, 0x1EA4, 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8,
7956 0x1EAA, 0x1EAA, 0x1EAC, 0x1EAC, 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0,
7957 0x1EB2, 0x1EB2, 0x1EB4, 0x1EB4, 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8,
7958 0x1EBA, 0x1EBA, 0x1EBC, 0x1EBC, 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0,
7959 0x1EC2, 0x1EC2, 0x1EC4, 0x1EC4, 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8,
7960 0x1ECA, 0x1ECA, 0x1ECC, 0x1ECC, 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0,
7961 0x1ED2, 0x1ED2, 0x1ED4, 0x1ED4, 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8,
7962 0x1EDA, 0x1EDA, 0x1EDC, 0x1EDC, 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0,
7963 0x1EE2, 0x1EE2, 0x1EE4, 0x1EE4, 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8,
7964 0x1EEA, 0x1EEA, 0x1EEC, 0x1EEC, 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0,
7965 0x1EF2, 0x1EF2, 0x1EF4, 0x1EF4, 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8,
7966 0x1EFA, 0x1EFA, 0x1EFC, 0x1EFC, 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F,
7967 0x1F18, 0x1F1D, 0x1F28, 0x1F2F, 0x1F38, 0x1F3F, 0x1F48, 0x1F4D,
7968 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F,
7969 0x1F68, 0x1F6F, 0x1F71, 0x1F71, 0x1F73, 0x1F73, 0x1F75, 0x1F75,
7970 0x1F77, 0x1F77, 0x1F79, 0x1F79, 0x1F7B, 0x1F7B, 0x1F7D, 0x1F7D,
7971 0x1F80, 0x1FAF, 0x1FB2, 0x1FB4, 0x1FB7, 0x1FC4, 0x1FC7, 0x1FCF,
7972 0x1FD3, 0x1FD3, 0x1FD8, 0x1FDB, 0x1FDD, 0x1FDF, 0x1FE3, 0x1FE3,
7973 0x1FE8, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF7, 0x1FFE, 0x2000, 0x200F,
7974 0x2011, 0x2011, 0x2017, 0x2017, 0x2024, 0x2026, 0x202A, 0x202F,
7975 0x2033, 0x2034, 0x2036, 0x2037, 0x203C, 0x203C, 0x203E, 0x203E,
7976 0x2047, 0x2049, 0x2057, 0x2057, 0x205F, 0x2071, 0x2074, 0x208E,
7977 0x2090, 0x209C, 0x20A8, 0x20A8, 0x2100, 0x2103, 0x2105, 0x2107,
7978 0x2109, 0x2113, 0x2115, 0x2116, 0x2119, 0x211D, 0x2120, 0x2122,
7979 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D,
7980 0x212F, 0x2139, 0x213B, 0x2140, 0x2145, 0x2149, 0x2150, 0x217F,
7981 0x2183, 0x2183, 0x2189, 0x2189, 0x222C, 0x222D, 0x222F, 0x2230,
7982 0x2329, 0x232A, 0x2460, 0x24EA, 0x2A0C, 0x2A0C, 0x2A74, 0x2A76,
7983 0x2ADC, 0x2ADC, 0x2C00, 0x2C2F, 0x2C60, 0x2C60, 0x2C62, 0x2C64,
7984 0x2C67, 0x2C67, 0x2C69, 0x2C69, 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70,
7985 0x2C72, 0x2C72, 0x2C75, 0x2C75, 0x2C7C, 0x2C80, 0x2C82, 0x2C82,
7986 0x2C84, 0x2C84, 0x2C86, 0x2C86, 0x2C88, 0x2C88, 0x2C8A, 0x2C8A,
7987 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E, 0x2C90, 0x2C90, 0x2C92, 0x2C92,
7988 0x2C94, 0x2C94, 0x2C96, 0x2C96, 0x2C98, 0x2C98, 0x2C9A, 0x2C9A,
7989 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E, 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2,
7990 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6, 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA,
7991 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE, 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2,
7992 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6, 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA,
7993 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE, 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2,
7994 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6, 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA,
7995 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE, 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2,
7996 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6, 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA,
7997 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE, 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2,
7998 0x2CEB, 0x2CEB, 0x2CED, 0x2CED, 0x2CF2, 0x2CF2, 0x2D6F, 0x2D6F,
7999 0x2E9F, 0x2E9F, 0x2EF3, 0x2EF3, 0x2F00, 0x2FD5, 0x3000, 0x3000,
8000 0x3036, 0x3036, 0x3038, 0x303A, 0x309B, 0x309C, 0x309F, 0x309F,
8001 0x30FF, 0x30FF, 0x3131, 0x318E, 0x3192, 0x319F, 0x3200, 0x321E,
8002 0x3220, 0x3247, 0x3250, 0x327E, 0x3280, 0x33FF, 0xA640, 0xA640,
8003 0xA642, 0xA642, 0xA644, 0xA644, 0xA646, 0xA646, 0xA648, 0xA648,
8004 0xA64A, 0xA64A, 0xA64C, 0xA64C, 0xA64E, 0xA64E, 0xA650, 0xA650,
8005 0xA652, 0xA652, 0xA654, 0xA654, 0xA656, 0xA656, 0xA658, 0xA658,
8006 0xA65A, 0xA65A, 0xA65C, 0xA65C, 0xA65E, 0xA65E, 0xA660, 0xA660,
8007 0xA662, 0xA662, 0xA664, 0xA664, 0xA666, 0xA666, 0xA668, 0xA668,
8008 0xA66A, 0xA66A, 0xA66C, 0xA66C, 0xA680, 0xA680, 0xA682, 0xA682,
8009 0xA684, 0xA684, 0xA686, 0xA686, 0xA688, 0xA688, 0xA68A, 0xA68A,
8010 0xA68C, 0xA68C, 0xA68E, 0xA68E, 0xA690, 0xA690, 0xA692, 0xA692,
8011 0xA694, 0xA694, 0xA696, 0xA696, 0xA698, 0xA698, 0xA69A, 0xA69A,
8012 0xA69C, 0xA69D, 0xA722, 0xA722, 0xA724, 0xA724, 0xA726, 0xA726,
8013 0xA728, 0xA728, 0xA72A, 0xA72A, 0xA72C, 0xA72C, 0xA72E, 0xA72E,
8014 0xA732, 0xA732, 0xA734, 0xA734, 0xA736, 0xA736, 0xA738, 0xA738,
8015 0xA73A, 0xA73A, 0xA73C, 0xA73C, 0xA73E, 0xA73E, 0xA740, 0xA740,
8016 0xA742, 0xA742, 0xA744, 0xA744, 0xA746, 0xA746, 0xA748, 0xA748,
8017 0xA74A, 0xA74A, 0xA74C, 0xA74C, 0xA74E, 0xA74E, 0xA750, 0xA750,
8018 0xA752, 0xA752, 0xA754, 0xA754, 0xA756, 0xA756, 0xA758, 0xA758,
8019 0xA75A, 0xA75A, 0xA75C, 0xA75C, 0xA75E, 0xA75E, 0xA760, 0xA760,
8020 0xA762, 0xA762, 0xA764, 0xA764, 0xA766, 0xA766, 0xA768, 0xA768,
8021 0xA76A, 0xA76A, 0xA76C, 0xA76C, 0xA76E, 0xA76E, 0xA770, 0xA770,
8022 0xA779, 0xA779, 0xA77B, 0xA77B, 0xA77D, 0xA77E, 0xA780, 0xA780,
8023 0xA782, 0xA782, 0xA784, 0xA784, 0xA786, 0xA786, 0xA78B, 0xA78B,
8024 0xA78D, 0xA78D, 0xA790, 0xA790, 0xA792, 0xA792, 0xA796, 0xA796,
8025 0xA798, 0xA798, 0xA79A, 0xA79A, 0xA79C, 0xA79C, 0xA79E, 0xA79E,
8026 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2, 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6,
8027 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE, 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6,
8028 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA, 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE,
8029 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2, 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9,
8030 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6, 0xA7D8, 0xA7D8, 0xA7F2, 0xA7F5,
8031 0xA7F8, 0xA7F9, 0xAB5C, 0xAB5F, 0xAB69, 0xAB69, 0xAB70, 0xABBF,
8032 0xF900, 0xFA0D, 0xFA10, 0xFA10, 0xFA12, 0xFA12, 0xFA15, 0xFA1E,
8033 0xFA20, 0xFA20, 0xFA22, 0xFA22, 0xFA25, 0xFA26, 0xFA2A, 0xFA6D,
8034 0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB1D,
8035 0xFB1F, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41,
8036 0xFB43, 0xFB44, 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F,
8037 0xFD92, 0xFDC7, 0xFDF0, 0xFDFC, 0xFE00, 0xFE19, 0xFE30, 0xFE44,
8038 0xFE47, 0xFE52, 0xFE54, 0xFE66, 0xFE68, 0xFE6B, 0xFE70, 0xFE72,
8039 0xFE74, 0xFE74, 0xFE76, 0xFEFC, 0xFEFF, 0xFEFF, 0xFF01, 0xFFBE,
8040 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC,
8041 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF0, 0xFFF8, 0x10400, 0x10427,
8042 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592,
8043 0x10594, 0x10595, 0x10781, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA,
8044 0x10C80, 0x10CB2, 0x118A0, 0x118BF, 0x16E40, 0x16E5F, 0x1BCA0, 0x1BCA3,
8045 0x1D15E, 0x1D164, 0x1D173, 0x1D17A, 0x1D1BB, 0x1D1C0, 0x1D400, 0x1D454,
8046 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6,
8047 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3,
8048 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C,
8049 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546,
8050 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D7FF,
8051 0x1E030, 0x1E06D, 0x1E900, 0x1E921, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F,
8052 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32,
8053 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42,
8054 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F,
8055 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59,
8056 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62,
8057 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77,
8058 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B,
8059 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1F100, 0x1F10A,
8060 0x1F110, 0x1F12E, 0x1F130, 0x1F14F, 0x1F16A, 0x1F16C, 0x1F190, 0x1F190,
8061 0x1F200, 0x1F202, 0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F250, 0x1F251,
8062 0x1FBF0, 0x1FBF9, 0x2F800, 0x2FA1D, 0xE0000, 0xE0FFF,
8063 // #56 (7660+626): bp=Changes_When_Titlecased:CWT
8064 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF,
8065 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107,
8066 0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F,
8067 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117,
8068 0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F,
8069 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127,
8070 0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F,
8071 0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137,
8072 0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140,
8073 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149,
8074 0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151,
8075 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159,
8076 0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161,
8077 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169,
8078 0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171,
8079 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A,
8080 0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185,
8081 0x0188, 0x0188, 0x018C, 0x018C, 0x0192, 0x0192, 0x0195, 0x0195,
8082 0x0199, 0x019A, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3,
8083 0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AD, 0x01AD, 0x01B0, 0x01B0,
8084 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01B9, 0x01BD, 0x01BD,
8085 0x01BF, 0x01BF, 0x01C4, 0x01C4, 0x01C6, 0x01C7, 0x01C9, 0x01CA,
8086 0x01CC, 0x01CC, 0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2,
8087 0x01D4, 0x01D4, 0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA,
8088 0x01DC, 0x01DD, 0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3,
8089 0x01E5, 0x01E5, 0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB,
8090 0x01ED, 0x01ED, 0x01EF, 0x01F1, 0x01F3, 0x01F3, 0x01F5, 0x01F5,
8091 0x01F9, 0x01F9, 0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF,
8092 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207,
8093 0x0209, 0x0209, 0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F,
8094 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217,
8095 0x0219, 0x0219, 0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F,
8096 0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229,
8097 0x022B, 0x022B, 0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231,
8098 0x0233, 0x0233, 0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242,
8099 0x0247, 0x0247, 0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D,
8100 0x024F, 0x0254, 0x0256, 0x0257, 0x0259, 0x0259, 0x025B, 0x025C,
8101 0x0260, 0x0261, 0x0263, 0x0263, 0x0265, 0x0266, 0x0268, 0x026C,
8102 0x026F, 0x026F, 0x0271, 0x0272, 0x0275, 0x0275, 0x027D, 0x027D,
8103 0x0280, 0x0280, 0x0282, 0x0283, 0x0287, 0x028C, 0x0292, 0x0292,
8104 0x029D, 0x029E, 0x0345, 0x0345, 0x0371, 0x0371, 0x0373, 0x0373,
8105 0x0377, 0x0377, 0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE,
8106 0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB,
8107 0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3,
8108 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB,
8109 0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8,
8110 0x03FB, 0x03FB, 0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463,
8111 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B,
8112 0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473,
8113 0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B,
8114 0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B,
8115 0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493,
8116 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B,
8117 0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3,
8118 0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB,
8119 0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3,
8120 0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB,
8121 0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4,
8122 0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC,
8123 0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5,
8124 0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD,
8125 0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5,
8126 0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED,
8127 0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5,
8128 0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD,
8129 0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505,
8130 0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D,
8131 0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515,
8132 0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D,
8133 0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525,
8134 0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D,
8135 0x052F, 0x052F, 0x0561, 0x0587, 0x13F8, 0x13FD, 0x1C80, 0x1C88,
8136 0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E, 0x1E01, 0x1E01,
8137 0x1E03, 0x1E03, 0x1E05, 0x1E05, 0x1E07, 0x1E07, 0x1E09, 0x1E09,
8138 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D, 0x1E0F, 0x1E0F, 0x1E11, 0x1E11,
8139 0x1E13, 0x1E13, 0x1E15, 0x1E15, 0x1E17, 0x1E17, 0x1E19, 0x1E19,
8140 0x1E1B, 0x1E1B, 0x1E1D, 0x1E1D, 0x1E1F, 0x1E1F, 0x1E21, 0x1E21,
8141 0x1E23, 0x1E23, 0x1E25, 0x1E25, 0x1E27, 0x1E27, 0x1E29, 0x1E29,
8142 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D, 0x1E2F, 0x1E2F, 0x1E31, 0x1E31,
8143 0x1E33, 0x1E33, 0x1E35, 0x1E35, 0x1E37, 0x1E37, 0x1E39, 0x1E39,
8144 0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D, 0x1E3F, 0x1E3F, 0x1E41, 0x1E41,
8145 0x1E43, 0x1E43, 0x1E45, 0x1E45, 0x1E47, 0x1E47, 0x1E49, 0x1E49,
8146 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D, 0x1E4F, 0x1E4F, 0x1E51, 0x1E51,
8147 0x1E53, 0x1E53, 0x1E55, 0x1E55, 0x1E57, 0x1E57, 0x1E59, 0x1E59,
8148 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D, 0x1E5F, 0x1E5F, 0x1E61, 0x1E61,
8149 0x1E63, 0x1E63, 0x1E65, 0x1E65, 0x1E67, 0x1E67, 0x1E69, 0x1E69,
8150 0x1E6B, 0x1E6B, 0x1E6D, 0x1E6D, 0x1E6F, 0x1E6F, 0x1E71, 0x1E71,
8151 0x1E73, 0x1E73, 0x1E75, 0x1E75, 0x1E77, 0x1E77, 0x1E79, 0x1E79,
8152 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D, 0x1E7F, 0x1E7F, 0x1E81, 0x1E81,
8153 0x1E83, 0x1E83, 0x1E85, 0x1E85, 0x1E87, 0x1E87, 0x1E89, 0x1E89,
8154 0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D, 0x1E8F, 0x1E8F, 0x1E91, 0x1E91,
8155 0x1E93, 0x1E93, 0x1E95, 0x1E9B, 0x1EA1, 0x1EA1, 0x1EA3, 0x1EA3,
8156 0x1EA5, 0x1EA5, 0x1EA7, 0x1EA7, 0x1EA9, 0x1EA9, 0x1EAB, 0x1EAB,
8157 0x1EAD, 0x1EAD, 0x1EAF, 0x1EAF, 0x1EB1, 0x1EB1, 0x1EB3, 0x1EB3,
8158 0x1EB5, 0x1EB5, 0x1EB7, 0x1EB7, 0x1EB9, 0x1EB9, 0x1EBB, 0x1EBB,
8159 0x1EBD, 0x1EBD, 0x1EBF, 0x1EBF, 0x1EC1, 0x1EC1, 0x1EC3, 0x1EC3,
8160 0x1EC5, 0x1EC5, 0x1EC7, 0x1EC7, 0x1EC9, 0x1EC9, 0x1ECB, 0x1ECB,
8161 0x1ECD, 0x1ECD, 0x1ECF, 0x1ECF, 0x1ED1, 0x1ED1, 0x1ED3, 0x1ED3,
8162 0x1ED5, 0x1ED5, 0x1ED7, 0x1ED7, 0x1ED9, 0x1ED9, 0x1EDB, 0x1EDB,
8163 0x1EDD, 0x1EDD, 0x1EDF, 0x1EDF, 0x1EE1, 0x1EE1, 0x1EE3, 0x1EE3,
8164 0x1EE5, 0x1EE5, 0x1EE7, 0x1EE7, 0x1EE9, 0x1EE9, 0x1EEB, 0x1EEB,
8165 0x1EED, 0x1EED, 0x1EEF, 0x1EEF, 0x1EF1, 0x1EF1, 0x1EF3, 0x1EF3,
8166 0x1EF5, 0x1EF5, 0x1EF7, 0x1EF7, 0x1EF9, 0x1EF9, 0x1EFB, 0x1EFB,
8167 0x1EFD, 0x1EFD, 0x1EFF, 0x1F07, 0x1F10, 0x1F15, 0x1F20, 0x1F27,
8168 0x1F30, 0x1F37, 0x1F40, 0x1F45, 0x1F50, 0x1F57, 0x1F60, 0x1F67,
8169 0x1F70, 0x1F7D, 0x1F80, 0x1F87, 0x1F90, 0x1F97, 0x1FA0, 0x1FA7,
8170 0x1FB0, 0x1FB4, 0x1FB6, 0x1FB7, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4,
8171 0x1FC6, 0x1FC7, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7,
8172 0x1FF2, 0x1FF4, 0x1FF6, 0x1FF7, 0x214E, 0x214E, 0x2170, 0x217F,
8173 0x2184, 0x2184, 0x24D0, 0x24E9, 0x2C30, 0x2C5F, 0x2C61, 0x2C61,
8174 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A, 0x2C6C, 0x2C6C,
8175 0x2C73, 0x2C73, 0x2C76, 0x2C76, 0x2C81, 0x2C81, 0x2C83, 0x2C83,
8176 0x2C85, 0x2C85, 0x2C87, 0x2C87, 0x2C89, 0x2C89, 0x2C8B, 0x2C8B,
8177 0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F, 0x2C91, 0x2C91, 0x2C93, 0x2C93,
8178 0x2C95, 0x2C95, 0x2C97, 0x2C97, 0x2C99, 0x2C99, 0x2C9B, 0x2C9B,
8179 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F, 0x2CA1, 0x2CA1, 0x2CA3, 0x2CA3,
8180 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7, 0x2CA9, 0x2CA9, 0x2CAB, 0x2CAB,
8181 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF, 0x2CB1, 0x2CB1, 0x2CB3, 0x2CB3,
8182 0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7, 0x2CB9, 0x2CB9, 0x2CBB, 0x2CBB,
8183 0x2CBD, 0x2CBD, 0x2CBF, 0x2CBF, 0x2CC1, 0x2CC1, 0x2CC3, 0x2CC3,
8184 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7, 0x2CC9, 0x2CC9, 0x2CCB, 0x2CCB,
8185 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF, 0x2CD1, 0x2CD1, 0x2CD3, 0x2CD3,
8186 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7, 0x2CD9, 0x2CD9, 0x2CDB, 0x2CDB,
8187 0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF, 0x2CE1, 0x2CE1, 0x2CE3, 0x2CE3,
8188 0x2CEC, 0x2CEC, 0x2CEE, 0x2CEE, 0x2CF3, 0x2CF3, 0x2D00, 0x2D25,
8189 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0xA641, 0xA641, 0xA643, 0xA643,
8190 0xA645, 0xA645, 0xA647, 0xA647, 0xA649, 0xA649, 0xA64B, 0xA64B,
8191 0xA64D, 0xA64D, 0xA64F, 0xA64F, 0xA651, 0xA651, 0xA653, 0xA653,
8192 0xA655, 0xA655, 0xA657, 0xA657, 0xA659, 0xA659, 0xA65B, 0xA65B,
8193 0xA65D, 0xA65D, 0xA65F, 0xA65F, 0xA661, 0xA661, 0xA663, 0xA663,
8194 0xA665, 0xA665, 0xA667, 0xA667, 0xA669, 0xA669, 0xA66B, 0xA66B,
8195 0xA66D, 0xA66D, 0xA681, 0xA681, 0xA683, 0xA683, 0xA685, 0xA685,
8196 0xA687, 0xA687, 0xA689, 0xA689, 0xA68B, 0xA68B, 0xA68D, 0xA68D,
8197 0xA68F, 0xA68F, 0xA691, 0xA691, 0xA693, 0xA693, 0xA695, 0xA695,
8198 0xA697, 0xA697, 0xA699, 0xA699, 0xA69B, 0xA69B, 0xA723, 0xA723,
8199 0xA725, 0xA725, 0xA727, 0xA727, 0xA729, 0xA729, 0xA72B, 0xA72B,
8200 0xA72D, 0xA72D, 0xA72F, 0xA72F, 0xA733, 0xA733, 0xA735, 0xA735,
8201 0xA737, 0xA737, 0xA739, 0xA739, 0xA73B, 0xA73B, 0xA73D, 0xA73D,
8202 0xA73F, 0xA73F, 0xA741, 0xA741, 0xA743, 0xA743, 0xA745, 0xA745,
8203 0xA747, 0xA747, 0xA749, 0xA749, 0xA74B, 0xA74B, 0xA74D, 0xA74D,
8204 0xA74F, 0xA74F, 0xA751, 0xA751, 0xA753, 0xA753, 0xA755, 0xA755,
8205 0xA757, 0xA757, 0xA759, 0xA759, 0xA75B, 0xA75B, 0xA75D, 0xA75D,
8206 0xA75F, 0xA75F, 0xA761, 0xA761, 0xA763, 0xA763, 0xA765, 0xA765,
8207 0xA767, 0xA767, 0xA769, 0xA769, 0xA76B, 0xA76B, 0xA76D, 0xA76D,
8208 0xA76F, 0xA76F, 0xA77A, 0xA77A, 0xA77C, 0xA77C, 0xA77F, 0xA77F,
8209 0xA781, 0xA781, 0xA783, 0xA783, 0xA785, 0xA785, 0xA787, 0xA787,
8210 0xA78C, 0xA78C, 0xA791, 0xA791, 0xA793, 0xA794, 0xA797, 0xA797,
8211 0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D, 0xA79F, 0xA79F,
8212 0xA7A1, 0xA7A1, 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, 0xA7A7, 0xA7A7,
8213 0xA7A9, 0xA7A9, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7, 0xA7B9, 0xA7B9,
8214 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF, 0xA7C1, 0xA7C1,
8215 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA, 0xA7D1, 0xA7D1,
8216 0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9, 0xA7F6, 0xA7F6, 0xAB53, 0xAB53,
8217 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF41, 0xFF5A,
8218 0x10428, 0x1044F, 0x104D8, 0x104FB, 0x10597, 0x105A1, 0x105A3, 0x105B1,
8219 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10CC0, 0x10CF2, 0x118C0, 0x118DF,
8220 0x16E60, 0x16E7F, 0x1E922, 0x1E943,
8221 // #57 (8286+627): bp=Changes_When_Uppercased:CWU
8222 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF,
8223 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107,
8224 0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F,
8225 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117,
8226 0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F,
8227 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127,
8228 0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F,
8229 0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137,
8230 0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140,
8231 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149,
8232 0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151,
8233 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159,
8234 0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161,
8235 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169,
8236 0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171,
8237 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A,
8238 0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185,
8239 0x0188, 0x0188, 0x018C, 0x018C, 0x0192, 0x0192, 0x0195, 0x0195,
8240 0x0199, 0x019A, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3,
8241 0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AD, 0x01AD, 0x01B0, 0x01B0,
8242 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01B9, 0x01BD, 0x01BD,
8243 0x01BF, 0x01BF, 0x01C5, 0x01C6, 0x01C8, 0x01C9, 0x01CB, 0x01CC,
8244 0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2, 0x01D4, 0x01D4,
8245 0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA, 0x01DC, 0x01DD,
8246 0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3, 0x01E5, 0x01E5,
8247 0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB, 0x01ED, 0x01ED,
8248 0x01EF, 0x01F0, 0x01F2, 0x01F3, 0x01F5, 0x01F5, 0x01F9, 0x01F9,
8249 0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF, 0x0201, 0x0201,
8250 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, 0x0209, 0x0209,
8251 0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F, 0x0211, 0x0211,
8252 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, 0x0219, 0x0219,
8253 0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F, 0x0223, 0x0223,
8254 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229, 0x022B, 0x022B,
8255 0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231, 0x0233, 0x0233,
8256 0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242, 0x0247, 0x0247,
8257 0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D, 0x024F, 0x0254,
8258 0x0256, 0x0257, 0x0259, 0x0259, 0x025B, 0x025C, 0x0260, 0x0261,
8259 0x0263, 0x0263, 0x0265, 0x0266, 0x0268, 0x026C, 0x026F, 0x026F,
8260 0x0271, 0x0272, 0x0275, 0x0275, 0x027D, 0x027D, 0x0280, 0x0280,
8261 0x0282, 0x0283, 0x0287, 0x028C, 0x0292, 0x0292, 0x029D, 0x029E,
8262 0x0345, 0x0345, 0x0371, 0x0371, 0x0373, 0x0373, 0x0377, 0x0377,
8263 0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE, 0x03D0, 0x03D1,
8264 0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB, 0x03DD, 0x03DD,
8265 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3, 0x03E5, 0x03E5,
8266 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB, 0x03ED, 0x03ED,
8267 0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8, 0x03FB, 0x03FB,
8268 0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463, 0x0465, 0x0465,
8269 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B, 0x046D, 0x046D,
8270 0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473, 0x0475, 0x0475,
8271 0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B, 0x047D, 0x047D,
8272 0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B, 0x048D, 0x048D,
8273 0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493, 0x0495, 0x0495,
8274 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B, 0x049D, 0x049D,
8275 0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3, 0x04A5, 0x04A5,
8276 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB, 0x04AD, 0x04AD,
8277 0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3, 0x04B5, 0x04B5,
8278 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB, 0x04BD, 0x04BD,
8279 0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4, 0x04C6, 0x04C6,
8280 0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC, 0x04CE, 0x04CF,
8281 0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5, 0x04D7, 0x04D7,
8282 0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD, 0x04DF, 0x04DF,
8283 0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5, 0x04E7, 0x04E7,
8284 0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED, 0x04EF, 0x04EF,
8285 0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5, 0x04F7, 0x04F7,
8286 0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD, 0x04FF, 0x04FF,
8287 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, 0x0507, 0x0507,
8288 0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D, 0x050F, 0x050F,
8289 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515, 0x0517, 0x0517,
8290 0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D, 0x051F, 0x051F,
8291 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525, 0x0527, 0x0527,
8292 0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D, 0x052F, 0x052F,
8293 0x0561, 0x0587, 0x10D0, 0x10FA, 0x10FD, 0x10FF, 0x13F8, 0x13FD,
8294 0x1C80, 0x1C88, 0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E,
8295 0x1E01, 0x1E01, 0x1E03, 0x1E03, 0x1E05, 0x1E05, 0x1E07, 0x1E07,
8296 0x1E09, 0x1E09, 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D, 0x1E0F, 0x1E0F,
8297 0x1E11, 0x1E11, 0x1E13, 0x1E13, 0x1E15, 0x1E15, 0x1E17, 0x1E17,
8298 0x1E19, 0x1E19, 0x1E1B, 0x1E1B, 0x1E1D, 0x1E1D, 0x1E1F, 0x1E1F,
8299 0x1E21, 0x1E21, 0x1E23, 0x1E23, 0x1E25, 0x1E25, 0x1E27, 0x1E27,
8300 0x1E29, 0x1E29, 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D, 0x1E2F, 0x1E2F,
8301 0x1E31, 0x1E31, 0x1E33, 0x1E33, 0x1E35, 0x1E35, 0x1E37, 0x1E37,
8302 0x1E39, 0x1E39, 0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D, 0x1E3F, 0x1E3F,
8303 0x1E41, 0x1E41, 0x1E43, 0x1E43, 0x1E45, 0x1E45, 0x1E47, 0x1E47,
8304 0x1E49, 0x1E49, 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D, 0x1E4F, 0x1E4F,
8305 0x1E51, 0x1E51, 0x1E53, 0x1E53, 0x1E55, 0x1E55, 0x1E57, 0x1E57,
8306 0x1E59, 0x1E59, 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D, 0x1E5F, 0x1E5F,
8307 0x1E61, 0x1E61, 0x1E63, 0x1E63, 0x1E65, 0x1E65, 0x1E67, 0x1E67,
8308 0x1E69, 0x1E69, 0x1E6B, 0x1E6B, 0x1E6D, 0x1E6D, 0x1E6F, 0x1E6F,
8309 0x1E71, 0x1E71, 0x1E73, 0x1E73, 0x1E75, 0x1E75, 0x1E77, 0x1E77,
8310 0x1E79, 0x1E79, 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D, 0x1E7F, 0x1E7F,
8311 0x1E81, 0x1E81, 0x1E83, 0x1E83, 0x1E85, 0x1E85, 0x1E87, 0x1E87,
8312 0x1E89, 0x1E89, 0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D, 0x1E8F, 0x1E8F,
8313 0x1E91, 0x1E91, 0x1E93, 0x1E93, 0x1E95, 0x1E9B, 0x1EA1, 0x1EA1,
8314 0x1EA3, 0x1EA3, 0x1EA5, 0x1EA5, 0x1EA7, 0x1EA7, 0x1EA9, 0x1EA9,
8315 0x1EAB, 0x1EAB, 0x1EAD, 0x1EAD, 0x1EAF, 0x1EAF, 0x1EB1, 0x1EB1,
8316 0x1EB3, 0x1EB3, 0x1EB5, 0x1EB5, 0x1EB7, 0x1EB7, 0x1EB9, 0x1EB9,
8317 0x1EBB, 0x1EBB, 0x1EBD, 0x1EBD, 0x1EBF, 0x1EBF, 0x1EC1, 0x1EC1,
8318 0x1EC3, 0x1EC3, 0x1EC5, 0x1EC5, 0x1EC7, 0x1EC7, 0x1EC9, 0x1EC9,
8319 0x1ECB, 0x1ECB, 0x1ECD, 0x1ECD, 0x1ECF, 0x1ECF, 0x1ED1, 0x1ED1,
8320 0x1ED3, 0x1ED3, 0x1ED5, 0x1ED5, 0x1ED7, 0x1ED7, 0x1ED9, 0x1ED9,
8321 0x1EDB, 0x1EDB, 0x1EDD, 0x1EDD, 0x1EDF, 0x1EDF, 0x1EE1, 0x1EE1,
8322 0x1EE3, 0x1EE3, 0x1EE5, 0x1EE5, 0x1EE7, 0x1EE7, 0x1EE9, 0x1EE9,
8323 0x1EEB, 0x1EEB, 0x1EED, 0x1EED, 0x1EEF, 0x1EEF, 0x1EF1, 0x1EF1,
8324 0x1EF3, 0x1EF3, 0x1EF5, 0x1EF5, 0x1EF7, 0x1EF7, 0x1EF9, 0x1EF9,
8325 0x1EFB, 0x1EFB, 0x1EFD, 0x1EFD, 0x1EFF, 0x1F07, 0x1F10, 0x1F15,
8326 0x1F20, 0x1F27, 0x1F30, 0x1F37, 0x1F40, 0x1F45, 0x1F50, 0x1F57,
8327 0x1F60, 0x1F67, 0x1F70, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FB7,
8328 0x1FBC, 0x1FBC, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FC7,
8329 0x1FCC, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7,
8330 0x1FF2, 0x1FF4, 0x1FF6, 0x1FF7, 0x1FFC, 0x1FFC, 0x214E, 0x214E,
8331 0x2170, 0x217F, 0x2184, 0x2184, 0x24D0, 0x24E9, 0x2C30, 0x2C5F,
8332 0x2C61, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A,
8333 0x2C6C, 0x2C6C, 0x2C73, 0x2C73, 0x2C76, 0x2C76, 0x2C81, 0x2C81,
8334 0x2C83, 0x2C83, 0x2C85, 0x2C85, 0x2C87, 0x2C87, 0x2C89, 0x2C89,
8335 0x2C8B, 0x2C8B, 0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F, 0x2C91, 0x2C91,
8336 0x2C93, 0x2C93, 0x2C95, 0x2C95, 0x2C97, 0x2C97, 0x2C99, 0x2C99,
8337 0x2C9B, 0x2C9B, 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F, 0x2CA1, 0x2CA1,
8338 0x2CA3, 0x2CA3, 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7, 0x2CA9, 0x2CA9,
8339 0x2CAB, 0x2CAB, 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF, 0x2CB1, 0x2CB1,
8340 0x2CB3, 0x2CB3, 0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7, 0x2CB9, 0x2CB9,
8341 0x2CBB, 0x2CBB, 0x2CBD, 0x2CBD, 0x2CBF, 0x2CBF, 0x2CC1, 0x2CC1,
8342 0x2CC3, 0x2CC3, 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7, 0x2CC9, 0x2CC9,
8343 0x2CCB, 0x2CCB, 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF, 0x2CD1, 0x2CD1,
8344 0x2CD3, 0x2CD3, 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7, 0x2CD9, 0x2CD9,
8345 0x2CDB, 0x2CDB, 0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF, 0x2CE1, 0x2CE1,
8346 0x2CE3, 0x2CE3, 0x2CEC, 0x2CEC, 0x2CEE, 0x2CEE, 0x2CF3, 0x2CF3,
8347 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0xA641, 0xA641,
8348 0xA643, 0xA643, 0xA645, 0xA645, 0xA647, 0xA647, 0xA649, 0xA649,
8349 0xA64B, 0xA64B, 0xA64D, 0xA64D, 0xA64F, 0xA64F, 0xA651, 0xA651,
8350 0xA653, 0xA653, 0xA655, 0xA655, 0xA657, 0xA657, 0xA659, 0xA659,
8351 0xA65B, 0xA65B, 0xA65D, 0xA65D, 0xA65F, 0xA65F, 0xA661, 0xA661,
8352 0xA663, 0xA663, 0xA665, 0xA665, 0xA667, 0xA667, 0xA669, 0xA669,
8353 0xA66B, 0xA66B, 0xA66D, 0xA66D, 0xA681, 0xA681, 0xA683, 0xA683,
8354 0xA685, 0xA685, 0xA687, 0xA687, 0xA689, 0xA689, 0xA68B, 0xA68B,
8355 0xA68D, 0xA68D, 0xA68F, 0xA68F, 0xA691, 0xA691, 0xA693, 0xA693,
8356 0xA695, 0xA695, 0xA697, 0xA697, 0xA699, 0xA699, 0xA69B, 0xA69B,
8357 0xA723, 0xA723, 0xA725, 0xA725, 0xA727, 0xA727, 0xA729, 0xA729,
8358 0xA72B, 0xA72B, 0xA72D, 0xA72D, 0xA72F, 0xA72F, 0xA733, 0xA733,
8359 0xA735, 0xA735, 0xA737, 0xA737, 0xA739, 0xA739, 0xA73B, 0xA73B,
8360 0xA73D, 0xA73D, 0xA73F, 0xA73F, 0xA741, 0xA741, 0xA743, 0xA743,
8361 0xA745, 0xA745, 0xA747, 0xA747, 0xA749, 0xA749, 0xA74B, 0xA74B,
8362 0xA74D, 0xA74D, 0xA74F, 0xA74F, 0xA751, 0xA751, 0xA753, 0xA753,
8363 0xA755, 0xA755, 0xA757, 0xA757, 0xA759, 0xA759, 0xA75B, 0xA75B,
8364 0xA75D, 0xA75D, 0xA75F, 0xA75F, 0xA761, 0xA761, 0xA763, 0xA763,
8365 0xA765, 0xA765, 0xA767, 0xA767, 0xA769, 0xA769, 0xA76B, 0xA76B,
8366 0xA76D, 0xA76D, 0xA76F, 0xA76F, 0xA77A, 0xA77A, 0xA77C, 0xA77C,
8367 0xA77F, 0xA77F, 0xA781, 0xA781, 0xA783, 0xA783, 0xA785, 0xA785,
8368 0xA787, 0xA787, 0xA78C, 0xA78C, 0xA791, 0xA791, 0xA793, 0xA794,
8369 0xA797, 0xA797, 0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D,
8370 0xA79F, 0xA79F, 0xA7A1, 0xA7A1, 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5,
8371 0xA7A7, 0xA7A7, 0xA7A9, 0xA7A9, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7,
8372 0xA7B9, 0xA7B9, 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF,
8373 0xA7C1, 0xA7C1, 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA,
8374 0xA7D1, 0xA7D1, 0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9, 0xA7F6, 0xA7F6,
8375 0xAB53, 0xAB53, 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17,
8376 0xFF41, 0xFF5A, 0x10428, 0x1044F, 0x104D8, 0x104FB, 0x10597, 0x105A1,
8377 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10CC0, 0x10CF2,
8378 0x118C0, 0x118DF, 0x16E60, 0x16E7F, 0x1E922, 0x1E943,
8379 // #58 (8913+23): bp=Dash
8380 0x002D, 0x002D, 0x058A, 0x058A, 0x05BE, 0x05BE, 0x1400, 0x1400,
8381 0x1806, 0x1806, 0x2010, 0x2015, 0x2053, 0x2053, 0x207B, 0x207B,
8382 0x208B, 0x208B, 0x2212, 0x2212, 0x2E17, 0x2E17, 0x2E1A, 0x2E1A,
8383 0x2E3A, 0x2E3B, 0x2E40, 0x2E40, 0x2E5D, 0x2E5D, 0x301C, 0x301C,
8384 0x3030, 0x3030, 0x30A0, 0x30A0, 0xFE31, 0xFE32, 0xFE58, 0xFE58,
8385 0xFE63, 0xFE63, 0xFF0D, 0xFF0D, 0x10EAD, 0x10EAD,
8386 // #59 (8936+17): bp=Default_Ignorable_Code_Point:DI
8387 0x00AD, 0x00AD, 0x034F, 0x034F, 0x061C, 0x061C, 0x115F, 0x1160,
8388 0x17B4, 0x17B5, 0x180B, 0x180F, 0x200B, 0x200F, 0x202A, 0x202E,
8389 0x2060, 0x206F, 0x3164, 0x3164, 0xFE00, 0xFE0F, 0xFEFF, 0xFEFF,
8390 0xFFA0, 0xFFA0, 0xFFF0, 0xFFF8, 0x1BCA0, 0x1BCA3, 0x1D173, 0x1D17A,
8391 0xE0000, 0xE0FFF,
8392 // #60 (8953+8): bp=Deprecated:Dep
8393 0x0149, 0x0149, 0x0673, 0x0673, 0x0F77, 0x0F77, 0x0F79, 0x0F79,
8394 0x17A3, 0x17A4, 0x206A, 0x206F, 0x2329, 0x232A, 0xE0001, 0xE0001,
8395 // #61 (8961+195): bp=Diacritic:Dia
8396 0x005E, 0x005E, 0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AF, 0x00AF,
8397 0x00B4, 0x00B4, 0x00B7, 0x00B8, 0x02B0, 0x034E, 0x0350, 0x0357,
8398 0x035D, 0x0362, 0x0374, 0x0375, 0x037A, 0x037A, 0x0384, 0x0385,
8399 0x0483, 0x0487, 0x0559, 0x0559, 0x0591, 0x05A1, 0x05A3, 0x05BD,
8400 0x05BF, 0x05BF, 0x05C1, 0x05C2, 0x05C4, 0x05C4, 0x064B, 0x0652,
8401 0x0657, 0x0658, 0x06DF, 0x06E0, 0x06E5, 0x06E6, 0x06EA, 0x06EC,
8402 0x0730, 0x074A, 0x07A6, 0x07B0, 0x07EB, 0x07F5, 0x0818, 0x0819,
8403 0x0898, 0x089F, 0x08C9, 0x08D2, 0x08E3, 0x08FE, 0x093C, 0x093C,
8404 0x094D, 0x094D, 0x0951, 0x0954, 0x0971, 0x0971, 0x09BC, 0x09BC,
8405 0x09CD, 0x09CD, 0x0A3C, 0x0A3C, 0x0A4D, 0x0A4D, 0x0ABC, 0x0ABC,
8406 0x0ACD, 0x0ACD, 0x0AFD, 0x0AFF, 0x0B3C, 0x0B3C, 0x0B4D, 0x0B4D,
8407 0x0B55, 0x0B55, 0x0BCD, 0x0BCD, 0x0C3C, 0x0C3C, 0x0C4D, 0x0C4D,
8408 0x0CBC, 0x0CBC, 0x0CCD, 0x0CCD, 0x0D3B, 0x0D3C, 0x0D4D, 0x0D4D,
8409 0x0DCA, 0x0DCA, 0x0E47, 0x0E4C, 0x0E4E, 0x0E4E, 0x0EBA, 0x0EBA,
8410 0x0EC8, 0x0ECC, 0x0F18, 0x0F19, 0x0F35, 0x0F35, 0x0F37, 0x0F37,
8411 0x0F39, 0x0F39, 0x0F3E, 0x0F3F, 0x0F82, 0x0F84, 0x0F86, 0x0F87,
8412 0x0FC6, 0x0FC6, 0x1037, 0x1037, 0x1039, 0x103A, 0x1063, 0x1064,
8413 0x1069, 0x106D, 0x1087, 0x108D, 0x108F, 0x108F, 0x109A, 0x109B,
8414 0x135D, 0x135F, 0x1714, 0x1715, 0x17C9, 0x17D3, 0x17DD, 0x17DD,
8415 0x1939, 0x193B, 0x1A75, 0x1A7C, 0x1A7F, 0x1A7F, 0x1AB0, 0x1ABE,
8416 0x1AC1, 0x1ACB, 0x1B34, 0x1B34, 0x1B44, 0x1B44, 0x1B6B, 0x1B73,
8417 0x1BAA, 0x1BAB, 0x1C36, 0x1C37, 0x1C78, 0x1C7D, 0x1CD0, 0x1CE8,
8418 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF7, 0x1CF9, 0x1D2C, 0x1D6A,
8419 0x1DC4, 0x1DCF, 0x1DF5, 0x1DFF, 0x1FBD, 0x1FBD, 0x1FBF, 0x1FC1,
8420 0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF, 0x1FED, 0x1FEF, 0x1FFD, 0x1FFE,
8421 0x2CEF, 0x2CF1, 0x2E2F, 0x2E2F, 0x302A, 0x302F, 0x3099, 0x309C,
8422 0x30FC, 0x30FC, 0xA66F, 0xA66F, 0xA67C, 0xA67D, 0xA67F, 0xA67F,
8423 0xA69C, 0xA69D, 0xA6F0, 0xA6F1, 0xA700, 0xA721, 0xA788, 0xA78A,
8424 0xA7F8, 0xA7F9, 0xA8C4, 0xA8C4, 0xA8E0, 0xA8F1, 0xA92B, 0xA92E,
8425 0xA953, 0xA953, 0xA9B3, 0xA9B3, 0xA9C0, 0xA9C0, 0xA9E5, 0xA9E5,
8426 0xAA7B, 0xAA7D, 0xAABF, 0xAAC2, 0xAAF6, 0xAAF6, 0xAB5B, 0xAB5F,
8427 0xAB69, 0xAB6B, 0xABEC, 0xABED, 0xFB1E, 0xFB1E, 0xFE20, 0xFE2F,
8428 0xFF3E, 0xFF3E, 0xFF40, 0xFF40, 0xFF70, 0xFF70, 0xFF9E, 0xFF9F,
8429 0xFFE3, 0xFFE3, 0x102E0, 0x102E0, 0x10780, 0x10785, 0x10787, 0x107B0,
8430 0x107B2, 0x107BA, 0x10AE5, 0x10AE6, 0x10D22, 0x10D27, 0x10EFD, 0x10EFF,
8431 0x10F46, 0x10F50, 0x10F82, 0x10F85, 0x11046, 0x11046, 0x11070, 0x11070,
8432 0x110B9, 0x110BA, 0x11133, 0x11134, 0x11173, 0x11173, 0x111C0, 0x111C0,
8433 0x111CA, 0x111CC, 0x11235, 0x11236, 0x112E9, 0x112EA, 0x1133C, 0x1133C,
8434 0x1134D, 0x1134D, 0x11366, 0x1136C, 0x11370, 0x11374, 0x11442, 0x11442,
8435 0x11446, 0x11446, 0x114C2, 0x114C3, 0x115BF, 0x115C0, 0x1163F, 0x1163F,
8436 0x116B6, 0x116B7, 0x1172B, 0x1172B, 0x11839, 0x1183A, 0x1193D, 0x1193E,
8437 0x11943, 0x11943, 0x119E0, 0x119E0, 0x11A34, 0x11A34, 0x11A47, 0x11A47,
8438 0x11A99, 0x11A99, 0x11C3F, 0x11C3F, 0x11D42, 0x11D42, 0x11D44, 0x11D45,
8439 0x11D97, 0x11D97, 0x13447, 0x13455, 0x16AF0, 0x16AF4, 0x16B30, 0x16B36,
8440 0x16F8F, 0x16F9F, 0x16FF0, 0x16FF1, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB,
8441 0x1AFFD, 0x1AFFE, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167, 0x1D169,
8442 0x1D16D, 0x1D172, 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD,
8443 0x1E030, 0x1E06D, 0x1E130, 0x1E136, 0x1E2AE, 0x1E2AE, 0x1E2EC, 0x1E2EF,
8444 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E946, 0x1E948, 0x1E94A,
8445 // #62 (9156+151): bp=Emoji
8446 0x0023, 0x0023, 0x002A, 0x002A, 0x0030, 0x0039, 0x00A9, 0x00A9,
8447 0x00AE, 0x00AE, 0x203C, 0x203C, 0x2049, 0x2049, 0x2122, 0x2122,
8448 0x2139, 0x2139, 0x2194, 0x2199, 0x21A9, 0x21AA, 0x231A, 0x231B,
8449 0x2328, 0x2328, 0x23CF, 0x23CF, 0x23E9, 0x23F3, 0x23F8, 0x23FA,
8450 0x24C2, 0x24C2, 0x25AA, 0x25AB, 0x25B6, 0x25B6, 0x25C0, 0x25C0,
8451 0x25FB, 0x25FE, 0x2600, 0x2604, 0x260E, 0x260E, 0x2611, 0x2611,
8452 0x2614, 0x2615, 0x2618, 0x2618, 0x261D, 0x261D, 0x2620, 0x2620,
8453 0x2622, 0x2623, 0x2626, 0x2626, 0x262A, 0x262A, 0x262E, 0x262F,
8454 0x2638, 0x263A, 0x2640, 0x2640, 0x2642, 0x2642, 0x2648, 0x2653,
8455 0x265F, 0x2660, 0x2663, 0x2663, 0x2665, 0x2666, 0x2668, 0x2668,
8456 0x267B, 0x267B, 0x267E, 0x267F, 0x2692, 0x2697, 0x2699, 0x2699,
8457 0x269B, 0x269C, 0x26A0, 0x26A1, 0x26A7, 0x26A7, 0x26AA, 0x26AB,
8458 0x26B0, 0x26B1, 0x26BD, 0x26BE, 0x26C4, 0x26C5, 0x26C8, 0x26C8,
8459 0x26CE, 0x26CF, 0x26D1, 0x26D1, 0x26D3, 0x26D4, 0x26E9, 0x26EA,
8460 0x26F0, 0x26F5, 0x26F7, 0x26FA, 0x26FD, 0x26FD, 0x2702, 0x2702,
8461 0x2705, 0x2705, 0x2708, 0x270D, 0x270F, 0x270F, 0x2712, 0x2712,
8462 0x2714, 0x2714, 0x2716, 0x2716, 0x271D, 0x271D, 0x2721, 0x2721,
8463 0x2728, 0x2728, 0x2733, 0x2734, 0x2744, 0x2744, 0x2747, 0x2747,
8464 0x274C, 0x274C, 0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757,
8465 0x2763, 0x2764, 0x2795, 0x2797, 0x27A1, 0x27A1, 0x27B0, 0x27B0,
8466 0x27BF, 0x27BF, 0x2934, 0x2935, 0x2B05, 0x2B07, 0x2B1B, 0x2B1C,
8467 0x2B50, 0x2B50, 0x2B55, 0x2B55, 0x3030, 0x3030, 0x303D, 0x303D,
8468 0x3297, 0x3297, 0x3299, 0x3299, 0x1F004, 0x1F004, 0x1F0CF, 0x1F0CF,
8469 0x1F170, 0x1F171, 0x1F17E, 0x1F17F, 0x1F18E, 0x1F18E, 0x1F191, 0x1F19A,
8470 0x1F1E6, 0x1F1FF, 0x1F201, 0x1F202, 0x1F21A, 0x1F21A, 0x1F22F, 0x1F22F,
8471 0x1F232, 0x1F23A, 0x1F250, 0x1F251, 0x1F300, 0x1F321, 0x1F324, 0x1F393,
8472 0x1F396, 0x1F397, 0x1F399, 0x1F39B, 0x1F39E, 0x1F3F0, 0x1F3F3, 0x1F3F5,
8473 0x1F3F7, 0x1F4FD, 0x1F4FF, 0x1F53D, 0x1F549, 0x1F54E, 0x1F550, 0x1F567,
8474 0x1F56F, 0x1F570, 0x1F573, 0x1F57A, 0x1F587, 0x1F587, 0x1F58A, 0x1F58D,
8475 0x1F590, 0x1F590, 0x1F595, 0x1F596, 0x1F5A4, 0x1F5A5, 0x1F5A8, 0x1F5A8,
8476 0x1F5B1, 0x1F5B2, 0x1F5BC, 0x1F5BC, 0x1F5C2, 0x1F5C4, 0x1F5D1, 0x1F5D3,
8477 0x1F5DC, 0x1F5DE, 0x1F5E1, 0x1F5E1, 0x1F5E3, 0x1F5E3, 0x1F5E8, 0x1F5E8,
8478 0x1F5EF, 0x1F5EF, 0x1F5F3, 0x1F5F3, 0x1F5FA, 0x1F64F, 0x1F680, 0x1F6C5,
8479 0x1F6CB, 0x1F6D2, 0x1F6D5, 0x1F6D7, 0x1F6DC, 0x1F6E5, 0x1F6E9, 0x1F6E9,
8480 0x1F6EB, 0x1F6EC, 0x1F6F0, 0x1F6F0, 0x1F6F3, 0x1F6FC, 0x1F7E0, 0x1F7EB,
8481 0x1F7F0, 0x1F7F0, 0x1F90C, 0x1F93A, 0x1F93C, 0x1F945, 0x1F947, 0x1F9FF,
8482 0x1FA70, 0x1FA7C, 0x1FA80, 0x1FA88, 0x1FA90, 0x1FABD, 0x1FABF, 0x1FAC5,
8483 0x1FACE, 0x1FADB, 0x1FAE0, 0x1FAE8, 0x1FAF0, 0x1FAF8,
8484 // #63 (9307+10): bp=Emoji_Component:EComp
8485 0x0023, 0x0023, 0x002A, 0x002A, 0x0030, 0x0039, 0x200D, 0x200D,
8486 0x20E3, 0x20E3, 0xFE0F, 0xFE0F, 0x1F1E6, 0x1F1FF, 0x1F3FB, 0x1F3FF,
8487 0x1F9B0, 0x1F9B3, 0xE0020, 0xE007F,
8488 // #64 (9317+1): bp=Emoji_Modifier:EMod
8489 0x1F3FB, 0x1F3FF,
8490 // #65 (9318+40): bp=Emoji_Modifier_Base:EBase
8491 0x261D, 0x261D, 0x26F9, 0x26F9, 0x270A, 0x270D, 0x1F385, 0x1F385,
8492 0x1F3C2, 0x1F3C4, 0x1F3C7, 0x1F3C7, 0x1F3CA, 0x1F3CC, 0x1F442, 0x1F443,
8493 0x1F446, 0x1F450, 0x1F466, 0x1F478, 0x1F47C, 0x1F47C, 0x1F481, 0x1F483,
8494 0x1F485, 0x1F487, 0x1F48F, 0x1F48F, 0x1F491, 0x1F491, 0x1F4AA, 0x1F4AA,
8495 0x1F574, 0x1F575, 0x1F57A, 0x1F57A, 0x1F590, 0x1F590, 0x1F595, 0x1F596,
8496 0x1F645, 0x1F647, 0x1F64B, 0x1F64F, 0x1F6A3, 0x1F6A3, 0x1F6B4, 0x1F6B6,
8497 0x1F6C0, 0x1F6C0, 0x1F6CC, 0x1F6CC, 0x1F90C, 0x1F90C, 0x1F90F, 0x1F90F,
8498 0x1F918, 0x1F91F, 0x1F926, 0x1F926, 0x1F930, 0x1F939, 0x1F93C, 0x1F93E,
8499 0x1F977, 0x1F977, 0x1F9B5, 0x1F9B6, 0x1F9B8, 0x1F9B9, 0x1F9BB, 0x1F9BB,
8500 0x1F9CD, 0x1F9CF, 0x1F9D1, 0x1F9DD, 0x1FAC3, 0x1FAC5, 0x1FAF0, 0x1FAF8,
8501 // #66 (9358+81): bp=Emoji_Presentation:EPres
8502 0x231A, 0x231B, 0x23E9, 0x23EC, 0x23F0, 0x23F0, 0x23F3, 0x23F3,
8503 0x25FD, 0x25FE, 0x2614, 0x2615, 0x2648, 0x2653, 0x267F, 0x267F,
8504 0x2693, 0x2693, 0x26A1, 0x26A1, 0x26AA, 0x26AB, 0x26BD, 0x26BE,
8505 0x26C4, 0x26C5, 0x26CE, 0x26CE, 0x26D4, 0x26D4, 0x26EA, 0x26EA,
8506 0x26F2, 0x26F3, 0x26F5, 0x26F5, 0x26FA, 0x26FA, 0x26FD, 0x26FD,
8507 0x2705, 0x2705, 0x270A, 0x270B, 0x2728, 0x2728, 0x274C, 0x274C,
8508 0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757, 0x2795, 0x2797,
8509 0x27B0, 0x27B0, 0x27BF, 0x27BF, 0x2B1B, 0x2B1C, 0x2B50, 0x2B50,
8510 0x2B55, 0x2B55, 0x1F004, 0x1F004, 0x1F0CF, 0x1F0CF, 0x1F18E, 0x1F18E,
8511 0x1F191, 0x1F19A, 0x1F1E6, 0x1F1FF, 0x1F201, 0x1F201, 0x1F21A, 0x1F21A,
8512 0x1F22F, 0x1F22F, 0x1F232, 0x1F236, 0x1F238, 0x1F23A, 0x1F250, 0x1F251,
8513 0x1F300, 0x1F320, 0x1F32D, 0x1F335, 0x1F337, 0x1F37C, 0x1F37E, 0x1F393,
8514 0x1F3A0, 0x1F3CA, 0x1F3CF, 0x1F3D3, 0x1F3E0, 0x1F3F0, 0x1F3F4, 0x1F3F4,
8515 0x1F3F8, 0x1F43E, 0x1F440, 0x1F440, 0x1F442, 0x1F4FC, 0x1F4FF, 0x1F53D,
8516 0x1F54B, 0x1F54E, 0x1F550, 0x1F567, 0x1F57A, 0x1F57A, 0x1F595, 0x1F596,
8517 0x1F5A4, 0x1F5A4, 0x1F5FB, 0x1F64F, 0x1F680, 0x1F6C5, 0x1F6CC, 0x1F6CC,
8518 0x1F6D0, 0x1F6D2, 0x1F6D5, 0x1F6D7, 0x1F6DC, 0x1F6DF, 0x1F6EB, 0x1F6EC,
8519 0x1F6F4, 0x1F6FC, 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0, 0x1F90C, 0x1F93A,
8520 0x1F93C, 0x1F945, 0x1F947, 0x1F9FF, 0x1FA70, 0x1FA7C, 0x1FA80, 0x1FA88,
8521 0x1FA90, 0x1FABD, 0x1FABF, 0x1FAC5, 0x1FACE, 0x1FADB, 0x1FAE0, 0x1FAE8,
8522 0x1FAF0, 0x1FAF8,
8523 // #67 (9439+78): bp=Extended_Pictographic:ExtPict
8524 0x00A9, 0x00A9, 0x00AE, 0x00AE, 0x203C, 0x203C, 0x2049, 0x2049,
8525 0x2122, 0x2122, 0x2139, 0x2139, 0x2194, 0x2199, 0x21A9, 0x21AA,
8526 0x231A, 0x231B, 0x2328, 0x2328, 0x2388, 0x2388, 0x23CF, 0x23CF,
8527 0x23E9, 0x23F3, 0x23F8, 0x23FA, 0x24C2, 0x24C2, 0x25AA, 0x25AB,
8528 0x25B6, 0x25B6, 0x25C0, 0x25C0, 0x25FB, 0x25FE, 0x2600, 0x2605,
8529 0x2607, 0x2612, 0x2614, 0x2685, 0x2690, 0x2705, 0x2708, 0x2712,
8530 0x2714, 0x2714, 0x2716, 0x2716, 0x271D, 0x271D, 0x2721, 0x2721,
8531 0x2728, 0x2728, 0x2733, 0x2734, 0x2744, 0x2744, 0x2747, 0x2747,
8532 0x274C, 0x274C, 0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757,
8533 0x2763, 0x2767, 0x2795, 0x2797, 0x27A1, 0x27A1, 0x27B0, 0x27B0,
8534 0x27BF, 0x27BF, 0x2934, 0x2935, 0x2B05, 0x2B07, 0x2B1B, 0x2B1C,
8535 0x2B50, 0x2B50, 0x2B55, 0x2B55, 0x3030, 0x3030, 0x303D, 0x303D,
8536 0x3297, 0x3297, 0x3299, 0x3299, 0x1F000, 0x1F0FF, 0x1F10D, 0x1F10F,
8537 0x1F12F, 0x1F12F, 0x1F16C, 0x1F171, 0x1F17E, 0x1F17F, 0x1F18E, 0x1F18E,
8538 0x1F191, 0x1F19A, 0x1F1AD, 0x1F1E5, 0x1F201, 0x1F20F, 0x1F21A, 0x1F21A,
8539 0x1F22F, 0x1F22F, 0x1F232, 0x1F23A, 0x1F23C, 0x1F23F, 0x1F249, 0x1F3FA,
8540 0x1F400, 0x1F53D, 0x1F546, 0x1F64F, 0x1F680, 0x1F6FF, 0x1F774, 0x1F77F,
8541 0x1F7D5, 0x1F7FF, 0x1F80C, 0x1F80F, 0x1F848, 0x1F84F, 0x1F85A, 0x1F85F,
8542 0x1F888, 0x1F88F, 0x1F8AE, 0x1F8FF, 0x1F90C, 0x1F93A, 0x1F93C, 0x1F945,
8543 0x1F947, 0x1FAFF, 0x1FC00, 0x1FFFD,
8544 // #68 (9517+33): bp=Extender:Ext
8545 0x00B7, 0x00B7, 0x02D0, 0x02D1, 0x0640, 0x0640, 0x07FA, 0x07FA,
8546 0x0B55, 0x0B55, 0x0E46, 0x0E46, 0x0EC6, 0x0EC6, 0x180A, 0x180A,
8547 0x1843, 0x1843, 0x1AA7, 0x1AA7, 0x1C36, 0x1C36, 0x1C7B, 0x1C7B,
8548 0x3005, 0x3005, 0x3031, 0x3035, 0x309D, 0x309E, 0x30FC, 0x30FE,
8549 0xA015, 0xA015, 0xA60C, 0xA60C, 0xA9CF, 0xA9CF, 0xA9E6, 0xA9E6,
8550 0xAA70, 0xAA70, 0xAADD, 0xAADD, 0xAAF3, 0xAAF4, 0xFF70, 0xFF70,
8551 0x10781, 0x10782, 0x1135D, 0x1135D, 0x115C6, 0x115C8, 0x11A98, 0x11A98,
8552 0x16B42, 0x16B43, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3, 0x1E13C, 0x1E13D,
8553 0x1E944, 0x1E946,
8554 // #69 (9550+875): bp=Grapheme_Base:Gr_Base
8555 0x0020, 0x007E, 0x00A0, 0x00AC, 0x00AE, 0x02FF, 0x0370, 0x0377,
8556 0x037A, 0x037F, 0x0384, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1,
8557 0x03A3, 0x0482, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x058A,
8558 0x058D, 0x058F, 0x05BE, 0x05BE, 0x05C0, 0x05C0, 0x05C3, 0x05C3,
8559 0x05C6, 0x05C6, 0x05D0, 0x05EA, 0x05EF, 0x05F4, 0x0606, 0x060F,
8560 0x061B, 0x061B, 0x061D, 0x064A, 0x0660, 0x066F, 0x0671, 0x06D5,
8561 0x06DE, 0x06DE, 0x06E5, 0x06E6, 0x06E9, 0x06E9, 0x06EE, 0x070D,
8562 0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1,
8563 0x07C0, 0x07EA, 0x07F4, 0x07FA, 0x07FE, 0x0815, 0x081A, 0x081A,
8564 0x0824, 0x0824, 0x0828, 0x0828, 0x0830, 0x083E, 0x0840, 0x0858,
8565 0x085E, 0x085E, 0x0860, 0x086A, 0x0870, 0x088E, 0x08A0, 0x08C9,
8566 0x0903, 0x0939, 0x093B, 0x093B, 0x093D, 0x0940, 0x0949, 0x094C,
8567 0x094E, 0x0950, 0x0958, 0x0961, 0x0964, 0x0980, 0x0982, 0x0983,
8568 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0,
8569 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD, 0x09BF, 0x09C0,
8570 0x09C7, 0x09C8, 0x09CB, 0x09CC, 0x09CE, 0x09CE, 0x09DC, 0x09DD,
8571 0x09DF, 0x09E1, 0x09E6, 0x09FD, 0x0A03, 0x0A03, 0x0A05, 0x0A0A,
8572 0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33,
8573 0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A3E, 0x0A40, 0x0A59, 0x0A5C,
8574 0x0A5E, 0x0A5E, 0x0A66, 0x0A6F, 0x0A72, 0x0A74, 0x0A76, 0x0A76,
8575 0x0A83, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
8576 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0AC0,
8577 0x0AC9, 0x0AC9, 0x0ACB, 0x0ACC, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1,
8578 0x0AE6, 0x0AF1, 0x0AF9, 0x0AF9, 0x0B02, 0x0B03, 0x0B05, 0x0B0C,
8579 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
8580 0x0B35, 0x0B39, 0x0B3D, 0x0B3D, 0x0B40, 0x0B40, 0x0B47, 0x0B48,
8581 0x0B4B, 0x0B4C, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B66, 0x0B77,
8582 0x0B83, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95,
8583 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4,
8584 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBF, 0x0BBF, 0x0BC1, 0x0BC2,
8585 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC, 0x0BD0, 0x0BD0, 0x0BE6, 0x0BFA,
8586 0x0C01, 0x0C03, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28,
8587 0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C41, 0x0C44, 0x0C58, 0x0C5A,
8588 0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C66, 0x0C6F, 0x0C77, 0x0C80,
8589 0x0C82, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3,
8590 0x0CB5, 0x0CB9, 0x0CBD, 0x0CBE, 0x0CC0, 0x0CC1, 0x0CC3, 0x0CC4,
8591 0x0CC7, 0x0CC8, 0x0CCA, 0x0CCB, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1,
8592 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF3, 0x0D02, 0x0D0C, 0x0D0E, 0x0D10,
8593 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D, 0x0D3F, 0x0D40, 0x0D46, 0x0D48,
8594 0x0D4A, 0x0D4C, 0x0D4E, 0x0D4F, 0x0D54, 0x0D56, 0x0D58, 0x0D61,
8595 0x0D66, 0x0D7F, 0x0D82, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1,
8596 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DD0, 0x0DD1,
8597 0x0DD8, 0x0DDE, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF4, 0x0E01, 0x0E30,
8598 0x0E32, 0x0E33, 0x0E3F, 0x0E46, 0x0E4F, 0x0E5B, 0x0E81, 0x0E82,
8599 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5,
8600 0x0EA7, 0x0EB0, 0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD, 0x0EC0, 0x0EC4,
8601 0x0EC6, 0x0EC6, 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F17,
8602 0x0F1A, 0x0F34, 0x0F36, 0x0F36, 0x0F38, 0x0F38, 0x0F3A, 0x0F47,
8603 0x0F49, 0x0F6C, 0x0F7F, 0x0F7F, 0x0F85, 0x0F85, 0x0F88, 0x0F8C,
8604 0x0FBE, 0x0FC5, 0x0FC7, 0x0FCC, 0x0FCE, 0x0FDA, 0x1000, 0x102C,
8605 0x1031, 0x1031, 0x1038, 0x1038, 0x103B, 0x103C, 0x103F, 0x1057,
8606 0x105A, 0x105D, 0x1061, 0x1070, 0x1075, 0x1081, 0x1083, 0x1084,
8607 0x1087, 0x108C, 0x108E, 0x109C, 0x109E, 0x10C5, 0x10C7, 0x10C7,
8608 0x10CD, 0x10CD, 0x10D0, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256,
8609 0x1258, 0x1258, 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D,
8610 0x1290, 0x12B0, 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0,
8611 0x12C2, 0x12C5, 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315,
8612 0x1318, 0x135A, 0x1360, 0x137C, 0x1380, 0x1399, 0x13A0, 0x13F5,
8613 0x13F8, 0x13FD, 0x1400, 0x169C, 0x16A0, 0x16F8, 0x1700, 0x1711,
8614 0x1715, 0x1715, 0x171F, 0x1731, 0x1734, 0x1736, 0x1740, 0x1751,
8615 0x1760, 0x176C, 0x176E, 0x1770, 0x1780, 0x17B3, 0x17B6, 0x17B6,
8616 0x17BE, 0x17C5, 0x17C7, 0x17C8, 0x17D4, 0x17DC, 0x17E0, 0x17E9,
8617 0x17F0, 0x17F9, 0x1800, 0x180A, 0x1810, 0x1819, 0x1820, 0x1878,
8618 0x1880, 0x1884, 0x1887, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5,
8619 0x1900, 0x191E, 0x1923, 0x1926, 0x1929, 0x192B, 0x1930, 0x1931,
8620 0x1933, 0x1938, 0x1940, 0x1940, 0x1944, 0x196D, 0x1970, 0x1974,
8621 0x1980, 0x19AB, 0x19B0, 0x19C9, 0x19D0, 0x19DA, 0x19DE, 0x1A16,
8622 0x1A19, 0x1A1A, 0x1A1E, 0x1A55, 0x1A57, 0x1A57, 0x1A61, 0x1A61,
8623 0x1A63, 0x1A64, 0x1A6D, 0x1A72, 0x1A80, 0x1A89, 0x1A90, 0x1A99,
8624 0x1AA0, 0x1AAD, 0x1B04, 0x1B33, 0x1B3B, 0x1B3B, 0x1B3D, 0x1B41,
8625 0x1B43, 0x1B4C, 0x1B50, 0x1B6A, 0x1B74, 0x1B7E, 0x1B82, 0x1BA1,
8626 0x1BA6, 0x1BA7, 0x1BAA, 0x1BAA, 0x1BAE, 0x1BE5, 0x1BE7, 0x1BE7,
8627 0x1BEA, 0x1BEC, 0x1BEE, 0x1BEE, 0x1BF2, 0x1BF3, 0x1BFC, 0x1C2B,
8628 0x1C34, 0x1C35, 0x1C3B, 0x1C49, 0x1C4D, 0x1C88, 0x1C90, 0x1CBA,
8629 0x1CBD, 0x1CC7, 0x1CD3, 0x1CD3, 0x1CE1, 0x1CE1, 0x1CE9, 0x1CEC,
8630 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF7, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF,
8631 0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D,
8632 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D,
8633 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4, 0x1FC6, 0x1FD3,
8634 0x1FD6, 0x1FDB, 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFE,
8635 0x2000, 0x200A, 0x2010, 0x2027, 0x202F, 0x205F, 0x2070, 0x2071,
8636 0x2074, 0x208E, 0x2090, 0x209C, 0x20A0, 0x20C0, 0x2100, 0x218B,
8637 0x2190, 0x2426, 0x2440, 0x244A, 0x2460, 0x2B73, 0x2B76, 0x2B95,
8638 0x2B97, 0x2CEE, 0x2CF2, 0x2CF3, 0x2CF9, 0x2D25, 0x2D27, 0x2D27,
8639 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D70, 0x2D80, 0x2D96,
8640 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE,
8641 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE,
8642 0x2E00, 0x2E5D, 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5,
8643 0x2FF0, 0x3029, 0x3030, 0x303F, 0x3041, 0x3096, 0x309B, 0x30FF,
8644 0x3105, 0x312F, 0x3131, 0x318E, 0x3190, 0x31E3, 0x31EF, 0x321E,
8645 0x3220, 0xA48C, 0xA490, 0xA4C6, 0xA4D0, 0xA62B, 0xA640, 0xA66E,
8646 0xA673, 0xA673, 0xA67E, 0xA69D, 0xA6A0, 0xA6EF, 0xA6F2, 0xA6F7,
8647 0xA700, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9,
8648 0xA7F2, 0xA801, 0xA803, 0xA805, 0xA807, 0xA80A, 0xA80C, 0xA824,
8649 0xA827, 0xA82B, 0xA830, 0xA839, 0xA840, 0xA877, 0xA880, 0xA8C3,
8650 0xA8CE, 0xA8D9, 0xA8F2, 0xA8FE, 0xA900, 0xA925, 0xA92E, 0xA946,
8651 0xA952, 0xA953, 0xA95F, 0xA97C, 0xA983, 0xA9B2, 0xA9B4, 0xA9B5,
8652 0xA9BA, 0xA9BB, 0xA9BE, 0xA9CD, 0xA9CF, 0xA9D9, 0xA9DE, 0xA9E4,
8653 0xA9E6, 0xA9FE, 0xAA00, 0xAA28, 0xAA2F, 0xAA30, 0xAA33, 0xAA34,
8654 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA4D, 0xAA4D, 0xAA50, 0xAA59,
8655 0xAA5C, 0xAA7B, 0xAA7D, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6,
8656 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAAEB,
8657 0xAAEE, 0xAAF5, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16,
8658 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB6B, 0xAB70, 0xABE4,
8659 0xABE6, 0xABE7, 0xABE9, 0xABEC, 0xABF0, 0xABF9, 0xAC00, 0xD7A3,
8660 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, 0xFA70, 0xFAD9,
8661 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB1D, 0xFB1F, 0xFB36,
8662 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44,
8663 0xFB46, 0xFBC2, 0xFBD3, 0xFD8F, 0xFD92, 0xFDC7, 0xFDCF, 0xFDCF,
8664 0xFDF0, 0xFDFF, 0xFE10, 0xFE19, 0xFE30, 0xFE52, 0xFE54, 0xFE66,
8665 0xFE68, 0xFE6B, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0xFF01, 0xFF9D,
8666 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7,
8667 0xFFDA, 0xFFDC, 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFFC, 0xFFFD,
8668 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D,
8669 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10100, 0x10102,
8670 0x10107, 0x10133, 0x10137, 0x1018E, 0x10190, 0x1019C, 0x101A0, 0x101A0,
8671 0x101D0, 0x101FC, 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x102E1, 0x102FB,
8672 0x10300, 0x10323, 0x1032D, 0x1034A, 0x10350, 0x10375, 0x10380, 0x1039D,
8673 0x1039F, 0x103C3, 0x103C8, 0x103D5, 0x10400, 0x1049D, 0x104A0, 0x104A9,
8674 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527, 0x10530, 0x10563,
8675 0x1056F, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595,
8676 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC,
8677 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, 0x10780, 0x10785,
8678 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805, 0x10808, 0x10808,
8679 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C, 0x1083F, 0x10855,
8680 0x10857, 0x1089E, 0x108A7, 0x108AF, 0x108E0, 0x108F2, 0x108F4, 0x108F5,
8681 0x108FB, 0x1091B, 0x1091F, 0x10939, 0x1093F, 0x1093F, 0x10980, 0x109B7,
8682 0x109BC, 0x109CF, 0x109D2, 0x10A00, 0x10A10, 0x10A13, 0x10A15, 0x10A17,
8683 0x10A19, 0x10A35, 0x10A40, 0x10A48, 0x10A50, 0x10A58, 0x10A60, 0x10A9F,
8684 0x10AC0, 0x10AE4, 0x10AEB, 0x10AF6, 0x10B00, 0x10B35, 0x10B39, 0x10B55,
8685 0x10B58, 0x10B72, 0x10B78, 0x10B91, 0x10B99, 0x10B9C, 0x10BA9, 0x10BAF,
8686 0x10C00, 0x10C48, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10CFA, 0x10D23,
8687 0x10D30, 0x10D39, 0x10E60, 0x10E7E, 0x10E80, 0x10EA9, 0x10EAD, 0x10EAD,
8688 0x10EB0, 0x10EB1, 0x10F00, 0x10F27, 0x10F30, 0x10F45, 0x10F51, 0x10F59,
8689 0x10F70, 0x10F81, 0x10F86, 0x10F89, 0x10FB0, 0x10FCB, 0x10FE0, 0x10FF6,
8690 0x11000, 0x11000, 0x11002, 0x11037, 0x11047, 0x1104D, 0x11052, 0x1106F,
8691 0x11071, 0x11072, 0x11075, 0x11075, 0x11082, 0x110B2, 0x110B7, 0x110B8,
8692 0x110BB, 0x110BC, 0x110BE, 0x110C1, 0x110D0, 0x110E8, 0x110F0, 0x110F9,
8693 0x11103, 0x11126, 0x1112C, 0x1112C, 0x11136, 0x11147, 0x11150, 0x11172,
8694 0x11174, 0x11176, 0x11182, 0x111B5, 0x111BF, 0x111C8, 0x111CD, 0x111CE,
8695 0x111D0, 0x111DF, 0x111E1, 0x111F4, 0x11200, 0x11211, 0x11213, 0x1122E,
8696 0x11232, 0x11233, 0x11235, 0x11235, 0x11238, 0x1123D, 0x1123F, 0x11240,
8697 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D,
8698 0x1129F, 0x112A9, 0x112B0, 0x112DE, 0x112E0, 0x112E2, 0x112F0, 0x112F9,
8699 0x11302, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328,
8700 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133D, 0x1133D,
8701 0x1133F, 0x1133F, 0x11341, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D,
8702 0x11350, 0x11350, 0x1135D, 0x11363, 0x11400, 0x11437, 0x11440, 0x11441,
8703 0x11445, 0x11445, 0x11447, 0x1145B, 0x1145D, 0x1145D, 0x1145F, 0x11461,
8704 0x11480, 0x114AF, 0x114B1, 0x114B2, 0x114B9, 0x114B9, 0x114BB, 0x114BC,
8705 0x114BE, 0x114BE, 0x114C1, 0x114C1, 0x114C4, 0x114C7, 0x114D0, 0x114D9,
8706 0x11580, 0x115AE, 0x115B0, 0x115B1, 0x115B8, 0x115BB, 0x115BE, 0x115BE,
8707 0x115C1, 0x115DB, 0x11600, 0x11632, 0x1163B, 0x1163C, 0x1163E, 0x1163E,
8708 0x11641, 0x11644, 0x11650, 0x11659, 0x11660, 0x1166C, 0x11680, 0x116AA,
8709 0x116AC, 0x116AC, 0x116AE, 0x116AF, 0x116B6, 0x116B6, 0x116B8, 0x116B9,
8710 0x116C0, 0x116C9, 0x11700, 0x1171A, 0x11720, 0x11721, 0x11726, 0x11726,
8711 0x11730, 0x11746, 0x11800, 0x1182E, 0x11838, 0x11838, 0x1183B, 0x1183B,
8712 0x118A0, 0x118F2, 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913,
8713 0x11915, 0x11916, 0x11918, 0x1192F, 0x11931, 0x11935, 0x11937, 0x11938,
8714 0x1193D, 0x1193D, 0x1193F, 0x11942, 0x11944, 0x11946, 0x11950, 0x11959,
8715 0x119A0, 0x119A7, 0x119AA, 0x119D3, 0x119DC, 0x119DF, 0x119E1, 0x119E4,
8716 0x11A00, 0x11A00, 0x11A0B, 0x11A32, 0x11A39, 0x11A3A, 0x11A3F, 0x11A46,
8717 0x11A50, 0x11A50, 0x11A57, 0x11A58, 0x11A5C, 0x11A89, 0x11A97, 0x11A97,
8718 0x11A9A, 0x11AA2, 0x11AB0, 0x11AF8, 0x11B00, 0x11B09, 0x11C00, 0x11C08,
8719 0x11C0A, 0x11C2F, 0x11C3E, 0x11C3E, 0x11C40, 0x11C45, 0x11C50, 0x11C6C,
8720 0x11C70, 0x11C8F, 0x11CA9, 0x11CA9, 0x11CB1, 0x11CB1, 0x11CB4, 0x11CB4,
8721 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D30, 0x11D46, 0x11D46,
8722 0x11D50, 0x11D59, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E,
8723 0x11D93, 0x11D94, 0x11D96, 0x11D96, 0x11D98, 0x11D98, 0x11DA0, 0x11DA9,
8724 0x11EE0, 0x11EF2, 0x11EF5, 0x11EF8, 0x11F02, 0x11F10, 0x11F12, 0x11F35,
8725 0x11F3E, 0x11F3F, 0x11F41, 0x11F41, 0x11F43, 0x11F59, 0x11FB0, 0x11FB0,
8726 0x11FC0, 0x11FF1, 0x11FFF, 0x12399, 0x12400, 0x1246E, 0x12470, 0x12474,
8727 0x12480, 0x12543, 0x12F90, 0x12FF2, 0x13000, 0x1342F, 0x13441, 0x13446,
8728 0x14400, 0x14646, 0x16800, 0x16A38, 0x16A40, 0x16A5E, 0x16A60, 0x16A69,
8729 0x16A6E, 0x16ABE, 0x16AC0, 0x16AC9, 0x16AD0, 0x16AED, 0x16AF5, 0x16AF5,
8730 0x16B00, 0x16B2F, 0x16B37, 0x16B45, 0x16B50, 0x16B59, 0x16B5B, 0x16B61,
8731 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E9A, 0x16F00, 0x16F4A,
8732 0x16F50, 0x16F87, 0x16F93, 0x16F9F, 0x16FE0, 0x16FE3, 0x16FF0, 0x16FF1,
8733 0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3,
8734 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, 0x1B132, 0x1B132,
8735 0x1B150, 0x1B152, 0x1B155, 0x1B155, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB,
8736 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99,
8737 0x1BC9C, 0x1BC9C, 0x1BC9F, 0x1BC9F, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5,
8738 0x1D100, 0x1D126, 0x1D129, 0x1D164, 0x1D166, 0x1D166, 0x1D16A, 0x1D16D,
8739 0x1D183, 0x1D184, 0x1D18C, 0x1D1A9, 0x1D1AE, 0x1D1EA, 0x1D200, 0x1D241,
8740 0x1D245, 0x1D245, 0x1D2C0, 0x1D2D3, 0x1D2E0, 0x1D2F3, 0x1D300, 0x1D356,
8741 0x1D360, 0x1D378, 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F,
8742 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9,
8743 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A,
8744 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E,
8745 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5,
8746 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D9FF, 0x1DA37, 0x1DA3A, 0x1DA6D, 0x1DA74,
8747 0x1DA76, 0x1DA83, 0x1DA85, 0x1DA8B, 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A,
8748 0x1E030, 0x1E06D, 0x1E100, 0x1E12C, 0x1E137, 0x1E13D, 0x1E140, 0x1E149,
8749 0x1E14E, 0x1E14F, 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, 0x1E2F0, 0x1E2F9,
8750 0x1E2FF, 0x1E2FF, 0x1E4D0, 0x1E4EB, 0x1E4F0, 0x1E4F9, 0x1E7E0, 0x1E7E6,
8751 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4,
8752 0x1E8C7, 0x1E8CF, 0x1E900, 0x1E943, 0x1E94B, 0x1E94B, 0x1E950, 0x1E959,
8753 0x1E95E, 0x1E95F, 0x1EC71, 0x1ECB4, 0x1ED01, 0x1ED3D, 0x1EE00, 0x1EE03,
8754 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27,
8755 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B,
8756 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B,
8757 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57,
8758 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F,
8759 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72,
8760 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89,
8761 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB,
8762 0x1EEF0, 0x1EEF1, 0x1F000, 0x1F02B, 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE,
8763 0x1F0B1, 0x1F0BF, 0x1F0C1, 0x1F0CF, 0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD,
8764 0x1F1E6, 0x1F202, 0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F250, 0x1F251,
8765 0x1F260, 0x1F265, 0x1F300, 0x1F6D7, 0x1F6DC, 0x1F6EC, 0x1F6F0, 0x1F6FC,
8766 0x1F700, 0x1F776, 0x1F77B, 0x1F7D9, 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0,
8767 0x1F800, 0x1F80B, 0x1F810, 0x1F847, 0x1F850, 0x1F859, 0x1F860, 0x1F887,
8768 0x1F890, 0x1F8AD, 0x1F8B0, 0x1F8B1, 0x1F900, 0x1FA53, 0x1FA60, 0x1FA6D,
8769 0x1FA70, 0x1FA7C, 0x1FA80, 0x1FA88, 0x1FA90, 0x1FABD, 0x1FABF, 0x1FAC5,
8770 0x1FACE, 0x1FADB, 0x1FAE0, 0x1FAE8, 0x1FAF0, 0x1FAF8, 0x1FB00, 0x1FB92,
8771 0x1FB94, 0x1FBCA, 0x1FBF0, 0x1FBF9, 0x20000, 0x2A6DF, 0x2A700, 0x2B739,
8772 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D,
8773 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, 0x323AF,
8774 // #70 (10425+363): bp=Grapheme_Extend:Gr_Ext
8775 0x0300, 0x036F, 0x0483, 0x0489, 0x0591, 0x05BD, 0x05BF, 0x05BF,
8776 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x0610, 0x061A,
8777 0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DC, 0x06DF, 0x06E4,
8778 0x06E7, 0x06E8, 0x06EA, 0x06ED, 0x0711, 0x0711, 0x0730, 0x074A,
8779 0x07A6, 0x07B0, 0x07EB, 0x07F3, 0x07FD, 0x07FD, 0x0816, 0x0819,
8780 0x081B, 0x0823, 0x0825, 0x0827, 0x0829, 0x082D, 0x0859, 0x085B,
8781 0x0898, 0x089F, 0x08CA, 0x08E1, 0x08E3, 0x0902, 0x093A, 0x093A,
8782 0x093C, 0x093C, 0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957,
8783 0x0962, 0x0963, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09BE, 0x09BE,
8784 0x09C1, 0x09C4, 0x09CD, 0x09CD, 0x09D7, 0x09D7, 0x09E2, 0x09E3,
8785 0x09FE, 0x09FE, 0x0A01, 0x0A02, 0x0A3C, 0x0A3C, 0x0A41, 0x0A42,
8786 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, 0x0A51, 0x0A51, 0x0A70, 0x0A71,
8787 0x0A75, 0x0A75, 0x0A81, 0x0A82, 0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5,
8788 0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD, 0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF,
8789 0x0B01, 0x0B01, 0x0B3C, 0x0B3C, 0x0B3E, 0x0B3F, 0x0B41, 0x0B44,
8790 0x0B4D, 0x0B4D, 0x0B55, 0x0B57, 0x0B62, 0x0B63, 0x0B82, 0x0B82,
8791 0x0BBE, 0x0BBE, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD, 0x0BD7, 0x0BD7,
8792 0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40,
8793 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63,
8794 0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC2, 0x0CC2,
8795 0x0CC6, 0x0CC6, 0x0CCC, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CE2, 0x0CE3,
8796 0x0D00, 0x0D01, 0x0D3B, 0x0D3C, 0x0D3E, 0x0D3E, 0x0D41, 0x0D44,
8797 0x0D4D, 0x0D4D, 0x0D57, 0x0D57, 0x0D62, 0x0D63, 0x0D81, 0x0D81,
8798 0x0DCA, 0x0DCA, 0x0DCF, 0x0DCF, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6,
8799 0x0DDF, 0x0DDF, 0x0E31, 0x0E31, 0x0E34, 0x0E3A, 0x0E47, 0x0E4E,
8800 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC, 0x0EC8, 0x0ECE, 0x0F18, 0x0F19,
8801 0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39, 0x0F71, 0x0F7E,
8802 0x0F80, 0x0F84, 0x0F86, 0x0F87, 0x0F8D, 0x0F97, 0x0F99, 0x0FBC,
8803 0x0FC6, 0x0FC6, 0x102D, 0x1030, 0x1032, 0x1037, 0x1039, 0x103A,
8804 0x103D, 0x103E, 0x1058, 0x1059, 0x105E, 0x1060, 0x1071, 0x1074,
8805 0x1082, 0x1082, 0x1085, 0x1086, 0x108D, 0x108D, 0x109D, 0x109D,
8806 0x135D, 0x135F, 0x1712, 0x1714, 0x1732, 0x1733, 0x1752, 0x1753,
8807 0x1772, 0x1773, 0x17B4, 0x17B5, 0x17B7, 0x17BD, 0x17C6, 0x17C6,
8808 0x17C9, 0x17D3, 0x17DD, 0x17DD, 0x180B, 0x180D, 0x180F, 0x180F,
8809 0x1885, 0x1886, 0x18A9, 0x18A9, 0x1920, 0x1922, 0x1927, 0x1928,
8810 0x1932, 0x1932, 0x1939, 0x193B, 0x1A17, 0x1A18, 0x1A1B, 0x1A1B,
8811 0x1A56, 0x1A56, 0x1A58, 0x1A5E, 0x1A60, 0x1A60, 0x1A62, 0x1A62,
8812 0x1A65, 0x1A6C, 0x1A73, 0x1A7C, 0x1A7F, 0x1A7F, 0x1AB0, 0x1ACE,
8813 0x1B00, 0x1B03, 0x1B34, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42,
8814 0x1B6B, 0x1B73, 0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9,
8815 0x1BAB, 0x1BAD, 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED,
8816 0x1BEF, 0x1BF1, 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1CD0, 0x1CD2,
8817 0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4,
8818 0x1CF8, 0x1CF9, 0x1DC0, 0x1DFF, 0x200C, 0x200C, 0x20D0, 0x20F0,
8819 0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, 0x302A, 0x302F,
8820 0x3099, 0x309A, 0xA66F, 0xA672, 0xA674, 0xA67D, 0xA69E, 0xA69F,
8821 0xA6F0, 0xA6F1, 0xA802, 0xA802, 0xA806, 0xA806, 0xA80B, 0xA80B,
8822 0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5, 0xA8E0, 0xA8F1,
8823 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA951, 0xA980, 0xA982,
8824 0xA9B3, 0xA9B3, 0xA9B6, 0xA9B9, 0xA9BC, 0xA9BD, 0xA9E5, 0xA9E5,
8825 0xAA29, 0xAA2E, 0xAA31, 0xAA32, 0xAA35, 0xAA36, 0xAA43, 0xAA43,
8826 0xAA4C, 0xAA4C, 0xAA7C, 0xAA7C, 0xAAB0, 0xAAB0, 0xAAB2, 0xAAB4,
8827 0xAAB7, 0xAAB8, 0xAABE, 0xAABF, 0xAAC1, 0xAAC1, 0xAAEC, 0xAAED,
8828 0xAAF6, 0xAAF6, 0xABE5, 0xABE5, 0xABE8, 0xABE8, 0xABED, 0xABED,
8829 0xFB1E, 0xFB1E, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F, 0xFF9E, 0xFF9F,
8830 0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10A01, 0x10A03,
8831 0x10A05, 0x10A06, 0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F,
8832 0x10AE5, 0x10AE6, 0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10EFD, 0x10EFF,
8833 0x10F46, 0x10F50, 0x10F82, 0x10F85, 0x11001, 0x11001, 0x11038, 0x11046,
8834 0x11070, 0x11070, 0x11073, 0x11074, 0x1107F, 0x11081, 0x110B3, 0x110B6,
8835 0x110B9, 0x110BA, 0x110C2, 0x110C2, 0x11100, 0x11102, 0x11127, 0x1112B,
8836 0x1112D, 0x11134, 0x11173, 0x11173, 0x11180, 0x11181, 0x111B6, 0x111BE,
8837 0x111C9, 0x111CC, 0x111CF, 0x111CF, 0x1122F, 0x11231, 0x11234, 0x11234,
8838 0x11236, 0x11237, 0x1123E, 0x1123E, 0x11241, 0x11241, 0x112DF, 0x112DF,
8839 0x112E3, 0x112EA, 0x11300, 0x11301, 0x1133B, 0x1133C, 0x1133E, 0x1133E,
8840 0x11340, 0x11340, 0x11357, 0x11357, 0x11366, 0x1136C, 0x11370, 0x11374,
8841 0x11438, 0x1143F, 0x11442, 0x11444, 0x11446, 0x11446, 0x1145E, 0x1145E,
8842 0x114B0, 0x114B0, 0x114B3, 0x114B8, 0x114BA, 0x114BA, 0x114BD, 0x114BD,
8843 0x114BF, 0x114C0, 0x114C2, 0x114C3, 0x115AF, 0x115AF, 0x115B2, 0x115B5,
8844 0x115BC, 0x115BD, 0x115BF, 0x115C0, 0x115DC, 0x115DD, 0x11633, 0x1163A,
8845 0x1163D, 0x1163D, 0x1163F, 0x11640, 0x116AB, 0x116AB, 0x116AD, 0x116AD,
8846 0x116B0, 0x116B5, 0x116B7, 0x116B7, 0x1171D, 0x1171F, 0x11722, 0x11725,
8847 0x11727, 0x1172B, 0x1182F, 0x11837, 0x11839, 0x1183A, 0x11930, 0x11930,
8848 0x1193B, 0x1193C, 0x1193E, 0x1193E, 0x11943, 0x11943, 0x119D4, 0x119D7,
8849 0x119DA, 0x119DB, 0x119E0, 0x119E0, 0x11A01, 0x11A0A, 0x11A33, 0x11A38,
8850 0x11A3B, 0x11A3E, 0x11A47, 0x11A47, 0x11A51, 0x11A56, 0x11A59, 0x11A5B,
8851 0x11A8A, 0x11A96, 0x11A98, 0x11A99, 0x11C30, 0x11C36, 0x11C38, 0x11C3D,
8852 0x11C3F, 0x11C3F, 0x11C92, 0x11CA7, 0x11CAA, 0x11CB0, 0x11CB2, 0x11CB3,
8853 0x11CB5, 0x11CB6, 0x11D31, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D,
8854 0x11D3F, 0x11D45, 0x11D47, 0x11D47, 0x11D90, 0x11D91, 0x11D95, 0x11D95,
8855 0x11D97, 0x11D97, 0x11EF3, 0x11EF4, 0x11F00, 0x11F01, 0x11F36, 0x11F3A,
8856 0x11F40, 0x11F40, 0x11F42, 0x11F42, 0x13440, 0x13440, 0x13447, 0x13455,
8857 0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16F4F, 0x16F4F, 0x16F8F, 0x16F92,
8858 0x16FE4, 0x16FE4, 0x1BC9D, 0x1BC9E, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46,
8859 0x1D165, 0x1D165, 0x1D167, 0x1D169, 0x1D16E, 0x1D172, 0x1D17B, 0x1D182,
8860 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, 0x1DA00, 0x1DA36,
8861 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F,
8862 0x1DAA1, 0x1DAAF, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021,
8863 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E08F, 0x1E08F, 0x1E130, 0x1E136,
8864 0x1E2AE, 0x1E2AE, 0x1E2EC, 0x1E2EF, 0x1E4EC, 0x1E4EF, 0x1E8D0, 0x1E8D6,
8865 0x1E944, 0x1E94A, 0xE0020, 0xE007F, 0xE0100, 0xE01EF,
8866 // #71 (10788+6): bp=Hex_Digit:Hex
8867 0x0030, 0x0039, 0x0041, 0x0046, 0x0061, 0x0066, 0xFF10, 0xFF19,
8868 0xFF21, 0xFF26, 0xFF41, 0xFF46,
8869 // #72 (10794+3): bp=IDS_Binary_Operator:IDSB
8870 0x2FF0, 0x2FF1, 0x2FF4, 0x2FFD, 0x31EF, 0x31EF,
8871 // #73 (10797+1): bp=IDS_Trinary_Operator:IDST
8872 0x2FF2, 0x2FF3,
8873 // #74 (10798+769): bp=ID_Continue:IDC
8874 0x0030, 0x0039, 0x0041, 0x005A, 0x005F, 0x005F, 0x0061, 0x007A,
8875 0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00B7, 0x00B7, 0x00BA, 0x00BA,
8876 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, 0x02C6, 0x02D1,
8877 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, 0x0300, 0x0374,
8878 0x0376, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F, 0x0386, 0x038A,
8879 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481,
8880 0x0483, 0x0487, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x0559,
8881 0x0560, 0x0588, 0x0591, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x05C2,
8882 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F2,
8883 0x0610, 0x061A, 0x0620, 0x0669, 0x066E, 0x06D3, 0x06D5, 0x06DC,
8884 0x06DF, 0x06E8, 0x06EA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x074A,
8885 0x074D, 0x07B1, 0x07C0, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD,
8886 0x0800, 0x082D, 0x0840, 0x085B, 0x0860, 0x086A, 0x0870, 0x0887,
8887 0x0889, 0x088E, 0x0898, 0x08E1, 0x08E3, 0x0963, 0x0966, 0x096F,
8888 0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
8889 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4,
8890 0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD,
8891 0x09DF, 0x09E3, 0x09E6, 0x09F1, 0x09FC, 0x09FC, 0x09FE, 0x09FE,
8892 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
8893 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
8894 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
8895 0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A75,
8896 0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
8897 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5,
8898 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3,
8899 0x0AE6, 0x0AEF, 0x0AF9, 0x0AFF, 0x0B01, 0x0B03, 0x0B05, 0x0B0C,
8900 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
8901 0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D,
8902 0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B6F,
8903 0x0B71, 0x0B71, 0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90,
8904 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F,
8905 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2,
8906 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7,
8907 0x0BE6, 0x0BEF, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28,
8908 0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D,
8909 0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63,
8910 0x0C66, 0x0C6F, 0x0C80, 0x0C83, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90,
8911 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4,
8912 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE,
8913 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF3, 0x0D00, 0x0D0C,
8914 0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4E,
8915 0x0D54, 0x0D57, 0x0D5F, 0x0D63, 0x0D66, 0x0D6F, 0x0D7A, 0x0D7F,
8916 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB,
8917 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4,
8918 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF3,
8919 0x0E01, 0x0E3A, 0x0E40, 0x0E4E, 0x0E50, 0x0E59, 0x0E81, 0x0E82,
8920 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5,
8921 0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EC8, 0x0ECE,
8922 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, 0x0F18, 0x0F19,
8923 0x0F20, 0x0F29, 0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39,
8924 0x0F3E, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F84, 0x0F86, 0x0F97,
8925 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x1000, 0x1049, 0x1050, 0x109D,
8926 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
8927 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258,
8928 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0,
8929 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5,
8930 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A,
8931 0x135D, 0x135F, 0x1369, 0x1371, 0x1380, 0x138F, 0x13A0, 0x13F5,
8932 0x13F8, 0x13FD, 0x1401, 0x166C, 0x166F, 0x167F, 0x1681, 0x169A,
8933 0x16A0, 0x16EA, 0x16EE, 0x16F8, 0x1700, 0x1715, 0x171F, 0x1734,
8934 0x1740, 0x1753, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
8935 0x1780, 0x17D3, 0x17D7, 0x17D7, 0x17DC, 0x17DD, 0x17E0, 0x17E9,
8936 0x180B, 0x180D, 0x180F, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA,
8937 0x18B0, 0x18F5, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B,
8938 0x1946, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9,
8939 0x19D0, 0x19DA, 0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A60, 0x1A7C,
8940 0x1A7F, 0x1A89, 0x1A90, 0x1A99, 0x1AA7, 0x1AA7, 0x1AB0, 0x1ABD,
8941 0x1ABF, 0x1ACE, 0x1B00, 0x1B4C, 0x1B50, 0x1B59, 0x1B6B, 0x1B73,
8942 0x1B80, 0x1BF3, 0x1C00, 0x1C37, 0x1C40, 0x1C49, 0x1C4D, 0x1C7D,
8943 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CD0, 0x1CD2,
8944 0x1CD4, 0x1CFA, 0x1D00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45,
8945 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B,
8946 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC,
8947 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3,
8948 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC,
8949 0x200C, 0x200D, 0x203F, 0x2040, 0x2054, 0x2054, 0x2071, 0x2071,
8950 0x207F, 0x207F, 0x2090, 0x209C, 0x20D0, 0x20DC, 0x20E1, 0x20E1,
8951 0x20E5, 0x20F0, 0x2102, 0x2102, 0x2107, 0x2107, 0x210A, 0x2113,
8952 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126,
8953 0x2128, 0x2128, 0x212A, 0x2139, 0x213C, 0x213F, 0x2145, 0x2149,
8954 0x214E, 0x214E, 0x2160, 0x2188, 0x2C00, 0x2CE4, 0x2CEB, 0x2CF3,
8955 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0x2D30, 0x2D67,
8956 0x2D6F, 0x2D6F, 0x2D7F, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE,
8957 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE,
8958 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0x2DE0, 0x2DFF, 0x3005, 0x3007,
8959 0x3021, 0x302F, 0x3031, 0x3035, 0x3038, 0x303C, 0x3041, 0x3096,
8960 0x3099, 0x309F, 0x30A1, 0x30FF, 0x3105, 0x312F, 0x3131, 0x318E,
8961 0x31A0, 0x31BF, 0x31F0, 0x31FF, 0x3400, 0x4DBF, 0x4E00, 0xA48C,
8962 0xA4D0, 0xA4FD, 0xA500, 0xA60C, 0xA610, 0xA62B, 0xA640, 0xA66F,
8963 0xA674, 0xA67D, 0xA67F, 0xA6F1, 0xA717, 0xA71F, 0xA722, 0xA788,
8964 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9,
8965 0xA7F2, 0xA827, 0xA82C, 0xA82C, 0xA840, 0xA873, 0xA880, 0xA8C5,
8966 0xA8D0, 0xA8D9, 0xA8E0, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA92D,
8967 0xA930, 0xA953, 0xA960, 0xA97C, 0xA980, 0xA9C0, 0xA9CF, 0xA9D9,
8968 0xA9E0, 0xA9FE, 0xAA00, 0xAA36, 0xAA40, 0xAA4D, 0xAA50, 0xAA59,
8969 0xAA60, 0xAA76, 0xAA7A, 0xAAC2, 0xAADB, 0xAADD, 0xAAE0, 0xAAEF,
8970 0xAAF2, 0xAAF6, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16,
8971 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, 0xAB5C, 0xAB69,
8972 0xAB70, 0xABEA, 0xABEC, 0xABED, 0xABF0, 0xABF9, 0xAC00, 0xD7A3,
8973 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, 0xFA70, 0xFAD9,
8974 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB28, 0xFB2A, 0xFB36,
8975 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44,
8976 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F, 0xFD92, 0xFDC7,
8977 0xFDF0, 0xFDFB, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F, 0xFE33, 0xFE34,
8978 0xFE4D, 0xFE4F, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0xFF10, 0xFF19,
8979 0xFF21, 0xFF3A, 0xFF3F, 0xFF3F, 0xFF41, 0xFF5A, 0xFF65, 0xFFBE,
8980 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC,
8981 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D,
8982 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10140, 0x10174,
8983 0x101FD, 0x101FD, 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x102E0, 0x102E0,
8984 0x10300, 0x1031F, 0x1032D, 0x1034A, 0x10350, 0x1037A, 0x10380, 0x1039D,
8985 0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 0x1049D,
8986 0x104A0, 0x104A9, 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527,
8987 0x10530, 0x10563, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592,
8988 0x10594, 0x10595, 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9,
8989 0x105BB, 0x105BC, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767,
8990 0x10780, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805,
8991 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C,
8992 0x1083F, 0x10855, 0x10860, 0x10876, 0x10880, 0x1089E, 0x108E0, 0x108F2,
8993 0x108F4, 0x108F5, 0x10900, 0x10915, 0x10920, 0x10939, 0x10980, 0x109B7,
8994 0x109BE, 0x109BF, 0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13,
8995 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F,
8996 0x10A60, 0x10A7C, 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE6,
8997 0x10B00, 0x10B35, 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91,
8998 0x10C00, 0x10C48, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D27,
8999 0x10D30, 0x10D39, 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1,
9000 0x10EFD, 0x10F1C, 0x10F27, 0x10F27, 0x10F30, 0x10F50, 0x10F70, 0x10F85,
9001 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, 0x11000, 0x11046, 0x11066, 0x11075,
9002 0x1107F, 0x110BA, 0x110C2, 0x110C2, 0x110D0, 0x110E8, 0x110F0, 0x110F9,
9003 0x11100, 0x11134, 0x11136, 0x1113F, 0x11144, 0x11147, 0x11150, 0x11173,
9004 0x11176, 0x11176, 0x11180, 0x111C4, 0x111C9, 0x111CC, 0x111CE, 0x111DA,
9005 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x11237, 0x1123E, 0x11241,
9006 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D,
9007 0x1129F, 0x112A8, 0x112B0, 0x112EA, 0x112F0, 0x112F9, 0x11300, 0x11303,
9008 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330,
9009 0x11332, 0x11333, 0x11335, 0x11339, 0x1133B, 0x11344, 0x11347, 0x11348,
9010 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357, 0x1135D, 0x11363,
9011 0x11366, 0x1136C, 0x11370, 0x11374, 0x11400, 0x1144A, 0x11450, 0x11459,
9012 0x1145E, 0x11461, 0x11480, 0x114C5, 0x114C7, 0x114C7, 0x114D0, 0x114D9,
9013 0x11580, 0x115B5, 0x115B8, 0x115C0, 0x115D8, 0x115DD, 0x11600, 0x11640,
9014 0x11644, 0x11644, 0x11650, 0x11659, 0x11680, 0x116B8, 0x116C0, 0x116C9,
9015 0x11700, 0x1171A, 0x1171D, 0x1172B, 0x11730, 0x11739, 0x11740, 0x11746,
9016 0x11800, 0x1183A, 0x118A0, 0x118E9, 0x118FF, 0x11906, 0x11909, 0x11909,
9017 0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x11935, 0x11937, 0x11938,
9018 0x1193B, 0x11943, 0x11950, 0x11959, 0x119A0, 0x119A7, 0x119AA, 0x119D7,
9019 0x119DA, 0x119E1, 0x119E3, 0x119E4, 0x11A00, 0x11A3E, 0x11A47, 0x11A47,
9020 0x11A50, 0x11A99, 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08,
9021 0x11C0A, 0x11C36, 0x11C38, 0x11C40, 0x11C50, 0x11C59, 0x11C72, 0x11C8F,
9022 0x11C92, 0x11CA7, 0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09,
9023 0x11D0B, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47,
9024 0x11D50, 0x11D59, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E,
9025 0x11D90, 0x11D91, 0x11D93, 0x11D98, 0x11DA0, 0x11DA9, 0x11EE0, 0x11EF6,
9026 0x11F00, 0x11F10, 0x11F12, 0x11F3A, 0x11F3E, 0x11F42, 0x11F50, 0x11F59,
9027 0x11FB0, 0x11FB0, 0x12000, 0x12399, 0x12400, 0x1246E, 0x12480, 0x12543,
9028 0x12F90, 0x12FF0, 0x13000, 0x1342F, 0x13440, 0x13455, 0x14400, 0x14646,
9029 0x16800, 0x16A38, 0x16A40, 0x16A5E, 0x16A60, 0x16A69, 0x16A70, 0x16ABE,
9030 0x16AC0, 0x16AC9, 0x16AD0, 0x16AED, 0x16AF0, 0x16AF4, 0x16B00, 0x16B36,
9031 0x16B40, 0x16B43, 0x16B50, 0x16B59, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F,
9032 0x16E40, 0x16E7F, 0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F,
9033 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE4, 0x16FF0, 0x16FF1, 0x17000, 0x187F7,
9034 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB,
9035 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, 0x1B132, 0x1B132, 0x1B150, 0x1B152,
9036 0x1B155, 0x1B155, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A,
9037 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1BC9D, 0x1BC9E,
9038 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D165, 0x1D169, 0x1D16D, 0x1D172,
9039 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244,
9040 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2,
9041 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB,
9042 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514,
9043 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544,
9044 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0,
9045 0x1D6C2, 0x1D6DA, 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734,
9046 0x1D736, 0x1D74E, 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8,
9047 0x1D7AA, 0x1D7C2, 0x1D7C4, 0x1D7CB, 0x1D7CE, 0x1D7FF, 0x1DA00, 0x1DA36,
9048 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F,
9049 0x1DAA1, 0x1DAAF, 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A, 0x1E000, 0x1E006,
9050 0x1E008, 0x1E018, 0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026, 0x1E02A,
9051 0x1E030, 0x1E06D, 0x1E08F, 0x1E08F, 0x1E100, 0x1E12C, 0x1E130, 0x1E13D,
9052 0x1E140, 0x1E149, 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AE, 0x1E2C0, 0x1E2F9,
9053 0x1E4D0, 0x1E4F9, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE,
9054 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E8D0, 0x1E8D6, 0x1E900, 0x1E94B,
9055 0x1E950, 0x1E959, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22,
9056 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37,
9057 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47,
9058 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52,
9059 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B,
9060 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64,
9061 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C,
9062 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3,
9063 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1FBF0, 0x1FBF9, 0x20000, 0x2A6DF,
9064 0x2A700, 0x2B739, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0,
9065 0x2EBF0, 0x2EE5D, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, 0x323AF,
9066 0xE0100, 0xE01EF,
9067 // #75 (11567+660): bp=ID_Start:IDS
9068 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5,
9069 0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1,
9070 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE,
9071 0x0370, 0x0374, 0x0376, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F,
9072 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1,
9073 0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F, 0x0531, 0x0556,
9074 0x0559, 0x0559, 0x0560, 0x0588, 0x05D0, 0x05EA, 0x05EF, 0x05F2,
9075 0x0620, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5,
9076 0x06E5, 0x06E6, 0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF,
9077 0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1,
9078 0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA, 0x0800, 0x0815,
9079 0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x0840, 0x0858,
9080 0x0860, 0x086A, 0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9,
9081 0x0904, 0x0939, 0x093D, 0x093D, 0x0950, 0x0950, 0x0958, 0x0961,
9082 0x0971, 0x0980, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
9083 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD,
9084 0x09CE, 0x09CE, 0x09DC, 0x09DD, 0x09DF, 0x09E1, 0x09F0, 0x09F1,
9085 0x09FC, 0x09FC, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
9086 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
9087 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A72, 0x0A74, 0x0A85, 0x0A8D,
9088 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3,
9089 0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1,
9090 0x0AF9, 0x0AF9, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28,
9091 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3D, 0x0B3D,
9092 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B71, 0x0B71, 0x0B83, 0x0B83,
9093 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A,
9094 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA,
9095 0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10,
9096 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C58, 0x0C5A,
9097 0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C80, 0x0C80, 0x0C85, 0x0C8C,
9098 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9,
9099 0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2,
9100 0x0D04, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D,
9101 0x0D4E, 0x0D4E, 0x0D54, 0x0D56, 0x0D5F, 0x0D61, 0x0D7A, 0x0D7F,
9102 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD,
9103 0x0DC0, 0x0DC6, 0x0E01, 0x0E30, 0x0E32, 0x0E33, 0x0E40, 0x0E46,
9104 0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3,
9105 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0, 0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD,
9106 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00,
9107 0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C, 0x1000, 0x102A,
9108 0x103F, 0x103F, 0x1050, 0x1055, 0x105A, 0x105D, 0x1061, 0x1061,
9109 0x1065, 0x1066, 0x106E, 0x1070, 0x1075, 0x1081, 0x108E, 0x108E,
9110 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
9111 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258,
9112 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0,
9113 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5,
9114 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A,
9115 0x1380, 0x138F, 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1401, 0x166C,
9116 0x166F, 0x167F, 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16EE, 0x16F8,
9117 0x1700, 0x1711, 0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C,
9118 0x176E, 0x1770, 0x1780, 0x17B3, 0x17D7, 0x17D7, 0x17DC, 0x17DC,
9119 0x1820, 0x1878, 0x1880, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5,
9120 0x1900, 0x191E, 0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB,
9121 0x19B0, 0x19C9, 0x1A00, 0x1A16, 0x1A20, 0x1A54, 0x1AA7, 0x1AA7,
9122 0x1B05, 0x1B33, 0x1B45, 0x1B4C, 0x1B83, 0x1BA0, 0x1BAE, 0x1BAF,
9123 0x1BBA, 0x1BE5, 0x1C00, 0x1C23, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C7D,
9124 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC,
9125 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF,
9126 0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D,
9127 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D,
9128 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE,
9129 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB,
9130 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, 0x2071, 0x2071,
9131 0x207F, 0x207F, 0x2090, 0x209C, 0x2102, 0x2102, 0x2107, 0x2107,
9132 0x210A, 0x2113, 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124,
9133 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x2139, 0x213C, 0x213F,
9134 0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C00, 0x2CE4,
9135 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27,
9136 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D6F, 0x2D80, 0x2D96,
9137 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE,
9138 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE,
9139 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303C,
9140 0x3041, 0x3096, 0x309B, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF,
9141 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF,
9142 0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C,
9143 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E, 0xA67F, 0xA69D,
9144 0xA6A0, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788, 0xA78B, 0xA7CA,
9145 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA801,
9146 0xA803, 0xA805, 0xA807, 0xA80A, 0xA80C, 0xA822, 0xA840, 0xA873,
9147 0xA882, 0xA8B3, 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FE,
9148 0xA90A, 0xA925, 0xA930, 0xA946, 0xA960, 0xA97C, 0xA984, 0xA9B2,
9149 0xA9CF, 0xA9CF, 0xA9E0, 0xA9E4, 0xA9E6, 0xA9EF, 0xA9FA, 0xA9FE,
9150 0xAA00, 0xAA28, 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA60, 0xAA76,
9151 0xAA7A, 0xAA7A, 0xAA7E, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6,
9152 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADD,
9153 0xAAE0, 0xAAEA, 0xAAF2, 0xAAF4, 0xAB01, 0xAB06, 0xAB09, 0xAB0E,
9154 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A,
9155 0xAB5C, 0xAB69, 0xAB70, 0xABE2, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6,
9156 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0xFB00, 0xFB06,
9157 0xFB13, 0xFB17, 0xFB1D, 0xFB1D, 0xFB1F, 0xFB28, 0xFB2A, 0xFB36,
9158 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44,
9159 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F, 0xFD92, 0xFDC7,
9160 0xFDF0, 0xFDFB, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0xFF21, 0xFF3A,
9161 0xFF41, 0xFF5A, 0xFF66, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF,
9162 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0x10000, 0x1000B, 0x1000D, 0x10026,
9163 0x10028, 0x1003A, 0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D,
9164 0x10080, 0x100FA, 0x10140, 0x10174, 0x10280, 0x1029C, 0x102A0, 0x102D0,
9165 0x10300, 0x1031F, 0x1032D, 0x1034A, 0x10350, 0x10375, 0x10380, 0x1039D,
9166 0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 0x1049D,
9167 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527, 0x10530, 0x10563,
9168 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595,
9169 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC,
9170 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, 0x10780, 0x10785,
9171 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805, 0x10808, 0x10808,
9172 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C, 0x1083F, 0x10855,
9173 0x10860, 0x10876, 0x10880, 0x1089E, 0x108E0, 0x108F2, 0x108F4, 0x108F5,
9174 0x10900, 0x10915, 0x10920, 0x10939, 0x10980, 0x109B7, 0x109BE, 0x109BF,
9175 0x10A00, 0x10A00, 0x10A10, 0x10A13, 0x10A15, 0x10A17, 0x10A19, 0x10A35,
9176 0x10A60, 0x10A7C, 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE4,
9177 0x10B00, 0x10B35, 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91,
9178 0x10C00, 0x10C48, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D23,
9179 0x10E80, 0x10EA9, 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27,
9180 0x10F30, 0x10F45, 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6,
9181 0x11003, 0x11037, 0x11071, 0x11072, 0x11075, 0x11075, 0x11083, 0x110AF,
9182 0x110D0, 0x110E8, 0x11103, 0x11126, 0x11144, 0x11144, 0x11147, 0x11147,
9183 0x11150, 0x11172, 0x11176, 0x11176, 0x11183, 0x111B2, 0x111C1, 0x111C4,
9184 0x111DA, 0x111DA, 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x1122B,
9185 0x1123F, 0x11240, 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D,
9186 0x1128F, 0x1129D, 0x1129F, 0x112A8, 0x112B0, 0x112DE, 0x11305, 0x1130C,
9187 0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330, 0x11332, 0x11333,
9188 0x11335, 0x11339, 0x1133D, 0x1133D, 0x11350, 0x11350, 0x1135D, 0x11361,
9189 0x11400, 0x11434, 0x11447, 0x1144A, 0x1145F, 0x11461, 0x11480, 0x114AF,
9190 0x114C4, 0x114C5, 0x114C7, 0x114C7, 0x11580, 0x115AE, 0x115D8, 0x115DB,
9191 0x11600, 0x1162F, 0x11644, 0x11644, 0x11680, 0x116AA, 0x116B8, 0x116B8,
9192 0x11700, 0x1171A, 0x11740, 0x11746, 0x11800, 0x1182B, 0x118A0, 0x118DF,
9193 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916,
9194 0x11918, 0x1192F, 0x1193F, 0x1193F, 0x11941, 0x11941, 0x119A0, 0x119A7,
9195 0x119AA, 0x119D0, 0x119E1, 0x119E1, 0x119E3, 0x119E3, 0x11A00, 0x11A00,
9196 0x11A0B, 0x11A32, 0x11A3A, 0x11A3A, 0x11A50, 0x11A50, 0x11A5C, 0x11A89,
9197 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C2E,
9198 0x11C40, 0x11C40, 0x11C72, 0x11C8F, 0x11D00, 0x11D06, 0x11D08, 0x11D09,
9199 0x11D0B, 0x11D30, 0x11D46, 0x11D46, 0x11D60, 0x11D65, 0x11D67, 0x11D68,
9200 0x11D6A, 0x11D89, 0x11D98, 0x11D98, 0x11EE0, 0x11EF2, 0x11F02, 0x11F02,
9201 0x11F04, 0x11F10, 0x11F12, 0x11F33, 0x11FB0, 0x11FB0, 0x12000, 0x12399,
9202 0x12400, 0x1246E, 0x12480, 0x12543, 0x12F90, 0x12FF0, 0x13000, 0x1342F,
9203 0x13441, 0x13446, 0x14400, 0x14646, 0x16800, 0x16A38, 0x16A40, 0x16A5E,
9204 0x16A70, 0x16ABE, 0x16AD0, 0x16AED, 0x16B00, 0x16B2F, 0x16B40, 0x16B43,
9205 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F, 0x16F00, 0x16F4A,
9206 0x16F50, 0x16F50, 0x16F93, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3,
9207 0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3,
9208 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, 0x1B132, 0x1B132,
9209 0x1B150, 0x1B152, 0x1B155, 0x1B155, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB,
9210 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99,
9211 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2,
9212 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB,
9213 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514,
9214 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544,
9215 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0,
9216 0x1D6C2, 0x1D6DA, 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734,
9217 0x1D736, 0x1D74E, 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8,
9218 0x1D7AA, 0x1D7C2, 0x1D7C4, 0x1D7CB, 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A,
9219 0x1E030, 0x1E06D, 0x1E100, 0x1E12C, 0x1E137, 0x1E13D, 0x1E14E, 0x1E14E,
9220 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, 0x1E4D0, 0x1E4EB, 0x1E7E0, 0x1E7E6,
9221 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4,
9222 0x1E900, 0x1E943, 0x1E94B, 0x1E94B, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F,
9223 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32,
9224 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42,
9225 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F,
9226 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59,
9227 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62,
9228 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77,
9229 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B,
9230 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x20000, 0x2A6DF,
9231 0x2A700, 0x2B739, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0,
9232 0x2EBF0, 0x2EE5D, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, 0x323AF,
9233 // #76 (12227+21): bp=Ideographic:Ideo
9234 0x3006, 0x3007, 0x3021, 0x3029, 0x3038, 0x303A, 0x3400, 0x4DBF,
9235 0x4E00, 0x9FFF, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0x16FE4, 0x16FE4,
9236 0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1B170, 0x1B2FB,
9237 0x20000, 0x2A6DF, 0x2A700, 0x2B739, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1,
9238 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D, 0x2F800, 0x2FA1D, 0x30000, 0x3134A,
9239 0x31350, 0x323AF,
9240 // #77 (12248+1): bp=Join_Control:Join_C
9241 0x200C, 0x200D,
9242 // #78 (12249+7): bp=Logical_Order_Exception:LOE
9243 0x0E40, 0x0E44, 0x0EC0, 0x0EC4, 0x19B5, 0x19B7, 0x19BA, 0x19BA,
9244 0xAAB5, 0xAAB6, 0xAAB9, 0xAAB9, 0xAABB, 0xAABC,
9245 // #79 (12256+671): bp=Lowercase:Lower
9246 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00BA, 0x00BA,
9247 0x00DF, 0x00F6, 0x00F8, 0x00FF, 0x0101, 0x0101, 0x0103, 0x0103,
9248 0x0105, 0x0105, 0x0107, 0x0107, 0x0109, 0x0109, 0x010B, 0x010B,
9249 0x010D, 0x010D, 0x010F, 0x010F, 0x0111, 0x0111, 0x0113, 0x0113,
9250 0x0115, 0x0115, 0x0117, 0x0117, 0x0119, 0x0119, 0x011B, 0x011B,
9251 0x011D, 0x011D, 0x011F, 0x011F, 0x0121, 0x0121, 0x0123, 0x0123,
9252 0x0125, 0x0125, 0x0127, 0x0127, 0x0129, 0x0129, 0x012B, 0x012B,
9253 0x012D, 0x012D, 0x012F, 0x012F, 0x0131, 0x0131, 0x0133, 0x0133,
9254 0x0135, 0x0135, 0x0137, 0x0138, 0x013A, 0x013A, 0x013C, 0x013C,
9255 0x013E, 0x013E, 0x0140, 0x0140, 0x0142, 0x0142, 0x0144, 0x0144,
9256 0x0146, 0x0146, 0x0148, 0x0149, 0x014B, 0x014B, 0x014D, 0x014D,
9257 0x014F, 0x014F, 0x0151, 0x0151, 0x0153, 0x0153, 0x0155, 0x0155,
9258 0x0157, 0x0157, 0x0159, 0x0159, 0x015B, 0x015B, 0x015D, 0x015D,
9259 0x015F, 0x015F, 0x0161, 0x0161, 0x0163, 0x0163, 0x0165, 0x0165,
9260 0x0167, 0x0167, 0x0169, 0x0169, 0x016B, 0x016B, 0x016D, 0x016D,
9261 0x016F, 0x016F, 0x0171, 0x0171, 0x0173, 0x0173, 0x0175, 0x0175,
9262 0x0177, 0x0177, 0x017A, 0x017A, 0x017C, 0x017C, 0x017E, 0x0180,
9263 0x0183, 0x0183, 0x0185, 0x0185, 0x0188, 0x0188, 0x018C, 0x018D,
9264 0x0192, 0x0192, 0x0195, 0x0195, 0x0199, 0x019B, 0x019E, 0x019E,
9265 0x01A1, 0x01A1, 0x01A3, 0x01A3, 0x01A5, 0x01A5, 0x01A8, 0x01A8,
9266 0x01AA, 0x01AB, 0x01AD, 0x01AD, 0x01B0, 0x01B0, 0x01B4, 0x01B4,
9267 0x01B6, 0x01B6, 0x01B9, 0x01BA, 0x01BD, 0x01BF, 0x01C6, 0x01C6,
9268 0x01C9, 0x01C9, 0x01CC, 0x01CC, 0x01CE, 0x01CE, 0x01D0, 0x01D0,
9269 0x01D2, 0x01D2, 0x01D4, 0x01D4, 0x01D6, 0x01D6, 0x01D8, 0x01D8,
9270 0x01DA, 0x01DA, 0x01DC, 0x01DD, 0x01DF, 0x01DF, 0x01E1, 0x01E1,
9271 0x01E3, 0x01E3, 0x01E5, 0x01E5, 0x01E7, 0x01E7, 0x01E9, 0x01E9,
9272 0x01EB, 0x01EB, 0x01ED, 0x01ED, 0x01EF, 0x01F0, 0x01F3, 0x01F3,
9273 0x01F5, 0x01F5, 0x01F9, 0x01F9, 0x01FB, 0x01FB, 0x01FD, 0x01FD,
9274 0x01FF, 0x01FF, 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205,
9275 0x0207, 0x0207, 0x0209, 0x0209, 0x020B, 0x020B, 0x020D, 0x020D,
9276 0x020F, 0x020F, 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215,
9277 0x0217, 0x0217, 0x0219, 0x0219, 0x021B, 0x021B, 0x021D, 0x021D,
9278 0x021F, 0x021F, 0x0221, 0x0221, 0x0223, 0x0223, 0x0225, 0x0225,
9279 0x0227, 0x0227, 0x0229, 0x0229, 0x022B, 0x022B, 0x022D, 0x022D,
9280 0x022F, 0x022F, 0x0231, 0x0231, 0x0233, 0x0239, 0x023C, 0x023C,
9281 0x023F, 0x0240, 0x0242, 0x0242, 0x0247, 0x0247, 0x0249, 0x0249,
9282 0x024B, 0x024B, 0x024D, 0x024D, 0x024F, 0x0293, 0x0295, 0x02B8,
9283 0x02C0, 0x02C1, 0x02E0, 0x02E4, 0x0345, 0x0345, 0x0371, 0x0371,
9284 0x0373, 0x0373, 0x0377, 0x0377, 0x037A, 0x037D, 0x0390, 0x0390,
9285 0x03AC, 0x03CE, 0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9,
9286 0x03DB, 0x03DB, 0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1,
9287 0x03E3, 0x03E3, 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9,
9288 0x03EB, 0x03EB, 0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5,
9289 0x03F8, 0x03F8, 0x03FB, 0x03FC, 0x0430, 0x045F, 0x0461, 0x0461,
9290 0x0463, 0x0463, 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469,
9291 0x046B, 0x046B, 0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471,
9292 0x0473, 0x0473, 0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479,
9293 0x047B, 0x047B, 0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481,
9294 0x048B, 0x048B, 0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491,
9295 0x0493, 0x0493, 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499,
9296 0x049B, 0x049B, 0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1,
9297 0x04A3, 0x04A3, 0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9,
9298 0x04AB, 0x04AB, 0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1,
9299 0x04B3, 0x04B3, 0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9,
9300 0x04BB, 0x04BB, 0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2,
9301 0x04C4, 0x04C4, 0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA,
9302 0x04CC, 0x04CC, 0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3,
9303 0x04D5, 0x04D5, 0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB,
9304 0x04DD, 0x04DD, 0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3,
9305 0x04E5, 0x04E5, 0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB,
9306 0x04ED, 0x04ED, 0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3,
9307 0x04F5, 0x04F5, 0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB,
9308 0x04FD, 0x04FD, 0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503,
9309 0x0505, 0x0505, 0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B,
9310 0x050D, 0x050D, 0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513,
9311 0x0515, 0x0515, 0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B,
9312 0x051D, 0x051D, 0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523,
9313 0x0525, 0x0525, 0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B,
9314 0x052D, 0x052D, 0x052F, 0x052F, 0x0560, 0x0588, 0x10D0, 0x10FA,
9315 0x10FC, 0x10FF, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1D00, 0x1DBF,
9316 0x1E01, 0x1E01, 0x1E03, 0x1E03, 0x1E05, 0x1E05, 0x1E07, 0x1E07,
9317 0x1E09, 0x1E09, 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D, 0x1E0F, 0x1E0F,
9318 0x1E11, 0x1E11, 0x1E13, 0x1E13, 0x1E15, 0x1E15, 0x1E17, 0x1E17,
9319 0x1E19, 0x1E19, 0x1E1B, 0x1E1B, 0x1E1D, 0x1E1D, 0x1E1F, 0x1E1F,
9320 0x1E21, 0x1E21, 0x1E23, 0x1E23, 0x1E25, 0x1E25, 0x1E27, 0x1E27,
9321 0x1E29, 0x1E29, 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D, 0x1E2F, 0x1E2F,
9322 0x1E31, 0x1E31, 0x1E33, 0x1E33, 0x1E35, 0x1E35, 0x1E37, 0x1E37,
9323 0x1E39, 0x1E39, 0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D, 0x1E3F, 0x1E3F,
9324 0x1E41, 0x1E41, 0x1E43, 0x1E43, 0x1E45, 0x1E45, 0x1E47, 0x1E47,
9325 0x1E49, 0x1E49, 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D, 0x1E4F, 0x1E4F,
9326 0x1E51, 0x1E51, 0x1E53, 0x1E53, 0x1E55, 0x1E55, 0x1E57, 0x1E57,
9327 0x1E59, 0x1E59, 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D, 0x1E5F, 0x1E5F,
9328 0x1E61, 0x1E61, 0x1E63, 0x1E63, 0x1E65, 0x1E65, 0x1E67, 0x1E67,
9329 0x1E69, 0x1E69, 0x1E6B, 0x1E6B, 0x1E6D, 0x1E6D, 0x1E6F, 0x1E6F,
9330 0x1E71, 0x1E71, 0x1E73, 0x1E73, 0x1E75, 0x1E75, 0x1E77, 0x1E77,
9331 0x1E79, 0x1E79, 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D, 0x1E7F, 0x1E7F,
9332 0x1E81, 0x1E81, 0x1E83, 0x1E83, 0x1E85, 0x1E85, 0x1E87, 0x1E87,
9333 0x1E89, 0x1E89, 0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D, 0x1E8F, 0x1E8F,
9334 0x1E91, 0x1E91, 0x1E93, 0x1E93, 0x1E95, 0x1E9D, 0x1E9F, 0x1E9F,
9335 0x1EA1, 0x1EA1, 0x1EA3, 0x1EA3, 0x1EA5, 0x1EA5, 0x1EA7, 0x1EA7,
9336 0x1EA9, 0x1EA9, 0x1EAB, 0x1EAB, 0x1EAD, 0x1EAD, 0x1EAF, 0x1EAF,
9337 0x1EB1, 0x1EB1, 0x1EB3, 0x1EB3, 0x1EB5, 0x1EB5, 0x1EB7, 0x1EB7,
9338 0x1EB9, 0x1EB9, 0x1EBB, 0x1EBB, 0x1EBD, 0x1EBD, 0x1EBF, 0x1EBF,
9339 0x1EC1, 0x1EC1, 0x1EC3, 0x1EC3, 0x1EC5, 0x1EC5, 0x1EC7, 0x1EC7,
9340 0x1EC9, 0x1EC9, 0x1ECB, 0x1ECB, 0x1ECD, 0x1ECD, 0x1ECF, 0x1ECF,
9341 0x1ED1, 0x1ED1, 0x1ED3, 0x1ED3, 0x1ED5, 0x1ED5, 0x1ED7, 0x1ED7,
9342 0x1ED9, 0x1ED9, 0x1EDB, 0x1EDB, 0x1EDD, 0x1EDD, 0x1EDF, 0x1EDF,
9343 0x1EE1, 0x1EE1, 0x1EE3, 0x1EE3, 0x1EE5, 0x1EE5, 0x1EE7, 0x1EE7,
9344 0x1EE9, 0x1EE9, 0x1EEB, 0x1EEB, 0x1EED, 0x1EED, 0x1EEF, 0x1EEF,
9345 0x1EF1, 0x1EF1, 0x1EF3, 0x1EF3, 0x1EF5, 0x1EF5, 0x1EF7, 0x1EF7,
9346 0x1EF9, 0x1EF9, 0x1EFB, 0x1EFB, 0x1EFD, 0x1EFD, 0x1EFF, 0x1F07,
9347 0x1F10, 0x1F15, 0x1F20, 0x1F27, 0x1F30, 0x1F37, 0x1F40, 0x1F45,
9348 0x1F50, 0x1F57, 0x1F60, 0x1F67, 0x1F70, 0x1F7D, 0x1F80, 0x1F87,
9349 0x1F90, 0x1F97, 0x1FA0, 0x1FA7, 0x1FB0, 0x1FB4, 0x1FB6, 0x1FB7,
9350 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FC7, 0x1FD0, 0x1FD3,
9351 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FF7,
9352 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C, 0x210A, 0x210A,
9353 0x210E, 0x210F, 0x2113, 0x2113, 0x212F, 0x212F, 0x2134, 0x2134,
9354 0x2139, 0x2139, 0x213C, 0x213D, 0x2146, 0x2149, 0x214E, 0x214E,
9355 0x2170, 0x217F, 0x2184, 0x2184, 0x24D0, 0x24E9, 0x2C30, 0x2C5F,
9356 0x2C61, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A,
9357 0x2C6C, 0x2C6C, 0x2C71, 0x2C71, 0x2C73, 0x2C74, 0x2C76, 0x2C7D,
9358 0x2C81, 0x2C81, 0x2C83, 0x2C83, 0x2C85, 0x2C85, 0x2C87, 0x2C87,
9359 0x2C89, 0x2C89, 0x2C8B, 0x2C8B, 0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F,
9360 0x2C91, 0x2C91, 0x2C93, 0x2C93, 0x2C95, 0x2C95, 0x2C97, 0x2C97,
9361 0x2C99, 0x2C99, 0x2C9B, 0x2C9B, 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F,
9362 0x2CA1, 0x2CA1, 0x2CA3, 0x2CA3, 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7,
9363 0x2CA9, 0x2CA9, 0x2CAB, 0x2CAB, 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF,
9364 0x2CB1, 0x2CB1, 0x2CB3, 0x2CB3, 0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7,
9365 0x2CB9, 0x2CB9, 0x2CBB, 0x2CBB, 0x2CBD, 0x2CBD, 0x2CBF, 0x2CBF,
9366 0x2CC1, 0x2CC1, 0x2CC3, 0x2CC3, 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7,
9367 0x2CC9, 0x2CC9, 0x2CCB, 0x2CCB, 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF,
9368 0x2CD1, 0x2CD1, 0x2CD3, 0x2CD3, 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7,
9369 0x2CD9, 0x2CD9, 0x2CDB, 0x2CDB, 0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF,
9370 0x2CE1, 0x2CE1, 0x2CE3, 0x2CE4, 0x2CEC, 0x2CEC, 0x2CEE, 0x2CEE,
9371 0x2CF3, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D,
9372 0xA641, 0xA641, 0xA643, 0xA643, 0xA645, 0xA645, 0xA647, 0xA647,
9373 0xA649, 0xA649, 0xA64B, 0xA64B, 0xA64D, 0xA64D, 0xA64F, 0xA64F,
9374 0xA651, 0xA651, 0xA653, 0xA653, 0xA655, 0xA655, 0xA657, 0xA657,
9375 0xA659, 0xA659, 0xA65B, 0xA65B, 0xA65D, 0xA65D, 0xA65F, 0xA65F,
9376 0xA661, 0xA661, 0xA663, 0xA663, 0xA665, 0xA665, 0xA667, 0xA667,
9377 0xA669, 0xA669, 0xA66B, 0xA66B, 0xA66D, 0xA66D, 0xA681, 0xA681,
9378 0xA683, 0xA683, 0xA685, 0xA685, 0xA687, 0xA687, 0xA689, 0xA689,
9379 0xA68B, 0xA68B, 0xA68D, 0xA68D, 0xA68F, 0xA68F, 0xA691, 0xA691,
9380 0xA693, 0xA693, 0xA695, 0xA695, 0xA697, 0xA697, 0xA699, 0xA699,
9381 0xA69B, 0xA69D, 0xA723, 0xA723, 0xA725, 0xA725, 0xA727, 0xA727,
9382 0xA729, 0xA729, 0xA72B, 0xA72B, 0xA72D, 0xA72D, 0xA72F, 0xA731,
9383 0xA733, 0xA733, 0xA735, 0xA735, 0xA737, 0xA737, 0xA739, 0xA739,
9384 0xA73B, 0xA73B, 0xA73D, 0xA73D, 0xA73F, 0xA73F, 0xA741, 0xA741,
9385 0xA743, 0xA743, 0xA745, 0xA745, 0xA747, 0xA747, 0xA749, 0xA749,
9386 0xA74B, 0xA74B, 0xA74D, 0xA74D, 0xA74F, 0xA74F, 0xA751, 0xA751,
9387 0xA753, 0xA753, 0xA755, 0xA755, 0xA757, 0xA757, 0xA759, 0xA759,
9388 0xA75B, 0xA75B, 0xA75D, 0xA75D, 0xA75F, 0xA75F, 0xA761, 0xA761,
9389 0xA763, 0xA763, 0xA765, 0xA765, 0xA767, 0xA767, 0xA769, 0xA769,
9390 0xA76B, 0xA76B, 0xA76D, 0xA76D, 0xA76F, 0xA778, 0xA77A, 0xA77A,
9391 0xA77C, 0xA77C, 0xA77F, 0xA77F, 0xA781, 0xA781, 0xA783, 0xA783,
9392 0xA785, 0xA785, 0xA787, 0xA787, 0xA78C, 0xA78C, 0xA78E, 0xA78E,
9393 0xA791, 0xA791, 0xA793, 0xA795, 0xA797, 0xA797, 0xA799, 0xA799,
9394 0xA79B, 0xA79B, 0xA79D, 0xA79D, 0xA79F, 0xA79F, 0xA7A1, 0xA7A1,
9395 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, 0xA7A7, 0xA7A7, 0xA7A9, 0xA7A9,
9396 0xA7AF, 0xA7AF, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7, 0xA7B9, 0xA7B9,
9397 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF, 0xA7C1, 0xA7C1,
9398 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA, 0xA7D1, 0xA7D1,
9399 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D5, 0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9,
9400 0xA7F2, 0xA7F4, 0xA7F6, 0xA7F6, 0xA7F8, 0xA7FA, 0xAB30, 0xAB5A,
9401 0xAB5C, 0xAB69, 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17,
9402 0xFF41, 0xFF5A, 0x10428, 0x1044F, 0x104D8, 0x104FB, 0x10597, 0x105A1,
9403 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10780, 0x10780,
9404 0x10783, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10CC0, 0x10CF2,
9405 0x118C0, 0x118DF, 0x16E60, 0x16E7F, 0x1D41A, 0x1D433, 0x1D44E, 0x1D454,
9406 0x1D456, 0x1D467, 0x1D482, 0x1D49B, 0x1D4B6, 0x1D4B9, 0x1D4BB, 0x1D4BB,
9407 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D4CF, 0x1D4EA, 0x1D503, 0x1D51E, 0x1D537,
9408 0x1D552, 0x1D56B, 0x1D586, 0x1D59F, 0x1D5BA, 0x1D5D3, 0x1D5EE, 0x1D607,
9409 0x1D622, 0x1D63B, 0x1D656, 0x1D66F, 0x1D68A, 0x1D6A5, 0x1D6C2, 0x1D6DA,
9410 0x1D6DC, 0x1D6E1, 0x1D6FC, 0x1D714, 0x1D716, 0x1D71B, 0x1D736, 0x1D74E,
9411 0x1D750, 0x1D755, 0x1D770, 0x1D788, 0x1D78A, 0x1D78F, 0x1D7AA, 0x1D7C2,
9412 0x1D7C4, 0x1D7C9, 0x1D7CB, 0x1D7CB, 0x1DF00, 0x1DF09, 0x1DF0B, 0x1DF1E,
9413 0x1DF25, 0x1DF2A, 0x1E030, 0x1E06D, 0x1E922, 0x1E943,
9414 // #80 (12927+138): bp=Math
9415 0x002B, 0x002B, 0x003C, 0x003E, 0x005E, 0x005E, 0x007C, 0x007C,
9416 0x007E, 0x007E, 0x00AC, 0x00AC, 0x00B1, 0x00B1, 0x00D7, 0x00D7,
9417 0x00F7, 0x00F7, 0x03D0, 0x03D2, 0x03D5, 0x03D5, 0x03F0, 0x03F1,
9418 0x03F4, 0x03F6, 0x0606, 0x0608, 0x2016, 0x2016, 0x2032, 0x2034,
9419 0x2040, 0x2040, 0x2044, 0x2044, 0x2052, 0x2052, 0x2061, 0x2064,
9420 0x207A, 0x207E, 0x208A, 0x208E, 0x20D0, 0x20DC, 0x20E1, 0x20E1,
9421 0x20E5, 0x20E6, 0x20EB, 0x20EF, 0x2102, 0x2102, 0x2107, 0x2107,
9422 0x210A, 0x2113, 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124,
9423 0x2128, 0x2129, 0x212C, 0x212D, 0x212F, 0x2131, 0x2133, 0x2138,
9424 0x213C, 0x2149, 0x214B, 0x214B, 0x2190, 0x21A7, 0x21A9, 0x21AE,
9425 0x21B0, 0x21B1, 0x21B6, 0x21B7, 0x21BC, 0x21DB, 0x21DD, 0x21DD,
9426 0x21E4, 0x21E5, 0x21F4, 0x22FF, 0x2308, 0x230B, 0x2320, 0x2321,
9427 0x237C, 0x237C, 0x239B, 0x23B5, 0x23B7, 0x23B7, 0x23D0, 0x23D0,
9428 0x23DC, 0x23E2, 0x25A0, 0x25A1, 0x25AE, 0x25B7, 0x25BC, 0x25C1,
9429 0x25C6, 0x25C7, 0x25CA, 0x25CB, 0x25CF, 0x25D3, 0x25E2, 0x25E2,
9430 0x25E4, 0x25E4, 0x25E7, 0x25EC, 0x25F8, 0x25FF, 0x2605, 0x2606,
9431 0x2640, 0x2640, 0x2642, 0x2642, 0x2660, 0x2663, 0x266D, 0x266F,
9432 0x27C0, 0x27FF, 0x2900, 0x2AFF, 0x2B30, 0x2B44, 0x2B47, 0x2B4C,
9433 0xFB29, 0xFB29, 0xFE61, 0xFE66, 0xFE68, 0xFE68, 0xFF0B, 0xFF0B,
9434 0xFF1C, 0xFF1E, 0xFF3C, 0xFF3C, 0xFF3E, 0xFF3E, 0xFF5C, 0xFF5C,
9435 0xFF5E, 0xFF5E, 0xFFE2, 0xFFE2, 0xFFE9, 0xFFEC, 0x1D400, 0x1D454,
9436 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6,
9437 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3,
9438 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C,
9439 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546,
9440 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D7FF,
9441 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24,
9442 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39,
9443 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49,
9444 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54,
9445 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D,
9446 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A,
9447 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E,
9448 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9,
9449 0x1EEAB, 0x1EEBB, 0x1EEF0, 0x1EEF1,
9450 // #81 (13065+18): bp=Noncharacter_Code_Point:NChar
9451 0xFDD0, 0xFDEF, 0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF,
9452 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE, 0x6FFFF,
9453 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF,
9454 0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xEFFFE, 0xEFFFF,
9455 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF,
9456 // #82 (13083+28): bp=Pattern_Syntax:Pat_Syn
9457 0x0021, 0x002F, 0x003A, 0x0040, 0x005B, 0x005E, 0x0060, 0x0060,
9458 0x007B, 0x007E, 0x00A1, 0x00A7, 0x00A9, 0x00A9, 0x00AB, 0x00AC,
9459 0x00AE, 0x00AE, 0x00B0, 0x00B1, 0x00B6, 0x00B6, 0x00BB, 0x00BB,
9460 0x00BF, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x2010, 0x2027,
9461 0x2030, 0x203E, 0x2041, 0x2053, 0x2055, 0x205E, 0x2190, 0x245F,
9462 0x2500, 0x2775, 0x2794, 0x2BFF, 0x2E00, 0x2E7F, 0x3001, 0x3003,
9463 0x3008, 0x3020, 0x3030, 0x3030, 0xFD3E, 0xFD3F, 0xFE45, 0xFE46,
9464 // #83 (13111+5): bp=Pattern_White_Space:Pat_WS
9465 0x0009, 0x000D, 0x0020, 0x0020, 0x0085, 0x0085, 0x200E, 0x200F,
9466 0x2028, 0x2029,
9467 // #84 (13116+13): bp=Quotation_Mark:QMark
9468 0x0022, 0x0022, 0x0027, 0x0027, 0x00AB, 0x00AB, 0x00BB, 0x00BB,
9469 0x2018, 0x201F, 0x2039, 0x203A, 0x2E42, 0x2E42, 0x300C, 0x300F,
9470 0x301D, 0x301F, 0xFE41, 0xFE44, 0xFF02, 0xFF02, 0xFF07, 0xFF07,
9471 0xFF62, 0xFF63,
9472 // #85 (13129+3): bp=Radical
9473 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5,
9474 // #86 (13132+1): bp=Regional_Indicator:RI
9475 0x1F1E6, 0x1F1FF,
9476 // #87 (13133+81): bp=Sentence_Terminal:STerm
9477 0x0021, 0x0021, 0x002E, 0x002E, 0x003F, 0x003F, 0x0589, 0x0589,
9478 0x061D, 0x061F, 0x06D4, 0x06D4, 0x0700, 0x0702, 0x07F9, 0x07F9,
9479 0x0837, 0x0837, 0x0839, 0x0839, 0x083D, 0x083E, 0x0964, 0x0965,
9480 0x104A, 0x104B, 0x1362, 0x1362, 0x1367, 0x1368, 0x166E, 0x166E,
9481 0x1735, 0x1736, 0x17D4, 0x17D5, 0x1803, 0x1803, 0x1809, 0x1809,
9482 0x1944, 0x1945, 0x1AA8, 0x1AAB, 0x1B5A, 0x1B5B, 0x1B5E, 0x1B5F,
9483 0x1B7D, 0x1B7E, 0x1C3B, 0x1C3C, 0x1C7E, 0x1C7F, 0x203C, 0x203D,
9484 0x2047, 0x2049, 0x2E2E, 0x2E2E, 0x2E3C, 0x2E3C, 0x2E53, 0x2E54,
9485 0x3002, 0x3002, 0xA4FF, 0xA4FF, 0xA60E, 0xA60F, 0xA6F3, 0xA6F3,
9486 0xA6F7, 0xA6F7, 0xA876, 0xA877, 0xA8CE, 0xA8CF, 0xA92F, 0xA92F,
9487 0xA9C8, 0xA9C9, 0xAA5D, 0xAA5F, 0xAAF0, 0xAAF1, 0xABEB, 0xABEB,
9488 0xFE52, 0xFE52, 0xFE56, 0xFE57, 0xFF01, 0xFF01, 0xFF0E, 0xFF0E,
9489 0xFF1F, 0xFF1F, 0xFF61, 0xFF61, 0x10A56, 0x10A57, 0x10F55, 0x10F59,
9490 0x10F86, 0x10F89, 0x11047, 0x11048, 0x110BE, 0x110C1, 0x11141, 0x11143,
9491 0x111C5, 0x111C6, 0x111CD, 0x111CD, 0x111DE, 0x111DF, 0x11238, 0x11239,
9492 0x1123B, 0x1123C, 0x112A9, 0x112A9, 0x1144B, 0x1144C, 0x115C2, 0x115C3,
9493 0x115C9, 0x115D7, 0x11641, 0x11642, 0x1173C, 0x1173E, 0x11944, 0x11944,
9494 0x11946, 0x11946, 0x11A42, 0x11A43, 0x11A9B, 0x11A9C, 0x11C41, 0x11C42,
9495 0x11EF7, 0x11EF8, 0x11F43, 0x11F44, 0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5,
9496 0x16B37, 0x16B38, 0x16B44, 0x16B44, 0x16E98, 0x16E98, 0x1BC9F, 0x1BC9F,
9497 0x1DA88, 0x1DA88,
9498 // #88 (13214+34): bp=Soft_Dotted:SD
9499 0x0069, 0x006A, 0x012F, 0x012F, 0x0249, 0x0249, 0x0268, 0x0268,
9500 0x029D, 0x029D, 0x02B2, 0x02B2, 0x03F3, 0x03F3, 0x0456, 0x0456,
9501 0x0458, 0x0458, 0x1D62, 0x1D62, 0x1D96, 0x1D96, 0x1DA4, 0x1DA4,
9502 0x1DA8, 0x1DA8, 0x1E2D, 0x1E2D, 0x1ECB, 0x1ECB, 0x2071, 0x2071,
9503 0x2148, 0x2149, 0x2C7C, 0x2C7C, 0x1D422, 0x1D423, 0x1D456, 0x1D457,
9504 0x1D48A, 0x1D48B, 0x1D4BE, 0x1D4BF, 0x1D4F2, 0x1D4F3, 0x1D526, 0x1D527,
9505 0x1D55A, 0x1D55B, 0x1D58E, 0x1D58F, 0x1D5C2, 0x1D5C3, 0x1D5F6, 0x1D5F7,
9506 0x1D62A, 0x1D62B, 0x1D65E, 0x1D65F, 0x1D692, 0x1D693, 0x1DF1A, 0x1DF1A,
9507 0x1E04C, 0x1E04D, 0x1E068, 0x1E068,
9508 // #89 (13248+108): bp=Terminal_Punctuation:Term
9509 0x0021, 0x0021, 0x002C, 0x002C, 0x002E, 0x002E, 0x003A, 0x003B,
9510 0x003F, 0x003F, 0x037E, 0x037E, 0x0387, 0x0387, 0x0589, 0x0589,
9511 0x05C3, 0x05C3, 0x060C, 0x060C, 0x061B, 0x061B, 0x061D, 0x061F,
9512 0x06D4, 0x06D4, 0x0700, 0x070A, 0x070C, 0x070C, 0x07F8, 0x07F9,
9513 0x0830, 0x083E, 0x085E, 0x085E, 0x0964, 0x0965, 0x0E5A, 0x0E5B,
9514 0x0F08, 0x0F08, 0x0F0D, 0x0F12, 0x104A, 0x104B, 0x1361, 0x1368,
9515 0x166E, 0x166E, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x17D4, 0x17D6,
9516 0x17DA, 0x17DA, 0x1802, 0x1805, 0x1808, 0x1809, 0x1944, 0x1945,
9517 0x1AA8, 0x1AAB, 0x1B5A, 0x1B5B, 0x1B5D, 0x1B5F, 0x1B7D, 0x1B7E,
9518 0x1C3B, 0x1C3F, 0x1C7E, 0x1C7F, 0x203C, 0x203D, 0x2047, 0x2049,
9519 0x2E2E, 0x2E2E, 0x2E3C, 0x2E3C, 0x2E41, 0x2E41, 0x2E4C, 0x2E4C,
9520 0x2E4E, 0x2E4F, 0x2E53, 0x2E54, 0x3001, 0x3002, 0xA4FE, 0xA4FF,
9521 0xA60D, 0xA60F, 0xA6F3, 0xA6F7, 0xA876, 0xA877, 0xA8CE, 0xA8CF,
9522 0xA92F, 0xA92F, 0xA9C7, 0xA9C9, 0xAA5D, 0xAA5F, 0xAADF, 0xAADF,
9523 0xAAF0, 0xAAF1, 0xABEB, 0xABEB, 0xFE50, 0xFE52, 0xFE54, 0xFE57,
9524 0xFF01, 0xFF01, 0xFF0C, 0xFF0C, 0xFF0E, 0xFF0E, 0xFF1A, 0xFF1B,
9525 0xFF1F, 0xFF1F, 0xFF61, 0xFF61, 0xFF64, 0xFF64, 0x1039F, 0x1039F,
9526 0x103D0, 0x103D0, 0x10857, 0x10857, 0x1091F, 0x1091F, 0x10A56, 0x10A57,
9527 0x10AF0, 0x10AF5, 0x10B3A, 0x10B3F, 0x10B99, 0x10B9C, 0x10F55, 0x10F59,
9528 0x10F86, 0x10F89, 0x11047, 0x1104D, 0x110BE, 0x110C1, 0x11141, 0x11143,
9529 0x111C5, 0x111C6, 0x111CD, 0x111CD, 0x111DE, 0x111DF, 0x11238, 0x1123C,
9530 0x112A9, 0x112A9, 0x1144B, 0x1144D, 0x1145A, 0x1145B, 0x115C2, 0x115C5,
9531 0x115C9, 0x115D7, 0x11641, 0x11642, 0x1173C, 0x1173E, 0x11944, 0x11944,
9532 0x11946, 0x11946, 0x11A42, 0x11A43, 0x11A9B, 0x11A9C, 0x11AA1, 0x11AA2,
9533 0x11C41, 0x11C43, 0x11C71, 0x11C71, 0x11EF7, 0x11EF8, 0x11F43, 0x11F44,
9534 0x12470, 0x12474, 0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5, 0x16B37, 0x16B39,
9535 0x16B44, 0x16B44, 0x16E97, 0x16E98, 0x1BC9F, 0x1BC9F, 0x1DA87, 0x1DA8A,
9536 // #90 (13356+17): bp=Unified_Ideograph:UIdeo
9537 0x3400, 0x4DBF, 0x4E00, 0x9FFF, 0xFA0E, 0xFA0F, 0xFA11, 0xFA11,
9538 0xFA13, 0xFA14, 0xFA1F, 0xFA1F, 0xFA21, 0xFA21, 0xFA23, 0xFA24,
9539 0xFA27, 0xFA29, 0x20000, 0x2A6DF, 0x2A700, 0x2B739, 0x2B740, 0x2B81D,
9540 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D, 0x30000, 0x3134A,
9541 0x31350, 0x323AF,
9542 // #91 (13373+651): bp=Uppercase:Upper
9543 0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100,
9544 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108,
9545 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110,
9546 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118,
9547 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120,
9548 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128,
9549 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130,
9550 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139,
9551 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141,
9552 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A,
9553 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152,
9554 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A,
9555 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162,
9556 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A,
9557 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172,
9558 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B,
9559 0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187,
9560 0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198,
9561 0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4,
9562 0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF,
9563 0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC,
9564 0x01C4, 0x01C4, 0x01C7, 0x01C7, 0x01CA, 0x01CA, 0x01CD, 0x01CD,
9565 0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5,
9566 0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE,
9567 0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6,
9568 0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE,
9569 0x01F1, 0x01F1, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA,
9570 0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202,
9571 0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A,
9572 0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212,
9573 0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A,
9574 0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222,
9575 0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A,
9576 0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232,
9577 0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246,
9578 0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E,
9579 0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F,
9580 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F,
9581 0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D2, 0x03D4,
9582 0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE,
9583 0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6,
9584 0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE,
9585 0x03F4, 0x03F4, 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F,
9586 0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466,
9587 0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E,
9588 0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476,
9589 0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E,
9590 0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E,
9591 0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496,
9592 0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E,
9593 0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6,
9594 0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE,
9595 0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6,
9596 0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE,
9597 0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7,
9598 0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0,
9599 0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8,
9600 0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0,
9601 0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8,
9602 0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0,
9603 0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8,
9604 0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500,
9605 0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508,
9606 0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510,
9607 0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518,
9608 0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520,
9609 0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528,
9610 0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556,
9611 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x13A0, 0x13F5,
9612 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02,
9613 0x1E04, 0x1E04, 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A,
9614 0x1E0C, 0x1E0C, 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12,
9615 0x1E14, 0x1E14, 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A,
9616 0x1E1C, 0x1E1C, 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22,
9617 0x1E24, 0x1E24, 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A,
9618 0x1E2C, 0x1E2C, 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32,
9619 0x1E34, 0x1E34, 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A,
9620 0x1E3C, 0x1E3C, 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42,
9621 0x1E44, 0x1E44, 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A,
9622 0x1E4C, 0x1E4C, 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52,
9623 0x1E54, 0x1E54, 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A,
9624 0x1E5C, 0x1E5C, 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62,
9625 0x1E64, 0x1E64, 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A,
9626 0x1E6C, 0x1E6C, 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72,
9627 0x1E74, 0x1E74, 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A,
9628 0x1E7C, 0x1E7C, 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82,
9629 0x1E84, 0x1E84, 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A,
9630 0x1E8C, 0x1E8C, 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92,
9631 0x1E94, 0x1E94, 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, 0x1EA2, 0x1EA2,
9632 0x1EA4, 0x1EA4, 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, 0x1EAA, 0x1EAA,
9633 0x1EAC, 0x1EAC, 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, 0x1EB2, 0x1EB2,
9634 0x1EB4, 0x1EB4, 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, 0x1EBA, 0x1EBA,
9635 0x1EBC, 0x1EBC, 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, 0x1EC2, 0x1EC2,
9636 0x1EC4, 0x1EC4, 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, 0x1ECA, 0x1ECA,
9637 0x1ECC, 0x1ECC, 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, 0x1ED2, 0x1ED2,
9638 0x1ED4, 0x1ED4, 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, 0x1EDA, 0x1EDA,
9639 0x1EDC, 0x1EDC, 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, 0x1EE2, 0x1EE2,
9640 0x1EE4, 0x1EE4, 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, 0x1EEA, 0x1EEA,
9641 0x1EEC, 0x1EEC, 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, 0x1EF2, 0x1EF2,
9642 0x1EF4, 0x1EF4, 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, 0x1EFA, 0x1EFA,
9643 0x1EFC, 0x1EFC, 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, 0x1F18, 0x1F1D,
9644 0x1F28, 0x1F2F, 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, 0x1F59, 0x1F59,
9645 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, 0x1F68, 0x1F6F,
9646 0x1FB8, 0x1FBB, 0x1FC8, 0x1FCB, 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC,
9647 0x1FF8, 0x1FFB, 0x2102, 0x2102, 0x2107, 0x2107, 0x210B, 0x210D,
9648 0x2110, 0x2112, 0x2115, 0x2115, 0x2119, 0x211D, 0x2124, 0x2124,
9649 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D, 0x2130, 0x2133,
9650 0x213E, 0x213F, 0x2145, 0x2145, 0x2160, 0x216F, 0x2183, 0x2183,
9651 0x24B6, 0x24CF, 0x2C00, 0x2C2F, 0x2C60, 0x2C60, 0x2C62, 0x2C64,
9652 0x2C67, 0x2C67, 0x2C69, 0x2C69, 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70,
9653 0x2C72, 0x2C72, 0x2C75, 0x2C75, 0x2C7E, 0x2C80, 0x2C82, 0x2C82,
9654 0x2C84, 0x2C84, 0x2C86, 0x2C86, 0x2C88, 0x2C88, 0x2C8A, 0x2C8A,
9655 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E, 0x2C90, 0x2C90, 0x2C92, 0x2C92,
9656 0x2C94, 0x2C94, 0x2C96, 0x2C96, 0x2C98, 0x2C98, 0x2C9A, 0x2C9A,
9657 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E, 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2,
9658 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6, 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA,
9659 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE, 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2,
9660 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6, 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA,
9661 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE, 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2,
9662 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6, 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA,
9663 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE, 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2,
9664 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6, 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA,
9665 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE, 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2,
9666 0x2CEB, 0x2CEB, 0x2CED, 0x2CED, 0x2CF2, 0x2CF2, 0xA640, 0xA640,
9667 0xA642, 0xA642, 0xA644, 0xA644, 0xA646, 0xA646, 0xA648, 0xA648,
9668 0xA64A, 0xA64A, 0xA64C, 0xA64C, 0xA64E, 0xA64E, 0xA650, 0xA650,
9669 0xA652, 0xA652, 0xA654, 0xA654, 0xA656, 0xA656, 0xA658, 0xA658,
9670 0xA65A, 0xA65A, 0xA65C, 0xA65C, 0xA65E, 0xA65E, 0xA660, 0xA660,
9671 0xA662, 0xA662, 0xA664, 0xA664, 0xA666, 0xA666, 0xA668, 0xA668,
9672 0xA66A, 0xA66A, 0xA66C, 0xA66C, 0xA680, 0xA680, 0xA682, 0xA682,
9673 0xA684, 0xA684, 0xA686, 0xA686, 0xA688, 0xA688, 0xA68A, 0xA68A,
9674 0xA68C, 0xA68C, 0xA68E, 0xA68E, 0xA690, 0xA690, 0xA692, 0xA692,
9675 0xA694, 0xA694, 0xA696, 0xA696, 0xA698, 0xA698, 0xA69A, 0xA69A,
9676 0xA722, 0xA722, 0xA724, 0xA724, 0xA726, 0xA726, 0xA728, 0xA728,
9677 0xA72A, 0xA72A, 0xA72C, 0xA72C, 0xA72E, 0xA72E, 0xA732, 0xA732,
9678 0xA734, 0xA734, 0xA736, 0xA736, 0xA738, 0xA738, 0xA73A, 0xA73A,
9679 0xA73C, 0xA73C, 0xA73E, 0xA73E, 0xA740, 0xA740, 0xA742, 0xA742,
9680 0xA744, 0xA744, 0xA746, 0xA746, 0xA748, 0xA748, 0xA74A, 0xA74A,
9681 0xA74C, 0xA74C, 0xA74E, 0xA74E, 0xA750, 0xA750, 0xA752, 0xA752,
9682 0xA754, 0xA754, 0xA756, 0xA756, 0xA758, 0xA758, 0xA75A, 0xA75A,
9683 0xA75C, 0xA75C, 0xA75E, 0xA75E, 0xA760, 0xA760, 0xA762, 0xA762,
9684 0xA764, 0xA764, 0xA766, 0xA766, 0xA768, 0xA768, 0xA76A, 0xA76A,
9685 0xA76C, 0xA76C, 0xA76E, 0xA76E, 0xA779, 0xA779, 0xA77B, 0xA77B,
9686 0xA77D, 0xA77E, 0xA780, 0xA780, 0xA782, 0xA782, 0xA784, 0xA784,
9687 0xA786, 0xA786, 0xA78B, 0xA78B, 0xA78D, 0xA78D, 0xA790, 0xA790,
9688 0xA792, 0xA792, 0xA796, 0xA796, 0xA798, 0xA798, 0xA79A, 0xA79A,
9689 0xA79C, 0xA79C, 0xA79E, 0xA79E, 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2,
9690 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6, 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE,
9691 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6, 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA,
9692 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE, 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2,
9693 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9, 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6,
9694 0xA7D8, 0xA7D8, 0xA7F5, 0xA7F5, 0xFF21, 0xFF3A, 0x10400, 0x10427,
9695 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592,
9696 0x10594, 0x10595, 0x10C80, 0x10CB2, 0x118A0, 0x118BF, 0x16E40, 0x16E5F,
9697 0x1D400, 0x1D419, 0x1D434, 0x1D44D, 0x1D468, 0x1D481, 0x1D49C, 0x1D49C,
9698 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC,
9699 0x1D4AE, 0x1D4B5, 0x1D4D0, 0x1D4E9, 0x1D504, 0x1D505, 0x1D507, 0x1D50A,
9700 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D538, 0x1D539, 0x1D53B, 0x1D53E,
9701 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D56C, 0x1D585,
9702 0x1D5A0, 0x1D5B9, 0x1D5D4, 0x1D5ED, 0x1D608, 0x1D621, 0x1D63C, 0x1D655,
9703 0x1D670, 0x1D689, 0x1D6A8, 0x1D6C0, 0x1D6E2, 0x1D6FA, 0x1D71C, 0x1D734,
9704 0x1D756, 0x1D76E, 0x1D790, 0x1D7A8, 0x1D7CA, 0x1D7CA, 0x1E900, 0x1E921,
9705 0x1F130, 0x1F149, 0x1F150, 0x1F169, 0x1F170, 0x1F189,
9706 // #92 (14024+4): bp=Variation_Selector:VS
9707 0x180B, 0x180D, 0x180F, 0x180F, 0xFE00, 0xFE0F, 0xE0100, 0xE01EF,
9708 // #93 (14028+10): bp=White_Space:space
9709 0x0009, 0x000D, 0x0020, 0x0020, 0x0085, 0x0085, 0x00A0, 0x00A0,
9710 0x1680, 0x1680, 0x2000, 0x200A, 0x2028, 0x2029, 0x202F, 0x202F,
9711 0x205F, 0x205F, 0x3000, 0x3000,
9712 // #94 (14038+776): bp=XID_Continue:XIDC
9713 0x0030, 0x0039, 0x0041, 0x005A, 0x005F, 0x005F, 0x0061, 0x007A,
9714 0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00B7, 0x00B7, 0x00BA, 0x00BA,
9715 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, 0x02C6, 0x02D1,
9716 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, 0x0300, 0x0374,
9717 0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F, 0x0386, 0x038A,
9718 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481,
9719 0x0483, 0x0487, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x0559,
9720 0x0560, 0x0588, 0x0591, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x05C2,
9721 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F2,
9722 0x0610, 0x061A, 0x0620, 0x0669, 0x066E, 0x06D3, 0x06D5, 0x06DC,
9723 0x06DF, 0x06E8, 0x06EA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x074A,
9724 0x074D, 0x07B1, 0x07C0, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD,
9725 0x0800, 0x082D, 0x0840, 0x085B, 0x0860, 0x086A, 0x0870, 0x0887,
9726 0x0889, 0x088E, 0x0898, 0x08E1, 0x08E3, 0x0963, 0x0966, 0x096F,
9727 0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
9728 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4,
9729 0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD,
9730 0x09DF, 0x09E3, 0x09E6, 0x09F1, 0x09FC, 0x09FC, 0x09FE, 0x09FE,
9731 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
9732 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
9733 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
9734 0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A75,
9735 0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
9736 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5,
9737 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3,
9738 0x0AE6, 0x0AEF, 0x0AF9, 0x0AFF, 0x0B01, 0x0B03, 0x0B05, 0x0B0C,
9739 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
9740 0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D,
9741 0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B6F,
9742 0x0B71, 0x0B71, 0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90,
9743 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F,
9744 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2,
9745 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7,
9746 0x0BE6, 0x0BEF, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28,
9747 0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D,
9748 0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63,
9749 0x0C66, 0x0C6F, 0x0C80, 0x0C83, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90,
9750 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4,
9751 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE,
9752 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF3, 0x0D00, 0x0D0C,
9753 0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4E,
9754 0x0D54, 0x0D57, 0x0D5F, 0x0D63, 0x0D66, 0x0D6F, 0x0D7A, 0x0D7F,
9755 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB,
9756 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4,
9757 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF3,
9758 0x0E01, 0x0E3A, 0x0E40, 0x0E4E, 0x0E50, 0x0E59, 0x0E81, 0x0E82,
9759 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5,
9760 0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EC8, 0x0ECE,
9761 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, 0x0F18, 0x0F19,
9762 0x0F20, 0x0F29, 0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39,
9763 0x0F3E, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F84, 0x0F86, 0x0F97,
9764 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x1000, 0x1049, 0x1050, 0x109D,
9765 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
9766 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258,
9767 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0,
9768 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5,
9769 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A,
9770 0x135D, 0x135F, 0x1369, 0x1371, 0x1380, 0x138F, 0x13A0, 0x13F5,
9771 0x13F8, 0x13FD, 0x1401, 0x166C, 0x166F, 0x167F, 0x1681, 0x169A,
9772 0x16A0, 0x16EA, 0x16EE, 0x16F8, 0x1700, 0x1715, 0x171F, 0x1734,
9773 0x1740, 0x1753, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
9774 0x1780, 0x17D3, 0x17D7, 0x17D7, 0x17DC, 0x17DD, 0x17E0, 0x17E9,
9775 0x180B, 0x180D, 0x180F, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA,
9776 0x18B0, 0x18F5, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B,
9777 0x1946, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9,
9778 0x19D0, 0x19DA, 0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A60, 0x1A7C,
9779 0x1A7F, 0x1A89, 0x1A90, 0x1A99, 0x1AA7, 0x1AA7, 0x1AB0, 0x1ABD,
9780 0x1ABF, 0x1ACE, 0x1B00, 0x1B4C, 0x1B50, 0x1B59, 0x1B6B, 0x1B73,
9781 0x1B80, 0x1BF3, 0x1C00, 0x1C37, 0x1C40, 0x1C49, 0x1C4D, 0x1C7D,
9782 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CD0, 0x1CD2,
9783 0x1CD4, 0x1CFA, 0x1D00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45,
9784 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B,
9785 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC,
9786 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3,
9787 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC,
9788 0x200C, 0x200D, 0x203F, 0x2040, 0x2054, 0x2054, 0x2071, 0x2071,
9789 0x207F, 0x207F, 0x2090, 0x209C, 0x20D0, 0x20DC, 0x20E1, 0x20E1,
9790 0x20E5, 0x20F0, 0x2102, 0x2102, 0x2107, 0x2107, 0x210A, 0x2113,
9791 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126,
9792 0x2128, 0x2128, 0x212A, 0x2139, 0x213C, 0x213F, 0x2145, 0x2149,
9793 0x214E, 0x214E, 0x2160, 0x2188, 0x2C00, 0x2CE4, 0x2CEB, 0x2CF3,
9794 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0x2D30, 0x2D67,
9795 0x2D6F, 0x2D6F, 0x2D7F, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE,
9796 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE,
9797 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0x2DE0, 0x2DFF, 0x3005, 0x3007,
9798 0x3021, 0x302F, 0x3031, 0x3035, 0x3038, 0x303C, 0x3041, 0x3096,
9799 0x3099, 0x309A, 0x309D, 0x309F, 0x30A1, 0x30FF, 0x3105, 0x312F,
9800 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF, 0x3400, 0x4DBF,
9801 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C, 0xA610, 0xA62B,
9802 0xA640, 0xA66F, 0xA674, 0xA67D, 0xA67F, 0xA6F1, 0xA717, 0xA71F,
9803 0xA722, 0xA788, 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3,
9804 0xA7D5, 0xA7D9, 0xA7F2, 0xA827, 0xA82C, 0xA82C, 0xA840, 0xA873,
9805 0xA880, 0xA8C5, 0xA8D0, 0xA8D9, 0xA8E0, 0xA8F7, 0xA8FB, 0xA8FB,
9806 0xA8FD, 0xA92D, 0xA930, 0xA953, 0xA960, 0xA97C, 0xA980, 0xA9C0,
9807 0xA9CF, 0xA9D9, 0xA9E0, 0xA9FE, 0xAA00, 0xAA36, 0xAA40, 0xAA4D,
9808 0xAA50, 0xAA59, 0xAA60, 0xAA76, 0xAA7A, 0xAAC2, 0xAADB, 0xAADD,
9809 0xAAE0, 0xAAEF, 0xAAF2, 0xAAF6, 0xAB01, 0xAB06, 0xAB09, 0xAB0E,
9810 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A,
9811 0xAB5C, 0xAB69, 0xAB70, 0xABEA, 0xABEC, 0xABED, 0xABF0, 0xABF9,
9812 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D,
9813 0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB28,
9814 0xFB2A, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41,
9815 0xFB43, 0xFB44, 0xFB46, 0xFBB1, 0xFBD3, 0xFC5D, 0xFC64, 0xFD3D,
9816 0xFD50, 0xFD8F, 0xFD92, 0xFDC7, 0xFDF0, 0xFDF9, 0xFE00, 0xFE0F,
9817 0xFE20, 0xFE2F, 0xFE33, 0xFE34, 0xFE4D, 0xFE4F, 0xFE71, 0xFE71,
9818 0xFE73, 0xFE73, 0xFE77, 0xFE77, 0xFE79, 0xFE79, 0xFE7B, 0xFE7B,
9819 0xFE7D, 0xFE7D, 0xFE7F, 0xFEFC, 0xFF10, 0xFF19, 0xFF21, 0xFF3A,
9820 0xFF3F, 0xFF3F, 0xFF41, 0xFF5A, 0xFF65, 0xFFBE, 0xFFC2, 0xFFC7,
9821 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0x10000, 0x1000B,
9822 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D, 0x1003F, 0x1004D,
9823 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10140, 0x10174, 0x101FD, 0x101FD,
9824 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x102E0, 0x102E0, 0x10300, 0x1031F,
9825 0x1032D, 0x1034A, 0x10350, 0x1037A, 0x10380, 0x1039D, 0x103A0, 0x103C3,
9826 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 0x1049D, 0x104A0, 0x104A9,
9827 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527, 0x10530, 0x10563,
9828 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595,
9829 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC,
9830 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, 0x10780, 0x10785,
9831 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805, 0x10808, 0x10808,
9832 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C, 0x1083F, 0x10855,
9833 0x10860, 0x10876, 0x10880, 0x1089E, 0x108E0, 0x108F2, 0x108F4, 0x108F5,
9834 0x10900, 0x10915, 0x10920, 0x10939, 0x10980, 0x109B7, 0x109BE, 0x109BF,
9835 0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13, 0x10A15, 0x10A17,
9836 0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, 0x10A60, 0x10A7C,
9837 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE6, 0x10B00, 0x10B35,
9838 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48,
9839 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D27, 0x10D30, 0x10D39,
9840 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1, 0x10EFD, 0x10F1C,
9841 0x10F27, 0x10F27, 0x10F30, 0x10F50, 0x10F70, 0x10F85, 0x10FB0, 0x10FC4,
9842 0x10FE0, 0x10FF6, 0x11000, 0x11046, 0x11066, 0x11075, 0x1107F, 0x110BA,
9843 0x110C2, 0x110C2, 0x110D0, 0x110E8, 0x110F0, 0x110F9, 0x11100, 0x11134,
9844 0x11136, 0x1113F, 0x11144, 0x11147, 0x11150, 0x11173, 0x11176, 0x11176,
9845 0x11180, 0x111C4, 0x111C9, 0x111CC, 0x111CE, 0x111DA, 0x111DC, 0x111DC,
9846 0x11200, 0x11211, 0x11213, 0x11237, 0x1123E, 0x11241, 0x11280, 0x11286,
9847 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, 0x1129F, 0x112A8,
9848 0x112B0, 0x112EA, 0x112F0, 0x112F9, 0x11300, 0x11303, 0x11305, 0x1130C,
9849 0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330, 0x11332, 0x11333,
9850 0x11335, 0x11339, 0x1133B, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D,
9851 0x11350, 0x11350, 0x11357, 0x11357, 0x1135D, 0x11363, 0x11366, 0x1136C,
9852 0x11370, 0x11374, 0x11400, 0x1144A, 0x11450, 0x11459, 0x1145E, 0x11461,
9853 0x11480, 0x114C5, 0x114C7, 0x114C7, 0x114D0, 0x114D9, 0x11580, 0x115B5,
9854 0x115B8, 0x115C0, 0x115D8, 0x115DD, 0x11600, 0x11640, 0x11644, 0x11644,
9855 0x11650, 0x11659, 0x11680, 0x116B8, 0x116C0, 0x116C9, 0x11700, 0x1171A,
9856 0x1171D, 0x1172B, 0x11730, 0x11739, 0x11740, 0x11746, 0x11800, 0x1183A,
9857 0x118A0, 0x118E9, 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913,
9858 0x11915, 0x11916, 0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x11943,
9859 0x11950, 0x11959, 0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119E1,
9860 0x119E3, 0x119E4, 0x11A00, 0x11A3E, 0x11A47, 0x11A47, 0x11A50, 0x11A99,
9861 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C36,
9862 0x11C38, 0x11C40, 0x11C50, 0x11C59, 0x11C72, 0x11C8F, 0x11C92, 0x11CA7,
9863 0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36,
9864 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59,
9865 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D90, 0x11D91,
9866 0x11D93, 0x11D98, 0x11DA0, 0x11DA9, 0x11EE0, 0x11EF6, 0x11F00, 0x11F10,
9867 0x11F12, 0x11F3A, 0x11F3E, 0x11F42, 0x11F50, 0x11F59, 0x11FB0, 0x11FB0,
9868 0x12000, 0x12399, 0x12400, 0x1246E, 0x12480, 0x12543, 0x12F90, 0x12FF0,
9869 0x13000, 0x1342F, 0x13440, 0x13455, 0x14400, 0x14646, 0x16800, 0x16A38,
9870 0x16A40, 0x16A5E, 0x16A60, 0x16A69, 0x16A70, 0x16ABE, 0x16AC0, 0x16AC9,
9871 0x16AD0, 0x16AED, 0x16AF0, 0x16AF4, 0x16B00, 0x16B36, 0x16B40, 0x16B43,
9872 0x16B50, 0x16B59, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F,
9873 0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1,
9874 0x16FE3, 0x16FE4, 0x16FF0, 0x16FF1, 0x17000, 0x187F7, 0x18800, 0x18CD5,
9875 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE,
9876 0x1B000, 0x1B122, 0x1B132, 0x1B132, 0x1B150, 0x1B152, 0x1B155, 0x1B155,
9877 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C,
9878 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1BC9D, 0x1BC9E, 0x1CF00, 0x1CF2D,
9879 0x1CF30, 0x1CF46, 0x1D165, 0x1D169, 0x1D16D, 0x1D172, 0x1D17B, 0x1D182,
9880 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, 0x1D400, 0x1D454,
9881 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6,
9882 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3,
9883 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C,
9884 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546,
9885 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0, 0x1D6C2, 0x1D6DA,
9886 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734, 0x1D736, 0x1D74E,
9887 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8, 0x1D7AA, 0x1D7C2,
9888 0x1D7C4, 0x1D7CB, 0x1D7CE, 0x1D7FF, 0x1DA00, 0x1DA36, 0x1DA3B, 0x1DA6C,
9889 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F, 0x1DAA1, 0x1DAAF,
9890 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A, 0x1E000, 0x1E006, 0x1E008, 0x1E018,
9891 0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E030, 0x1E06D,
9892 0x1E08F, 0x1E08F, 0x1E100, 0x1E12C, 0x1E130, 0x1E13D, 0x1E140, 0x1E149,
9893 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AE, 0x1E2C0, 0x1E2F9, 0x1E4D0, 0x1E4F9,
9894 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE,
9895 0x1E800, 0x1E8C4, 0x1E8D0, 0x1E8D6, 0x1E900, 0x1E94B, 0x1E950, 0x1E959,
9896 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24,
9897 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39,
9898 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49,
9899 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54,
9900 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D,
9901 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A,
9902 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E,
9903 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9,
9904 0x1EEAB, 0x1EEBB, 0x1FBF0, 0x1FBF9, 0x20000, 0x2A6DF, 0x2A700, 0x2B739,
9905 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D,
9906 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, 0x323AF, 0xE0100, 0xE01EF,
9907 // #95 (14814+667): bp=XID_Start:XIDS
9908 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5,
9909 0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1,
9910 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE,
9911 0x0370, 0x0374, 0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F,
9912 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1,
9913 0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F, 0x0531, 0x0556,
9914 0x0559, 0x0559, 0x0560, 0x0588, 0x05D0, 0x05EA, 0x05EF, 0x05F2,
9915 0x0620, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5,
9916 0x06E5, 0x06E6, 0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF,
9917 0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1,
9918 0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA, 0x0800, 0x0815,
9919 0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x0840, 0x0858,
9920 0x0860, 0x086A, 0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9,
9921 0x0904, 0x0939, 0x093D, 0x093D, 0x0950, 0x0950, 0x0958, 0x0961,
9922 0x0971, 0x0980, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
9923 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD,
9924 0x09CE, 0x09CE, 0x09DC, 0x09DD, 0x09DF, 0x09E1, 0x09F0, 0x09F1,
9925 0x09FC, 0x09FC, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
9926 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
9927 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A72, 0x0A74, 0x0A85, 0x0A8D,
9928 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3,
9929 0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1,
9930 0x0AF9, 0x0AF9, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28,
9931 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3D, 0x0B3D,
9932 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B71, 0x0B71, 0x0B83, 0x0B83,
9933 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A,
9934 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA,
9935 0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10,
9936 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C58, 0x0C5A,
9937 0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C80, 0x0C80, 0x0C85, 0x0C8C,
9938 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9,
9939 0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2,
9940 0x0D04, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D,
9941 0x0D4E, 0x0D4E, 0x0D54, 0x0D56, 0x0D5F, 0x0D61, 0x0D7A, 0x0D7F,
9942 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD,
9943 0x0DC0, 0x0DC6, 0x0E01, 0x0E30, 0x0E32, 0x0E32, 0x0E40, 0x0E46,
9944 0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3,
9945 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0, 0x0EB2, 0x0EB2, 0x0EBD, 0x0EBD,
9946 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00,
9947 0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C, 0x1000, 0x102A,
9948 0x103F, 0x103F, 0x1050, 0x1055, 0x105A, 0x105D, 0x1061, 0x1061,
9949 0x1065, 0x1066, 0x106E, 0x1070, 0x1075, 0x1081, 0x108E, 0x108E,
9950 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
9951 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258,
9952 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0,
9953 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5,
9954 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A,
9955 0x1380, 0x138F, 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1401, 0x166C,
9956 0x166F, 0x167F, 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16EE, 0x16F8,
9957 0x1700, 0x1711, 0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C,
9958 0x176E, 0x1770, 0x1780, 0x17B3, 0x17D7, 0x17D7, 0x17DC, 0x17DC,
9959 0x1820, 0x1878, 0x1880, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5,
9960 0x1900, 0x191E, 0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB,
9961 0x19B0, 0x19C9, 0x1A00, 0x1A16, 0x1A20, 0x1A54, 0x1AA7, 0x1AA7,
9962 0x1B05, 0x1B33, 0x1B45, 0x1B4C, 0x1B83, 0x1BA0, 0x1BAE, 0x1BAF,
9963 0x1BBA, 0x1BE5, 0x1C00, 0x1C23, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C7D,
9964 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC,
9965 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF,
9966 0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D,
9967 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D,
9968 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE,
9969 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB,
9970 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, 0x2071, 0x2071,
9971 0x207F, 0x207F, 0x2090, 0x209C, 0x2102, 0x2102, 0x2107, 0x2107,
9972 0x210A, 0x2113, 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124,
9973 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x2139, 0x213C, 0x213F,
9974 0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C00, 0x2CE4,
9975 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27,
9976 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D6F, 0x2D80, 0x2D96,
9977 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE,
9978 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE,
9979 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303C,
9980 0x3041, 0x3096, 0x309D, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF,
9981 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF,
9982 0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C,
9983 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E, 0xA67F, 0xA69D,
9984 0xA6A0, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788, 0xA78B, 0xA7CA,
9985 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA801,
9986 0xA803, 0xA805, 0xA807, 0xA80A, 0xA80C, 0xA822, 0xA840, 0xA873,
9987 0xA882, 0xA8B3, 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FE,
9988 0xA90A, 0xA925, 0xA930, 0xA946, 0xA960, 0xA97C, 0xA984, 0xA9B2,
9989 0xA9CF, 0xA9CF, 0xA9E0, 0xA9E4, 0xA9E6, 0xA9EF, 0xA9FA, 0xA9FE,
9990 0xAA00, 0xAA28, 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA60, 0xAA76,
9991 0xAA7A, 0xAA7A, 0xAA7E, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6,
9992 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADD,
9993 0xAAE0, 0xAAEA, 0xAAF2, 0xAAF4, 0xAB01, 0xAB06, 0xAB09, 0xAB0E,
9994 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A,
9995 0xAB5C, 0xAB69, 0xAB70, 0xABE2, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6,
9996 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0xFB00, 0xFB06,
9997 0xFB13, 0xFB17, 0xFB1D, 0xFB1D, 0xFB1F, 0xFB28, 0xFB2A, 0xFB36,
9998 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44,
9999 0xFB46, 0xFBB1, 0xFBD3, 0xFC5D, 0xFC64, 0xFD3D, 0xFD50, 0xFD8F,
10000 0xFD92, 0xFDC7, 0xFDF0, 0xFDF9, 0xFE71, 0xFE71, 0xFE73, 0xFE73,
10001 0xFE77, 0xFE77, 0xFE79, 0xFE79, 0xFE7B, 0xFE7B, 0xFE7D, 0xFE7D,
10002 0xFE7F, 0xFEFC, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0xFF66, 0xFF9D,
10003 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7,
10004 0xFFDA, 0xFFDC, 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A,
10005 0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA,
10006 0x10140, 0x10174, 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x10300, 0x1031F,
10007 0x1032D, 0x1034A, 0x10350, 0x10375, 0x10380, 0x1039D, 0x103A0, 0x103C3,
10008 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 0x1049D, 0x104B0, 0x104D3,
10009 0x104D8, 0x104FB, 0x10500, 0x10527, 0x10530, 0x10563, 0x10570, 0x1057A,
10010 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1,
10011 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10600, 0x10736,
10012 0x10740, 0x10755, 0x10760, 0x10767, 0x10780, 0x10785, 0x10787, 0x107B0,
10013 0x107B2, 0x107BA, 0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835,
10014 0x10837, 0x10838, 0x1083C, 0x1083C, 0x1083F, 0x10855, 0x10860, 0x10876,
10015 0x10880, 0x1089E, 0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x10900, 0x10915,
10016 0x10920, 0x10939, 0x10980, 0x109B7, 0x109BE, 0x109BF, 0x10A00, 0x10A00,
10017 0x10A10, 0x10A13, 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A60, 0x10A7C,
10018 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE4, 0x10B00, 0x10B35,
10019 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48,
10020 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D23, 0x10E80, 0x10EA9,
10021 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27, 0x10F30, 0x10F45,
10022 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, 0x11003, 0x11037,
10023 0x11071, 0x11072, 0x11075, 0x11075, 0x11083, 0x110AF, 0x110D0, 0x110E8,
10024 0x11103, 0x11126, 0x11144, 0x11144, 0x11147, 0x11147, 0x11150, 0x11172,
10025 0x11176, 0x11176, 0x11183, 0x111B2, 0x111C1, 0x111C4, 0x111DA, 0x111DA,
10026 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x1122B, 0x1123F, 0x11240,
10027 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D,
10028 0x1129F, 0x112A8, 0x112B0, 0x112DE, 0x11305, 0x1130C, 0x1130F, 0x11310,
10029 0x11313, 0x11328, 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339,
10030 0x1133D, 0x1133D, 0x11350, 0x11350, 0x1135D, 0x11361, 0x11400, 0x11434,
10031 0x11447, 0x1144A, 0x1145F, 0x11461, 0x11480, 0x114AF, 0x114C4, 0x114C5,
10032 0x114C7, 0x114C7, 0x11580, 0x115AE, 0x115D8, 0x115DB, 0x11600, 0x1162F,
10033 0x11644, 0x11644, 0x11680, 0x116AA, 0x116B8, 0x116B8, 0x11700, 0x1171A,
10034 0x11740, 0x11746, 0x11800, 0x1182B, 0x118A0, 0x118DF, 0x118FF, 0x11906,
10035 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x1192F,
10036 0x1193F, 0x1193F, 0x11941, 0x11941, 0x119A0, 0x119A7, 0x119AA, 0x119D0,
10037 0x119E1, 0x119E1, 0x119E3, 0x119E3, 0x11A00, 0x11A00, 0x11A0B, 0x11A32,
10038 0x11A3A, 0x11A3A, 0x11A50, 0x11A50, 0x11A5C, 0x11A89, 0x11A9D, 0x11A9D,
10039 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C2E, 0x11C40, 0x11C40,
10040 0x11C72, 0x11C8F, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D30,
10041 0x11D46, 0x11D46, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D89,
10042 0x11D98, 0x11D98, 0x11EE0, 0x11EF2, 0x11F02, 0x11F02, 0x11F04, 0x11F10,
10043 0x11F12, 0x11F33, 0x11FB0, 0x11FB0, 0x12000, 0x12399, 0x12400, 0x1246E,
10044 0x12480, 0x12543, 0x12F90, 0x12FF0, 0x13000, 0x1342F, 0x13441, 0x13446,
10045 0x14400, 0x14646, 0x16800, 0x16A38, 0x16A40, 0x16A5E, 0x16A70, 0x16ABE,
10046 0x16AD0, 0x16AED, 0x16B00, 0x16B2F, 0x16B40, 0x16B43, 0x16B63, 0x16B77,
10047 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F, 0x16F00, 0x16F4A, 0x16F50, 0x16F50,
10048 0x16F93, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3, 0x17000, 0x187F7,
10049 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB,
10050 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, 0x1B132, 0x1B132, 0x1B150, 0x1B152,
10051 0x1B155, 0x1B155, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A,
10052 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1D400, 0x1D454,
10053 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6,
10054 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3,
10055 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C,
10056 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546,
10057 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0, 0x1D6C2, 0x1D6DA,
10058 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734, 0x1D736, 0x1D74E,
10059 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8, 0x1D7AA, 0x1D7C2,
10060 0x1D7C4, 0x1D7CB, 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A, 0x1E030, 0x1E06D,
10061 0x1E100, 0x1E12C, 0x1E137, 0x1E13D, 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AD,
10062 0x1E2C0, 0x1E2EB, 0x1E4D0, 0x1E4EB, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB,
10063 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E900, 0x1E943,
10064 0x1E94B, 0x1E94B, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22,
10065 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37,
10066 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47,
10067 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52,
10068 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B,
10069 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64,
10070 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C,
10071 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3,
10072 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x20000, 0x2A6DF, 0x2A700, 0x2B739,
10073 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D,
10074 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, 0x323AF,
10075 // #96 (15481+173): sc=Common:Zyyy
10076 0x0000, 0x0040, 0x005B, 0x0060, 0x007B, 0x00A9, 0x00AB, 0x00B9,
10077 0x00BB, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x02B9, 0x02DF,
10078 0x02E5, 0x02E9, 0x02EC, 0x02FF, 0x0374, 0x0374, 0x037E, 0x037E,
10079 0x0385, 0x0385, 0x0387, 0x0387, 0x0605, 0x0605, 0x060C, 0x060C,
10080 0x061B, 0x061B, 0x061F, 0x061F, 0x0640, 0x0640, 0x06DD, 0x06DD,
10081 0x08E2, 0x08E2, 0x0964, 0x0965, 0x0E3F, 0x0E3F, 0x0FD5, 0x0FD8,
10082 0x10FB, 0x10FB, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x1802, 0x1803,
10083 0x1805, 0x1805, 0x1CD3, 0x1CD3, 0x1CE1, 0x1CE1, 0x1CE9, 0x1CEC,
10084 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF7, 0x1CFA, 0x1CFA, 0x2000, 0x200B,
10085 0x200E, 0x2064, 0x2066, 0x2070, 0x2074, 0x207E, 0x2080, 0x208E,
10086 0x20A0, 0x20C0, 0x2100, 0x2125, 0x2127, 0x2129, 0x212C, 0x2131,
10087 0x2133, 0x214D, 0x214F, 0x215F, 0x2189, 0x218B, 0x2190, 0x2426,
10088 0x2440, 0x244A, 0x2460, 0x27FF, 0x2900, 0x2B73, 0x2B76, 0x2B95,
10089 0x2B97, 0x2BFF, 0x2E00, 0x2E5D, 0x2FF0, 0x3004, 0x3006, 0x3006,
10090 0x3008, 0x3020, 0x3030, 0x3037, 0x303C, 0x303F, 0x309B, 0x309C,
10091 0x30A0, 0x30A0, 0x30FB, 0x30FC, 0x3190, 0x319F, 0x31C0, 0x31E3,
10092 0x31EF, 0x31EF, 0x3220, 0x325F, 0x327F, 0x32CF, 0x32FF, 0x32FF,
10093 0x3358, 0x33FF, 0x4DC0, 0x4DFF, 0xA700, 0xA721, 0xA788, 0xA78A,
10094 0xA830, 0xA839, 0xA92E, 0xA92E, 0xA9CF, 0xA9CF, 0xAB5B, 0xAB5B,
10095 0xAB6A, 0xAB6B, 0xFD3E, 0xFD3F, 0xFE10, 0xFE19, 0xFE30, 0xFE52,
10096 0xFE54, 0xFE66, 0xFE68, 0xFE6B, 0xFEFF, 0xFEFF, 0xFF01, 0xFF20,
10097 0xFF3B, 0xFF40, 0xFF5B, 0xFF65, 0xFF70, 0xFF70, 0xFF9E, 0xFF9F,
10098 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF9, 0xFFFD, 0x10100, 0x10102,
10099 0x10107, 0x10133, 0x10137, 0x1013F, 0x10190, 0x1019C, 0x101D0, 0x101FC,
10100 0x102E1, 0x102FB, 0x1BCA0, 0x1BCA3, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5,
10101 0x1D100, 0x1D126, 0x1D129, 0x1D166, 0x1D16A, 0x1D17A, 0x1D183, 0x1D184,
10102 0x1D18C, 0x1D1A9, 0x1D1AE, 0x1D1EA, 0x1D2C0, 0x1D2D3, 0x1D2E0, 0x1D2F3,
10103 0x1D300, 0x1D356, 0x1D360, 0x1D378, 0x1D400, 0x1D454, 0x1D456, 0x1D49C,
10104 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC,
10105 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505,
10106 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D51E, 0x1D539,
10107 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550,
10108 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D7FF, 0x1EC71, 0x1ECB4,
10109 0x1ED01, 0x1ED3D, 0x1F000, 0x1F02B, 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE,
10110 0x1F0B1, 0x1F0BF, 0x1F0C1, 0x1F0CF, 0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD,
10111 0x1F1E6, 0x1F1FF, 0x1F201, 0x1F202, 0x1F210, 0x1F23B, 0x1F240, 0x1F248,
10112 0x1F250, 0x1F251, 0x1F260, 0x1F265, 0x1F300, 0x1F6D7, 0x1F6DC, 0x1F6EC,
10113 0x1F6F0, 0x1F6FC, 0x1F700, 0x1F776, 0x1F77B, 0x1F7D9, 0x1F7E0, 0x1F7EB,
10114 0x1F7F0, 0x1F7F0, 0x1F800, 0x1F80B, 0x1F810, 0x1F847, 0x1F850, 0x1F859,
10115 0x1F860, 0x1F887, 0x1F890, 0x1F8AD, 0x1F8B0, 0x1F8B1, 0x1F900, 0x1FA53,
10116 0x1FA60, 0x1FA6D, 0x1FA70, 0x1FA7C, 0x1FA80, 0x1FA88, 0x1FA90, 0x1FABD,
10117 0x1FABF, 0x1FAC5, 0x1FACE, 0x1FADB, 0x1FAE0, 0x1FAE8, 0x1FAF0, 0x1FAF8,
10118 0x1FB00, 0x1FB92, 0x1FB94, 0x1FBCA, 0x1FBF0, 0x1FBF9, 0xE0001, 0xE0001,
10119 0xE0020, 0xE007F,
10120 // #97 (15654+39): sc=Latin:Latn
10121 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00BA, 0x00BA,
10122 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02B8, 0x02E0, 0x02E4,
10123 0x1D00, 0x1D25, 0x1D2C, 0x1D5C, 0x1D62, 0x1D65, 0x1D6B, 0x1D77,
10124 0x1D79, 0x1DBE, 0x1E00, 0x1EFF, 0x2071, 0x2071, 0x207F, 0x207F,
10125 0x2090, 0x209C, 0x212A, 0x212B, 0x2132, 0x2132, 0x214E, 0x214E,
10126 0x2160, 0x2188, 0x2C60, 0x2C7F, 0xA722, 0xA787, 0xA78B, 0xA7CA,
10127 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA7FF,
10128 0xAB30, 0xAB5A, 0xAB5C, 0xAB64, 0xAB66, 0xAB69, 0xFB00, 0xFB06,
10129 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10780, 0x10785, 0x10787, 0x107B0,
10130 0x107B2, 0x107BA, 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A,
10131 // #98 (15693+36): sc=Greek:Grek
10132 0x0370, 0x0373, 0x0375, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F,
10133 0x0384, 0x0384, 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C,
10134 0x038E, 0x03A1, 0x03A3, 0x03E1, 0x03F0, 0x03FF, 0x1D26, 0x1D2A,
10135 0x1D5D, 0x1D61, 0x1D66, 0x1D6A, 0x1DBF, 0x1DBF, 0x1F00, 0x1F15,
10136 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57,
10137 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D,
10138 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4, 0x1FC6, 0x1FD3, 0x1FD6, 0x1FDB,
10139 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFE, 0x2126, 0x2126,
10140 0xAB65, 0xAB65, 0x10140, 0x1018E, 0x101A0, 0x101A0, 0x1D200, 0x1D245,
10141 // #99 (15729+10): sc=Cyrillic:Cyrl
10142 0x0400, 0x0484, 0x0487, 0x052F, 0x1C80, 0x1C88, 0x1D2B, 0x1D2B,
10143 0x1D78, 0x1D78, 0x2DE0, 0x2DFF, 0xA640, 0xA69F, 0xFE2E, 0xFE2F,
10144 0x1E030, 0x1E06D, 0x1E08F, 0x1E08F,
10145 // #100 (15739+4): sc=Armenian:Armn scx=Armenian:Armn
10146 0x0531, 0x0556, 0x0559, 0x058A, 0x058D, 0x058F, 0xFB13, 0xFB17,
10147 // #101 (15743+9): sc=Hebrew:Hebr scx=Hebrew:Hebr
10148 0x0591, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F4, 0xFB1D, 0xFB36,
10149 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44,
10150 0xFB46, 0xFB4F,
10151 // #102 (15752+58): sc=Arabic:Arab
10152 0x0600, 0x0604, 0x0606, 0x060B, 0x060D, 0x061A, 0x061C, 0x061E,
10153 0x0620, 0x063F, 0x0641, 0x064A, 0x0656, 0x066F, 0x0671, 0x06DC,
10154 0x06DE, 0x06FF, 0x0750, 0x077F, 0x0870, 0x088E, 0x0890, 0x0891,
10155 0x0898, 0x08E1, 0x08E3, 0x08FF, 0xFB50, 0xFBC2, 0xFBD3, 0xFD3D,
10156 0xFD40, 0xFD8F, 0xFD92, 0xFDC7, 0xFDCF, 0xFDCF, 0xFDF0, 0xFDFF,
10157 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0x10E60, 0x10E7E, 0x10EFD, 0x10EFF,
10158 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24,
10159 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39,
10160 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49,
10161 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54,
10162 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D,
10163 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A,
10164 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E,
10165 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9,
10166 0x1EEAB, 0x1EEBB, 0x1EEF0, 0x1EEF1,
10167 // #103 (15810+4): sc=Syriac:Syrc
10168 0x0700, 0x070D, 0x070F, 0x074A, 0x074D, 0x074F, 0x0860, 0x086A,
10169 // #104 (15814+1): sc=Thaana:Thaa
10170 0x0780, 0x07B1,
10171 // #105 (15815+5): sc=Devanagari:Deva
10172 0x0900, 0x0950, 0x0955, 0x0963, 0x0966, 0x097F, 0xA8E0, 0xA8FF,
10173 0x11B00, 0x11B09,
10174 // #106 (15820+14): sc=Bengali:Beng
10175 0x0980, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
10176 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4,
10177 0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD,
10178 0x09DF, 0x09E3, 0x09E6, 0x09FE,
10179 // #107 (15834+16): sc=Gurmukhi:Guru
10180 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
10181 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
10182 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
10183 0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A76,
10184 // #108 (15850+14): sc=Gujarati:Gujr
10185 0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
10186 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5,
10187 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3,
10188 0x0AE6, 0x0AF1, 0x0AF9, 0x0AFF,
10189 // #109 (15864+14): sc=Oriya:Orya
10190 0x0B01, 0x0B03, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28,
10191 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3C, 0x0B44,
10192 0x0B47, 0x0B48, 0x0B4B, 0x0B4D, 0x0B55, 0x0B57, 0x0B5C, 0x0B5D,
10193 0x0B5F, 0x0B63, 0x0B66, 0x0B77,
10194 // #110 (15878+18): sc=Tamil:Taml
10195 0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95,
10196 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4,
10197 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8,
10198 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7, 0x0BE6, 0x0BFA,
10199 0x11FC0, 0x11FF1, 0x11FFF, 0x11FFF,
10200 // #111 (15896+13): sc=Telugu:Telu
10201 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C39,
10202 0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56,
10203 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63, 0x0C66, 0x0C6F,
10204 0x0C77, 0x0C7F,
10205 // #112 (15909+13): sc=Kannada:Knda
10206 0x0C80, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3,
10207 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4, 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD,
10208 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF,
10209 0x0CF1, 0x0CF3,
10210 // #113 (15922+7): sc=Malayalam:Mlym
10211 0x0D00, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48,
10212 0x0D4A, 0x0D4F, 0x0D54, 0x0D63, 0x0D66, 0x0D7F,
10213 // #114 (15929+13): sc=Sinhala:Sinh
10214 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB,
10215 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4,
10216 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF4,
10217 0x111E1, 0x111F4,
10218 // #115 (15942+2): sc=Thai scx=Thai
10219 0x0E01, 0x0E3A, 0x0E40, 0x0E5B,
10220 // #116 (15944+11): sc=Lao:Laoo scx=Lao:Laoo
10221 0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3,
10222 0x0EA5, 0x0EA5, 0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6,
10223 0x0EC8, 0x0ECE, 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF,
10224 // #117 (15955+7): sc=Tibetan:Tibt scx=Tibetan:Tibt
10225 0x0F00, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F97, 0x0F99, 0x0FBC,
10226 0x0FBE, 0x0FCC, 0x0FCE, 0x0FD4, 0x0FD9, 0x0FDA,
10227 // #118 (15962+3): sc=Myanmar:Mymr
10228 0x1000, 0x109F, 0xA9E0, 0xA9FE, 0xAA60, 0xAA7F,
10229 // #119 (15965+10): sc=Georgian:Geor
10230 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
10231 0x10FC, 0x10FF, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x2D00, 0x2D25,
10232 0x2D27, 0x2D27, 0x2D2D, 0x2D2D,
10233 // #120 (15975+14): sc=Hangul:Hang
10234 0x1100, 0x11FF, 0x302E, 0x302F, 0x3131, 0x318E, 0x3200, 0x321E,
10235 0x3260, 0x327E, 0xA960, 0xA97C, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6,
10236 0xD7CB, 0xD7FB, 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF,
10237 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC,
10238 // #121 (15989+36): sc=Ethiopic:Ethi scx=Ethiopic:Ethi
10239 0x1200, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258,
10240 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0,
10241 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5,
10242 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A,
10243 0x135D, 0x137C, 0x1380, 0x1399, 0x2D80, 0x2D96, 0x2DA0, 0x2DA6,
10244 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6,
10245 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0xAB01, 0xAB06,
10246 0xAB09, 0xAB0E, 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E,
10247 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE,
10248 // #122 (16025+3): sc=Cherokee:Cher scx=Cherokee:Cher
10249 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0xAB70, 0xABBF,
10250 // #123 (16028+3): sc=Canadian_Aboriginal:Cans scx=Canadian_Aboriginal:Cans
10251 0x1400, 0x167F, 0x18B0, 0x18F5, 0x11AB0, 0x11ABF,
10252 // #124 (16031+1): sc=Ogham:Ogam scx=Ogham:Ogam
10253 0x1680, 0x169C,
10254 // #125 (16032+2): sc=Runic:Runr scx=Runic:Runr
10255 0x16A0, 0x16EA, 0x16EE, 0x16F8,
10256 // #126 (16034+4): sc=Khmer:Khmr scx=Khmer:Khmr
10257 0x1780, 0x17DD, 0x17E0, 0x17E9, 0x17F0, 0x17F9, 0x19E0, 0x19FF,
10258 // #127 (16038+6): sc=Mongolian:Mong
10259 0x1800, 0x1801, 0x1804, 0x1804, 0x1806, 0x1819, 0x1820, 0x1878,
10260 0x1880, 0x18AA, 0x11660, 0x1166C,
10261 // #128 (16044+6): sc=Hiragana:Hira
10262 0x3041, 0x3096, 0x309D, 0x309F, 0x1B001, 0x1B11F, 0x1B132, 0x1B132,
10263 0x1B150, 0x1B152, 0x1F200, 0x1F200,
10264 // #129 (16050+14): sc=Katakana:Kana
10265 0x30A1, 0x30FA, 0x30FD, 0x30FF, 0x31F0, 0x31FF, 0x32D0, 0x32FE,
10266 0x3300, 0x3357, 0xFF66, 0xFF6F, 0xFF71, 0xFF9D, 0x1AFF0, 0x1AFF3,
10267 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B000, 0x1B120, 0x1B122,
10268 0x1B155, 0x1B155, 0x1B164, 0x1B167,
10269 // #130 (16064+3): sc=Bopomofo:Bopo
10270 0x02EA, 0x02EB, 0x3105, 0x312F, 0x31A0, 0x31BF,
10271 // #131 (16067+22): sc=Han:Hani
10272 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x3005, 0x3005,
10273 0x3007, 0x3007, 0x3021, 0x3029, 0x3038, 0x303B, 0x3400, 0x4DBF,
10274 0x4E00, 0x9FFF, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0x16FE2, 0x16FE3,
10275 0x16FF0, 0x16FF1, 0x20000, 0x2A6DF, 0x2A700, 0x2B739, 0x2B740, 0x2B81D,
10276 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D, 0x2F800, 0x2FA1D,
10277 0x30000, 0x3134A, 0x31350, 0x323AF,
10278 // #132 (16089+2): sc=Yi:Yiii
10279 0xA000, 0xA48C, 0xA490, 0xA4C6,
10280 // #133 (16091+2): sc=Old_Italic:Ital scx=Old_Italic:Ital
10281 0x10300, 0x10323, 0x1032D, 0x1032F,
10282 // #134 (16093+1): sc=Gothic:Goth scx=Gothic:Goth
10283 0x10330, 0x1034A,
10284 // #135 (16094+1): sc=Deseret:Dsrt scx=Deseret:Dsrt
10285 0x10400, 0x1044F,
10286 // #136 (16095+29): sc=Inherited:Zinh:Qaai
10287 0x0300, 0x036F, 0x0485, 0x0486, 0x064B, 0x0655, 0x0670, 0x0670,
10288 0x0951, 0x0954, 0x1AB0, 0x1ACE, 0x1CD0, 0x1CD2, 0x1CD4, 0x1CE0,
10289 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF8, 0x1CF9,
10290 0x1DC0, 0x1DFF, 0x200C, 0x200D, 0x20D0, 0x20F0, 0x302A, 0x302D,
10291 0x3099, 0x309A, 0xFE00, 0xFE0F, 0xFE20, 0xFE2D, 0x101FD, 0x101FD,
10292 0x102E0, 0x102E0, 0x1133B, 0x1133B, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46,
10293 0x1D167, 0x1D169, 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD,
10294 0xE0100, 0xE01EF,
10295 // #137 (16124+2): sc=Tagalog:Tglg
10296 0x1700, 0x1715, 0x171F, 0x171F,
10297 // #138 (16126+1): sc=Hanunoo:Hano
10298 0x1720, 0x1734,
10299 // #139 (16127+1): sc=Buhid:Buhd
10300 0x1740, 0x1753,
10301 // #140 (16128+3): sc=Tagbanwa:Tagb
10302 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
10303 // #141 (16131+5): sc=Limbu:Limb
10304 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B, 0x1940, 0x1940,
10305 0x1944, 0x194F,
10306 // #142 (16136+2): sc=Tai_Le:Tale
10307 0x1950, 0x196D, 0x1970, 0x1974,
10308 // #143 (16138+7): sc=Linear_B:Linb
10309 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D,
10310 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA,
10311 // #144 (16145+2): sc=Ugaritic:Ugar scx=Ugaritic:Ugar
10312 0x10380, 0x1039D, 0x1039F, 0x1039F,
10313 // #145 (16147+1): sc=Shavian:Shaw scx=Shavian:Shaw
10314 0x10450, 0x1047F,
10315 // #146 (16148+2): sc=Osmanya:Osma scx=Osmanya:Osma
10316 0x10480, 0x1049D, 0x104A0, 0x104A9,
10317 // #147 (16150+6): sc=Cypriot:Cprt
10318 0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838,
10319 0x1083C, 0x1083C, 0x1083F, 0x1083F,
10320 // #148 (16156+1): sc=Braille:Brai scx=Braille:Brai
10321 0x2800, 0x28FF,
10322 // #149 (16157+2): sc=Buginese:Bugi
10323 0x1A00, 0x1A1B, 0x1A1E, 0x1A1F,
10324 // #150 (16159+3): sc=Coptic:Copt:Qaac
10325 0x03E2, 0x03EF, 0x2C80, 0x2CF3, 0x2CF9, 0x2CFF,
10326 // #151 (16162+4): sc=New_Tai_Lue:Talu scx=New_Tai_Lue:Talu
10327 0x1980, 0x19AB, 0x19B0, 0x19C9, 0x19D0, 0x19DA, 0x19DE, 0x19DF,
10328 // #152 (16166+6): sc=Glagolitic:Glag
10329 0x2C00, 0x2C5F, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021,
10330 0x1E023, 0x1E024, 0x1E026, 0x1E02A,
10331 // #153 (16172+3): sc=Tifinagh:Tfng scx=Tifinagh:Tfng
10332 0x2D30, 0x2D67, 0x2D6F, 0x2D70, 0x2D7F, 0x2D7F,
10333 // #154 (16175+1): sc=Syloti_Nagri:Sylo
10334 0xA800, 0xA82C,
10335 // #155 (16176+2): sc=Old_Persian:Xpeo scx=Old_Persian:Xpeo
10336 0x103A0, 0x103C3, 0x103C8, 0x103D5,
10337 // #156 (16178+8): sc=Kharoshthi:Khar scx=Kharoshthi:Khar
10338 0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13, 0x10A15, 0x10A17,
10339 0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A48, 0x10A50, 0x10A58,
10340 // #157 (16186+2): sc=Balinese:Bali scx=Balinese:Bali
10341 0x1B00, 0x1B4C, 0x1B50, 0x1B7E,
10342 // #158 (16188+4): sc=Cuneiform:Xsux scx=Cuneiform:Xsux
10343 0x12000, 0x12399, 0x12400, 0x1246E, 0x12470, 0x12474, 0x12480, 0x12543,
10344 // #159 (16192+2): sc=Phoenician:Phnx scx=Phoenician:Phnx
10345 0x10900, 0x1091B, 0x1091F, 0x1091F,
10346 // #160 (16194+1): sc=Phags_Pa:Phag
10347 0xA840, 0xA877,
10348 // #161 (16195+2): sc=Nko:Nkoo
10349 0x07C0, 0x07FA, 0x07FD, 0x07FF,
10350 // #162 (16197+2): sc=Sundanese:Sund scx=Sundanese:Sund
10351 0x1B80, 0x1BBF, 0x1CC0, 0x1CC7,
10352 // #163 (16199+3): sc=Lepcha:Lepc scx=Lepcha:Lepc
10353 0x1C00, 0x1C37, 0x1C3B, 0x1C49, 0x1C4D, 0x1C4F,
10354 // #164 (16202+1): sc=Ol_Chiki:Olck scx=Ol_Chiki:Olck
10355 0x1C50, 0x1C7F,
10356 // #165 (16203+1): sc=Vai:Vaii scx=Vai:Vaii
10357 0xA500, 0xA62B,
10358 // #166 (16204+2): sc=Saurashtra:Saur scx=Saurashtra:Saur
10359 0xA880, 0xA8C5, 0xA8CE, 0xA8D9,
10360 // #167 (16206+2): sc=Kayah_Li:Kali
10361 0xA900, 0xA92D, 0xA92F, 0xA92F,
10362 // #168 (16208+2): sc=Rejang:Rjng scx=Rejang:Rjng
10363 0xA930, 0xA953, 0xA95F, 0xA95F,
10364 // #169 (16210+1): sc=Lycian:Lyci scx=Lycian:Lyci
10365 0x10280, 0x1029C,
10366 // #170 (16211+1): sc=Carian:Cari scx=Carian:Cari
10367 0x102A0, 0x102D0,
10368 // #171 (16212+2): sc=Lydian:Lydi scx=Lydian:Lydi
10369 0x10920, 0x10939, 0x1093F, 0x1093F,
10370 // #172 (16214+4): sc=Cham scx=Cham
10371 0xAA00, 0xAA36, 0xAA40, 0xAA4D, 0xAA50, 0xAA59, 0xAA5C, 0xAA5F,
10372 // #173 (16218+5): sc=Tai_Tham:Lana scx=Tai_Tham:Lana
10373 0x1A20, 0x1A5E, 0x1A60, 0x1A7C, 0x1A7F, 0x1A89, 0x1A90, 0x1A99,
10374 0x1AA0, 0x1AAD,
10375 // #174 (16223+2): sc=Tai_Viet:Tavt scx=Tai_Viet:Tavt
10376 0xAA80, 0xAAC2, 0xAADB, 0xAADF,
10377 // #175 (16225+2): sc=Avestan:Avst scx=Avestan:Avst
10378 0x10B00, 0x10B35, 0x10B39, 0x10B3F,
10379 // #176 (16227+1): sc=Egyptian_Hieroglyphs:Egyp scx=Egyptian_Hieroglyphs:Egyp
10380 0x13000, 0x13455,
10381 // #177 (16228+2): sc=Samaritan:Samr scx=Samaritan:Samr
10382 0x0800, 0x082D, 0x0830, 0x083E,
10383 // #178 (16230+2): sc=Lisu scx=Lisu
10384 0xA4D0, 0xA4FF, 0x11FB0, 0x11FB0,
10385 // #179 (16232+2): sc=Bamum:Bamu scx=Bamum:Bamu
10386 0xA6A0, 0xA6F7, 0x16800, 0x16A38,
10387 // #180 (16234+3): sc=Javanese:Java
10388 0xA980, 0xA9CD, 0xA9D0, 0xA9D9, 0xA9DE, 0xA9DF,
10389 // #181 (16237+3): sc=Meetei_Mayek:Mtei scx=Meetei_Mayek:Mtei
10390 0xAAE0, 0xAAF6, 0xABC0, 0xABED, 0xABF0, 0xABF9,
10391 // #182 (16240+2): sc=Imperial_Aramaic:Armi scx=Imperial_Aramaic:Armi
10392 0x10840, 0x10855, 0x10857, 0x1085F,
10393 // #183 (16242+1): sc=Old_South_Arabian:Sarb scx=Old_South_Arabian:Sarb
10394 0x10A60, 0x10A7F,
10395 // #184 (16243+2): sc=Inscriptional_Parthian:Prti scx=Inscriptional_Parthian:Prti
10396 0x10B40, 0x10B55, 0x10B58, 0x10B5F,
10397 // #185 (16245+2): sc=Inscriptional_Pahlavi:Phli scx=Inscriptional_Pahlavi:Phli
10398 0x10B60, 0x10B72, 0x10B78, 0x10B7F,
10399 // #186 (16247+1): sc=Old_Turkic:Orkh scx=Old_Turkic:Orkh
10400 0x10C00, 0x10C48,
10401 // #187 (16248+2): sc=Kaithi:Kthi
10402 0x11080, 0x110C2, 0x110CD, 0x110CD,
10403 // #188 (16250+2): sc=Batak:Batk scx=Batak:Batk
10404 0x1BC0, 0x1BF3, 0x1BFC, 0x1BFF,
10405 // #189 (16252+3): sc=Brahmi:Brah scx=Brahmi:Brah
10406 0x11000, 0x1104D, 0x11052, 0x11075, 0x1107F, 0x1107F,
10407 // #190 (16255+2): sc=Mandaic:Mand
10408 0x0840, 0x085B, 0x085E, 0x085E,
10409 // #191 (16257+2): sc=Chakma:Cakm
10410 0x11100, 0x11134, 0x11136, 0x11147,
10411 // #192 (16259+3): sc=Meroitic_Cursive:Merc scx=Meroitic_Cursive:Merc
10412 0x109A0, 0x109B7, 0x109BC, 0x109CF, 0x109D2, 0x109FF,
10413 // #193 (16262+1): sc=Meroitic_Hieroglyphs:Mero scx=Meroitic_Hieroglyphs:Mero
10414 0x10980, 0x1099F,
10415 // #194 (16263+3): sc=Miao:Plrd scx=Miao:Plrd
10416 0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F,
10417 // #195 (16266+1): sc=Sharada:Shrd
10418 0x11180, 0x111DF,
10419 // #196 (16267+2): sc=Sora_Sompeng:Sora scx=Sora_Sompeng:Sora
10420 0x110D0, 0x110E8, 0x110F0, 0x110F9,
10421 // #197 (16269+2): sc=Takri:Takr
10422 0x11680, 0x116B9, 0x116C0, 0x116C9,
10423 // #198 (16271+2): sc=Caucasian_Albanian:Aghb scx=Caucasian_Albanian:Aghb
10424 0x10530, 0x10563, 0x1056F, 0x1056F,
10425 // #199 (16273+2): sc=Bassa_Vah:Bass scx=Bassa_Vah:Bass
10426 0x16AD0, 0x16AED, 0x16AF0, 0x16AF5,
10427 // #200 (16275+5): sc=Duployan:Dupl
10428 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99,
10429 0x1BC9C, 0x1BC9F,
10430 // #201 (16280+1): sc=Elbasan:Elba scx=Elbasan:Elba
10431 0x10500, 0x10527,
10432 // #202 (16281+15): sc=Grantha:Gran
10433 0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328,
10434 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133C, 0x11344,
10435 0x11347, 0x11348, 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357,
10436 0x1135D, 0x11363, 0x11366, 0x1136C, 0x11370, 0x11374,
10437 // #203 (16296+5): sc=Pahawh_Hmong:Hmng scx=Pahawh_Hmong:Hmng
10438 0x16B00, 0x16B45, 0x16B50, 0x16B59, 0x16B5B, 0x16B61, 0x16B63, 0x16B77,
10439 0x16B7D, 0x16B8F,
10440 // #204 (16301+2): sc=Khojki:Khoj
10441 0x11200, 0x11211, 0x11213, 0x11241,
10442 // #205 (16303+3): sc=Linear_A:Lina
10443 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767,
10444 // #206 (16306+1): sc=Mahajani:Mahj
10445 0x11150, 0x11176,
10446 // #207 (16307+2): sc=Manichaean:Mani
10447 0x10AC0, 0x10AE6, 0x10AEB, 0x10AF6,
10448 // #208 (16309+2): sc=Mende_Kikakui:Mend scx=Mende_Kikakui:Mend
10449 0x1E800, 0x1E8C4, 0x1E8C7, 0x1E8D6,
10450 // #209 (16311+2): sc=Modi
10451 0x11600, 0x11644, 0x11650, 0x11659,
10452 // #210 (16313+3): sc=Mro:Mroo scx=Mro:Mroo
10453 0x16A40, 0x16A5E, 0x16A60, 0x16A69, 0x16A6E, 0x16A6F,
10454 // #211 (16316+1): sc=Old_North_Arabian:Narb scx=Old_North_Arabian:Narb
10455 0x10A80, 0x10A9F,
10456 // #212 (16317+2): sc=Nabataean:Nbat scx=Nabataean:Nbat
10457 0x10880, 0x1089E, 0x108A7, 0x108AF,
10458 // #213 (16319+1): sc=Palmyrene:Palm scx=Palmyrene:Palm
10459 0x10860, 0x1087F,
10460 // #214 (16320+1): sc=Pau_Cin_Hau:Pauc scx=Pau_Cin_Hau:Pauc
10461 0x11AC0, 0x11AF8,
10462 // #215 (16321+1): sc=Old_Permic:Perm
10463 0x10350, 0x1037A,
10464 // #216 (16322+3): sc=Psalter_Pahlavi:Phlp
10465 0x10B80, 0x10B91, 0x10B99, 0x10B9C, 0x10BA9, 0x10BAF,
10466 // #217 (16325+2): sc=Siddham:Sidd scx=Siddham:Sidd
10467 0x11580, 0x115B5, 0x115B8, 0x115DD,
10468 // #218 (16327+2): sc=Khudawadi:Sind
10469 0x112B0, 0x112EA, 0x112F0, 0x112F9,
10470 // #219 (16329+2): sc=Tirhuta:Tirh
10471 0x11480, 0x114C7, 0x114D0, 0x114D9,
10472 // #220 (16331+2): sc=Warang_Citi:Wara scx=Warang_Citi:Wara
10473 0x118A0, 0x118F2, 0x118FF, 0x118FF,
10474 // #221 (16333+3): sc=Ahom scx=Ahom
10475 0x11700, 0x1171A, 0x1171D, 0x1172B, 0x11730, 0x11746,
10476 // #222 (16336+1): sc=Anatolian_Hieroglyphs:Hluw scx=Anatolian_Hieroglyphs:Hluw
10477 0x14400, 0x14646,
10478 // #223 (16337+3): sc=Hatran:Hatr scx=Hatran:Hatr
10479 0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x108FB, 0x108FF,
10480 // #224 (16340+5): sc=Multani:Mult
10481 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D,
10482 0x1129F, 0x112A9,
10483 // #225 (16345+3): sc=Old_Hungarian:Hung scx=Old_Hungarian:Hung
10484 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10CFA, 0x10CFF,
10485 // #226 (16348+3): sc=SignWriting:Sgnw scx=SignWriting:Sgnw
10486 0x1D800, 0x1DA8B, 0x1DA9B, 0x1DA9F, 0x1DAA1, 0x1DAAF,
10487 // #227 (16351+3): sc=Adlam:Adlm
10488 0x1E900, 0x1E94B, 0x1E950, 0x1E959, 0x1E95E, 0x1E95F,
10489 // #228 (16354+4): sc=Bhaiksuki:Bhks scx=Bhaiksuki:Bhks
10490 0x11C00, 0x11C08, 0x11C0A, 0x11C36, 0x11C38, 0x11C45, 0x11C50, 0x11C6C,
10491 // #229 (16358+3): sc=Marchen:Marc scx=Marchen:Marc
10492 0x11C70, 0x11C8F, 0x11C92, 0x11CA7, 0x11CA9, 0x11CB6,
10493 // #230 (16361+2): sc=Newa scx=Newa
10494 0x11400, 0x1145B, 0x1145D, 0x11461,
10495 // #231 (16363+2): sc=Osage:Osge scx=Osage:Osge
10496 0x104B0, 0x104D3, 0x104D8, 0x104FB,
10497 // #232 (16365+4): sc=Tangut:Tang scx=Tangut:Tang
10498 0x16FE0, 0x16FE0, 0x17000, 0x187F7, 0x18800, 0x18AFF, 0x18D00, 0x18D08,
10499 // #233 (16369+7): sc=Masaram_Gondi:Gonm
10500 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36, 0x11D3A, 0x11D3A,
10501 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59,
10502 // #234 (16376+2): sc=Nushu:Nshu scx=Nushu:Nshu
10503 0x16FE1, 0x16FE1, 0x1B170, 0x1B2FB,
10504 // #235 (16378+1): sc=Soyombo:Soyo scx=Soyombo:Soyo
10505 0x11A50, 0x11AA2,
10506 // #236 (16379+1): sc=Zanabazar_Square:Zanb scx=Zanabazar_Square:Zanb
10507 0x11A00, 0x11A47,
10508 // #237 (16380+1): sc=Dogra:Dogr
10509 0x11800, 0x1183B,
10510 // #238 (16381+6): sc=Gunjala_Gondi:Gong
10511 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D90, 0x11D91,
10512 0x11D93, 0x11D98, 0x11DA0, 0x11DA9,
10513 // #239 (16387+1): sc=Makasar:Maka scx=Makasar:Maka
10514 0x11EE0, 0x11EF8,
10515 // #240 (16388+1): sc=Medefaidrin:Medf scx=Medefaidrin:Medf
10516 0x16E40, 0x16E9A,
10517 // #241 (16389+2): sc=Hanifi_Rohingya:Rohg
10518 0x10D00, 0x10D27, 0x10D30, 0x10D39,
10519 // #242 (16391+1): sc=Sogdian:Sogd
10520 0x10F30, 0x10F59,
10521 // #243 (16392+1): sc=Old_Sogdian:Sogo scx=Old_Sogdian:Sogo
10522 0x10F00, 0x10F27,
10523 // #244 (16393+1): sc=Elymaic:Elym scx=Elymaic:Elym
10524 0x10FE0, 0x10FF6,
10525 // #245 (16394+3): sc=Nandinagari:Nand
10526 0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119E4,
10527 // #246 (16397+4): sc=Nyiakeng_Puachue_Hmong:Hmnp scx=Nyiakeng_Puachue_Hmong:Hmnp
10528 0x1E100, 0x1E12C, 0x1E130, 0x1E13D, 0x1E140, 0x1E149, 0x1E14E, 0x1E14F,
10529 // #247 (16401+2): sc=Wancho:Wcho scx=Wancho:Wcho
10530 0x1E2C0, 0x1E2F9, 0x1E2FF, 0x1E2FF,
10531 // #248 (16403+1): sc=Chorasmian:Chrs scx=Chorasmian:Chrs
10532 0x10FB0, 0x10FCB,
10533 // #249 (16404+8): sc=Dives_Akuru:Diak scx=Dives_Akuru:Diak
10534 0x11900, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916,
10535 0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x11946, 0x11950, 0x11959,
10536 // #250 (16412+2): sc=Khitan_Small_Script:Kits scx=Khitan_Small_Script:Kits
10537 0x16FE4, 0x16FE4, 0x18B00, 0x18CD5,
10538 // #251 (16414+3): sc=Yezidi:Yezi
10539 0x10E80, 0x10EA9, 0x10EAB, 0x10EAD, 0x10EB0, 0x10EB1,
10540 // #252 (16417+1): sc=Cypro_Minoan:Cpmn
10541 0x12F90, 0x12FF2,
10542 // #253 (16418+1): sc=Old_Uyghur:Ougr
10543 0x10F70, 0x10F89,
10544 // #254 (16419+2): sc=Tangsa:Tnsa scx=Tangsa:Tnsa
10545 0x16A70, 0x16ABE, 0x16AC0, 0x16AC9,
10546 // #255 (16421+1): sc=Toto scx=Toto
10547 0x1E290, 0x1E2AE,
10548 // #256 (16422+8): sc=Vithkuqi:Vith scx=Vithkuqi:Vith
10549 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595,
10550 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC,
10551 // #257 (16430+3): sc=Kawi scx=Kawi
10552 0x11F00, 0x11F10, 0x11F12, 0x11F3A, 0x11F3E, 0x11F59,
10553 // #258 (16433+1): sc=Nag_Mundari:Nagm scx=Nag_Mundari:Nagm
10554 0x1E4D0, 0x1E4F9,
10555 // #259 (16434+705): sc=Unknown:Zzzz scx=Unknown:Zzzz
10556 0x0378, 0x0379, 0x0380, 0x0383, 0x038B, 0x038B, 0x038D, 0x038D,
10557 0x03A2, 0x03A2, 0x0530, 0x0530, 0x0557, 0x0558, 0x058B, 0x058C,
10558 0x0590, 0x0590, 0x05C8, 0x05CF, 0x05EB, 0x05EE, 0x05F5, 0x05FF,
10559 0x070E, 0x070E, 0x074B, 0x074C, 0x07B2, 0x07BF, 0x07FB, 0x07FC,
10560 0x082E, 0x082F, 0x083F, 0x083F, 0x085C, 0x085D, 0x085F, 0x085F,
10561 0x086B, 0x086F, 0x088F, 0x088F, 0x0892, 0x0897, 0x0984, 0x0984,
10562 0x098D, 0x098E, 0x0991, 0x0992, 0x09A9, 0x09A9, 0x09B1, 0x09B1,
10563 0x09B3, 0x09B5, 0x09BA, 0x09BB, 0x09C5, 0x09C6, 0x09C9, 0x09CA,
10564 0x09CF, 0x09D6, 0x09D8, 0x09DB, 0x09DE, 0x09DE, 0x09E4, 0x09E5,
10565 0x09FF, 0x0A00, 0x0A04, 0x0A04, 0x0A0B, 0x0A0E, 0x0A11, 0x0A12,
10566 0x0A29, 0x0A29, 0x0A31, 0x0A31, 0x0A34, 0x0A34, 0x0A37, 0x0A37,
10567 0x0A3A, 0x0A3B, 0x0A3D, 0x0A3D, 0x0A43, 0x0A46, 0x0A49, 0x0A4A,
10568 0x0A4E, 0x0A50, 0x0A52, 0x0A58, 0x0A5D, 0x0A5D, 0x0A5F, 0x0A65,
10569 0x0A77, 0x0A80, 0x0A84, 0x0A84, 0x0A8E, 0x0A8E, 0x0A92, 0x0A92,
10570 0x0AA9, 0x0AA9, 0x0AB1, 0x0AB1, 0x0AB4, 0x0AB4, 0x0ABA, 0x0ABB,
10571 0x0AC6, 0x0AC6, 0x0ACA, 0x0ACA, 0x0ACE, 0x0ACF, 0x0AD1, 0x0ADF,
10572 0x0AE4, 0x0AE5, 0x0AF2, 0x0AF8, 0x0B00, 0x0B00, 0x0B04, 0x0B04,
10573 0x0B0D, 0x0B0E, 0x0B11, 0x0B12, 0x0B29, 0x0B29, 0x0B31, 0x0B31,
10574 0x0B34, 0x0B34, 0x0B3A, 0x0B3B, 0x0B45, 0x0B46, 0x0B49, 0x0B4A,
10575 0x0B4E, 0x0B54, 0x0B58, 0x0B5B, 0x0B5E, 0x0B5E, 0x0B64, 0x0B65,
10576 0x0B78, 0x0B81, 0x0B84, 0x0B84, 0x0B8B, 0x0B8D, 0x0B91, 0x0B91,
10577 0x0B96, 0x0B98, 0x0B9B, 0x0B9B, 0x0B9D, 0x0B9D, 0x0BA0, 0x0BA2,
10578 0x0BA5, 0x0BA7, 0x0BAB, 0x0BAD, 0x0BBA, 0x0BBD, 0x0BC3, 0x0BC5,
10579 0x0BC9, 0x0BC9, 0x0BCE, 0x0BCF, 0x0BD1, 0x0BD6, 0x0BD8, 0x0BE5,
10580 0x0BFB, 0x0BFF, 0x0C0D, 0x0C0D, 0x0C11, 0x0C11, 0x0C29, 0x0C29,
10581 0x0C3A, 0x0C3B, 0x0C45, 0x0C45, 0x0C49, 0x0C49, 0x0C4E, 0x0C54,
10582 0x0C57, 0x0C57, 0x0C5B, 0x0C5C, 0x0C5E, 0x0C5F, 0x0C64, 0x0C65,
10583 0x0C70, 0x0C76, 0x0C8D, 0x0C8D, 0x0C91, 0x0C91, 0x0CA9, 0x0CA9,
10584 0x0CB4, 0x0CB4, 0x0CBA, 0x0CBB, 0x0CC5, 0x0CC5, 0x0CC9, 0x0CC9,
10585 0x0CCE, 0x0CD4, 0x0CD7, 0x0CDC, 0x0CDF, 0x0CDF, 0x0CE4, 0x0CE5,
10586 0x0CF0, 0x0CF0, 0x0CF4, 0x0CFF, 0x0D0D, 0x0D0D, 0x0D11, 0x0D11,
10587 0x0D45, 0x0D45, 0x0D49, 0x0D49, 0x0D50, 0x0D53, 0x0D64, 0x0D65,
10588 0x0D80, 0x0D80, 0x0D84, 0x0D84, 0x0D97, 0x0D99, 0x0DB2, 0x0DB2,
10589 0x0DBC, 0x0DBC, 0x0DBE, 0x0DBF, 0x0DC7, 0x0DC9, 0x0DCB, 0x0DCE,
10590 0x0DD5, 0x0DD5, 0x0DD7, 0x0DD7, 0x0DE0, 0x0DE5, 0x0DF0, 0x0DF1,
10591 0x0DF5, 0x0E00, 0x0E3B, 0x0E3E, 0x0E5C, 0x0E80, 0x0E83, 0x0E83,
10592 0x0E85, 0x0E85, 0x0E8B, 0x0E8B, 0x0EA4, 0x0EA4, 0x0EA6, 0x0EA6,
10593 0x0EBE, 0x0EBF, 0x0EC5, 0x0EC5, 0x0EC7, 0x0EC7, 0x0ECF, 0x0ECF,
10594 0x0EDA, 0x0EDB, 0x0EE0, 0x0EFF, 0x0F48, 0x0F48, 0x0F6D, 0x0F70,
10595 0x0F98, 0x0F98, 0x0FBD, 0x0FBD, 0x0FCD, 0x0FCD, 0x0FDB, 0x0FFF,
10596 0x10C6, 0x10C6, 0x10C8, 0x10CC, 0x10CE, 0x10CF, 0x1249, 0x1249,
10597 0x124E, 0x124F, 0x1257, 0x1257, 0x1259, 0x1259, 0x125E, 0x125F,
10598 0x1289, 0x1289, 0x128E, 0x128F, 0x12B1, 0x12B1, 0x12B6, 0x12B7,
10599 0x12BF, 0x12BF, 0x12C1, 0x12C1, 0x12C6, 0x12C7, 0x12D7, 0x12D7,
10600 0x1311, 0x1311, 0x1316, 0x1317, 0x135B, 0x135C, 0x137D, 0x137F,
10601 0x139A, 0x139F, 0x13F6, 0x13F7, 0x13FE, 0x13FF, 0x169D, 0x169F,
10602 0x16F9, 0x16FF, 0x1716, 0x171E, 0x1737, 0x173F, 0x1754, 0x175F,
10603 0x176D, 0x176D, 0x1771, 0x1771, 0x1774, 0x177F, 0x17DE, 0x17DF,
10604 0x17EA, 0x17EF, 0x17FA, 0x17FF, 0x181A, 0x181F, 0x1879, 0x187F,
10605 0x18AB, 0x18AF, 0x18F6, 0x18FF, 0x191F, 0x191F, 0x192C, 0x192F,
10606 0x193C, 0x193F, 0x1941, 0x1943, 0x196E, 0x196F, 0x1975, 0x197F,
10607 0x19AC, 0x19AF, 0x19CA, 0x19CF, 0x19DB, 0x19DD, 0x1A1C, 0x1A1D,
10608 0x1A5F, 0x1A5F, 0x1A7D, 0x1A7E, 0x1A8A, 0x1A8F, 0x1A9A, 0x1A9F,
10609 0x1AAE, 0x1AAF, 0x1ACF, 0x1AFF, 0x1B4D, 0x1B4F, 0x1B7F, 0x1B7F,
10610 0x1BF4, 0x1BFB, 0x1C38, 0x1C3A, 0x1C4A, 0x1C4C, 0x1C89, 0x1C8F,
10611 0x1CBB, 0x1CBC, 0x1CC8, 0x1CCF, 0x1CFB, 0x1CFF, 0x1F16, 0x1F17,
10612 0x1F1E, 0x1F1F, 0x1F46, 0x1F47, 0x1F4E, 0x1F4F, 0x1F58, 0x1F58,
10613 0x1F5A, 0x1F5A, 0x1F5C, 0x1F5C, 0x1F5E, 0x1F5E, 0x1F7E, 0x1F7F,
10614 0x1FB5, 0x1FB5, 0x1FC5, 0x1FC5, 0x1FD4, 0x1FD5, 0x1FDC, 0x1FDC,
10615 0x1FF0, 0x1FF1, 0x1FF5, 0x1FF5, 0x1FFF, 0x1FFF, 0x2065, 0x2065,
10616 0x2072, 0x2073, 0x208F, 0x208F, 0x209D, 0x209F, 0x20C1, 0x20CF,
10617 0x20F1, 0x20FF, 0x218C, 0x218F, 0x2427, 0x243F, 0x244B, 0x245F,
10618 0x2B74, 0x2B75, 0x2B96, 0x2B96, 0x2CF4, 0x2CF8, 0x2D26, 0x2D26,
10619 0x2D28, 0x2D2C, 0x2D2E, 0x2D2F, 0x2D68, 0x2D6E, 0x2D71, 0x2D7E,
10620 0x2D97, 0x2D9F, 0x2DA7, 0x2DA7, 0x2DAF, 0x2DAF, 0x2DB7, 0x2DB7,
10621 0x2DBF, 0x2DBF, 0x2DC7, 0x2DC7, 0x2DCF, 0x2DCF, 0x2DD7, 0x2DD7,
10622 0x2DDF, 0x2DDF, 0x2E5E, 0x2E7F, 0x2E9A, 0x2E9A, 0x2EF4, 0x2EFF,
10623 0x2FD6, 0x2FEF, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104,
10624 0x3130, 0x3130, 0x318F, 0x318F, 0x31E4, 0x31EE, 0x321F, 0x321F,
10625 0xA48D, 0xA48F, 0xA4C7, 0xA4CF, 0xA62C, 0xA63F, 0xA6F8, 0xA6FF,
10626 0xA7CB, 0xA7CF, 0xA7D2, 0xA7D2, 0xA7D4, 0xA7D4, 0xA7DA, 0xA7F1,
10627 0xA82D, 0xA82F, 0xA83A, 0xA83F, 0xA878, 0xA87F, 0xA8C6, 0xA8CD,
10628 0xA8DA, 0xA8DF, 0xA954, 0xA95E, 0xA97D, 0xA97F, 0xA9CE, 0xA9CE,
10629 0xA9DA, 0xA9DD, 0xA9FF, 0xA9FF, 0xAA37, 0xAA3F, 0xAA4E, 0xAA4F,
10630 0xAA5A, 0xAA5B, 0xAAC3, 0xAADA, 0xAAF7, 0xAB00, 0xAB07, 0xAB08,
10631 0xAB0F, 0xAB10, 0xAB17, 0xAB1F, 0xAB27, 0xAB27, 0xAB2F, 0xAB2F,
10632 0xAB6C, 0xAB6F, 0xABEE, 0xABEF, 0xABFA, 0xABFF, 0xD7A4, 0xD7AF,
10633 0xD7C7, 0xD7CA, 0xD7FC, 0xF8FF, 0xFA6E, 0xFA6F, 0xFADA, 0xFAFF,
10634 0xFB07, 0xFB12, 0xFB18, 0xFB1C, 0xFB37, 0xFB37, 0xFB3D, 0xFB3D,
10635 0xFB3F, 0xFB3F, 0xFB42, 0xFB42, 0xFB45, 0xFB45, 0xFBC3, 0xFBD2,
10636 0xFD90, 0xFD91, 0xFDC8, 0xFDCE, 0xFDD0, 0xFDEF, 0xFE1A, 0xFE1F,
10637 0xFE53, 0xFE53, 0xFE67, 0xFE67, 0xFE6C, 0xFE6F, 0xFE75, 0xFE75,
10638 0xFEFD, 0xFEFE, 0xFF00, 0xFF00, 0xFFBF, 0xFFC1, 0xFFC8, 0xFFC9,
10639 0xFFD0, 0xFFD1, 0xFFD8, 0xFFD9, 0xFFDD, 0xFFDF, 0xFFE7, 0xFFE7,
10640 0xFFEF, 0xFFF8, 0xFFFE, 0xFFFF, 0x1000C, 0x1000C, 0x10027, 0x10027,
10641 0x1003B, 0x1003B, 0x1003E, 0x1003E, 0x1004E, 0x1004F, 0x1005E, 0x1007F,
10642 0x100FB, 0x100FF, 0x10103, 0x10106, 0x10134, 0x10136, 0x1018F, 0x1018F,
10643 0x1019D, 0x1019F, 0x101A1, 0x101CF, 0x101FE, 0x1027F, 0x1029D, 0x1029F,
10644 0x102D1, 0x102DF, 0x102FC, 0x102FF, 0x10324, 0x1032C, 0x1034B, 0x1034F,
10645 0x1037B, 0x1037F, 0x1039E, 0x1039E, 0x103C4, 0x103C7, 0x103D6, 0x103FF,
10646 0x1049E, 0x1049F, 0x104AA, 0x104AF, 0x104D4, 0x104D7, 0x104FC, 0x104FF,
10647 0x10528, 0x1052F, 0x10564, 0x1056E, 0x1057B, 0x1057B, 0x1058B, 0x1058B,
10648 0x10593, 0x10593, 0x10596, 0x10596, 0x105A2, 0x105A2, 0x105B2, 0x105B2,
10649 0x105BA, 0x105BA, 0x105BD, 0x105FF, 0x10737, 0x1073F, 0x10756, 0x1075F,
10650 0x10768, 0x1077F, 0x10786, 0x10786, 0x107B1, 0x107B1, 0x107BB, 0x107FF,
10651 0x10806, 0x10807, 0x10809, 0x10809, 0x10836, 0x10836, 0x10839, 0x1083B,
10652 0x1083D, 0x1083E, 0x10856, 0x10856, 0x1089F, 0x108A6, 0x108B0, 0x108DF,
10653 0x108F3, 0x108F3, 0x108F6, 0x108FA, 0x1091C, 0x1091E, 0x1093A, 0x1093E,
10654 0x10940, 0x1097F, 0x109B8, 0x109BB, 0x109D0, 0x109D1, 0x10A04, 0x10A04,
10655 0x10A07, 0x10A0B, 0x10A14, 0x10A14, 0x10A18, 0x10A18, 0x10A36, 0x10A37,
10656 0x10A3B, 0x10A3E, 0x10A49, 0x10A4F, 0x10A59, 0x10A5F, 0x10AA0, 0x10ABF,
10657 0x10AE7, 0x10AEA, 0x10AF7, 0x10AFF, 0x10B36, 0x10B38, 0x10B56, 0x10B57,
10658 0x10B73, 0x10B77, 0x10B92, 0x10B98, 0x10B9D, 0x10BA8, 0x10BB0, 0x10BFF,
10659 0x10C49, 0x10C7F, 0x10CB3, 0x10CBF, 0x10CF3, 0x10CF9, 0x10D28, 0x10D2F,
10660 0x10D3A, 0x10E5F, 0x10E7F, 0x10E7F, 0x10EAA, 0x10EAA, 0x10EAE, 0x10EAF,
10661 0x10EB2, 0x10EFC, 0x10F28, 0x10F2F, 0x10F5A, 0x10F6F, 0x10F8A, 0x10FAF,
10662 0x10FCC, 0x10FDF, 0x10FF7, 0x10FFF, 0x1104E, 0x11051, 0x11076, 0x1107E,
10663 0x110C3, 0x110CC, 0x110CE, 0x110CF, 0x110E9, 0x110EF, 0x110FA, 0x110FF,
10664 0x11135, 0x11135, 0x11148, 0x1114F, 0x11177, 0x1117F, 0x111E0, 0x111E0,
10665 0x111F5, 0x111FF, 0x11212, 0x11212, 0x11242, 0x1127F, 0x11287, 0x11287,
10666 0x11289, 0x11289, 0x1128E, 0x1128E, 0x1129E, 0x1129E, 0x112AA, 0x112AF,
10667 0x112EB, 0x112EF, 0x112FA, 0x112FF, 0x11304, 0x11304, 0x1130D, 0x1130E,
10668 0x11311, 0x11312, 0x11329, 0x11329, 0x11331, 0x11331, 0x11334, 0x11334,
10669 0x1133A, 0x1133A, 0x11345, 0x11346, 0x11349, 0x1134A, 0x1134E, 0x1134F,
10670 0x11351, 0x11356, 0x11358, 0x1135C, 0x11364, 0x11365, 0x1136D, 0x1136F,
10671 0x11375, 0x113FF, 0x1145C, 0x1145C, 0x11462, 0x1147F, 0x114C8, 0x114CF,
10672 0x114DA, 0x1157F, 0x115B6, 0x115B7, 0x115DE, 0x115FF, 0x11645, 0x1164F,
10673 0x1165A, 0x1165F, 0x1166D, 0x1167F, 0x116BA, 0x116BF, 0x116CA, 0x116FF,
10674 0x1171B, 0x1171C, 0x1172C, 0x1172F, 0x11747, 0x117FF, 0x1183C, 0x1189F,
10675 0x118F3, 0x118FE, 0x11907, 0x11908, 0x1190A, 0x1190B, 0x11914, 0x11914,
10676 0x11917, 0x11917, 0x11936, 0x11936, 0x11939, 0x1193A, 0x11947, 0x1194F,
10677 0x1195A, 0x1199F, 0x119A8, 0x119A9, 0x119D8, 0x119D9, 0x119E5, 0x119FF,
10678 0x11A48, 0x11A4F, 0x11AA3, 0x11AAF, 0x11AF9, 0x11AFF, 0x11B0A, 0x11BFF,
10679 0x11C09, 0x11C09, 0x11C37, 0x11C37, 0x11C46, 0x11C4F, 0x11C6D, 0x11C6F,
10680 0x11C90, 0x11C91, 0x11CA8, 0x11CA8, 0x11CB7, 0x11CFF, 0x11D07, 0x11D07,
10681 0x11D0A, 0x11D0A, 0x11D37, 0x11D39, 0x11D3B, 0x11D3B, 0x11D3E, 0x11D3E,
10682 0x11D48, 0x11D4F, 0x11D5A, 0x11D5F, 0x11D66, 0x11D66, 0x11D69, 0x11D69,
10683 0x11D8F, 0x11D8F, 0x11D92, 0x11D92, 0x11D99, 0x11D9F, 0x11DAA, 0x11EDF,
10684 0x11EF9, 0x11EFF, 0x11F11, 0x11F11, 0x11F3B, 0x11F3D, 0x11F5A, 0x11FAF,
10685 0x11FB1, 0x11FBF, 0x11FF2, 0x11FFE, 0x1239A, 0x123FF, 0x1246F, 0x1246F,
10686 0x12475, 0x1247F, 0x12544, 0x12F8F, 0x12FF3, 0x12FFF, 0x13456, 0x143FF,
10687 0x14647, 0x167FF, 0x16A39, 0x16A3F, 0x16A5F, 0x16A5F, 0x16A6A, 0x16A6D,
10688 0x16ABF, 0x16ABF, 0x16ACA, 0x16ACF, 0x16AEE, 0x16AEF, 0x16AF6, 0x16AFF,
10689 0x16B46, 0x16B4F, 0x16B5A, 0x16B5A, 0x16B62, 0x16B62, 0x16B78, 0x16B7C,
10690 0x16B90, 0x16E3F, 0x16E9B, 0x16EFF, 0x16F4B, 0x16F4E, 0x16F88, 0x16F8E,
10691 0x16FA0, 0x16FDF, 0x16FE5, 0x16FEF, 0x16FF2, 0x16FFF, 0x187F8, 0x187FF,
10692 0x18CD6, 0x18CFF, 0x18D09, 0x1AFEF, 0x1AFF4, 0x1AFF4, 0x1AFFC, 0x1AFFC,
10693 0x1AFFF, 0x1AFFF, 0x1B123, 0x1B131, 0x1B133, 0x1B14F, 0x1B153, 0x1B154,
10694 0x1B156, 0x1B163, 0x1B168, 0x1B16F, 0x1B2FC, 0x1BBFF, 0x1BC6B, 0x1BC6F,
10695 0x1BC7D, 0x1BC7F, 0x1BC89, 0x1BC8F, 0x1BC9A, 0x1BC9B, 0x1BCA4, 0x1CEFF,
10696 0x1CF2E, 0x1CF2F, 0x1CF47, 0x1CF4F, 0x1CFC4, 0x1CFFF, 0x1D0F6, 0x1D0FF,
10697 0x1D127, 0x1D128, 0x1D1EB, 0x1D1FF, 0x1D246, 0x1D2BF, 0x1D2D4, 0x1D2DF,
10698 0x1D2F4, 0x1D2FF, 0x1D357, 0x1D35F, 0x1D379, 0x1D3FF, 0x1D455, 0x1D455,
10699 0x1D49D, 0x1D49D, 0x1D4A0, 0x1D4A1, 0x1D4A3, 0x1D4A4, 0x1D4A7, 0x1D4A8,
10700 0x1D4AD, 0x1D4AD, 0x1D4BA, 0x1D4BA, 0x1D4BC, 0x1D4BC, 0x1D4C4, 0x1D4C4,
10701 0x1D506, 0x1D506, 0x1D50B, 0x1D50C, 0x1D515, 0x1D515, 0x1D51D, 0x1D51D,
10702 0x1D53A, 0x1D53A, 0x1D53F, 0x1D53F, 0x1D545, 0x1D545, 0x1D547, 0x1D549,
10703 0x1D551, 0x1D551, 0x1D6A6, 0x1D6A7, 0x1D7CC, 0x1D7CD, 0x1DA8C, 0x1DA9A,
10704 0x1DAA0, 0x1DAA0, 0x1DAB0, 0x1DEFF, 0x1DF1F, 0x1DF24, 0x1DF2B, 0x1DFFF,
10705 0x1E007, 0x1E007, 0x1E019, 0x1E01A, 0x1E022, 0x1E022, 0x1E025, 0x1E025,
10706 0x1E02B, 0x1E02F, 0x1E06E, 0x1E08E, 0x1E090, 0x1E0FF, 0x1E12D, 0x1E12F,
10707 0x1E13E, 0x1E13F, 0x1E14A, 0x1E14D, 0x1E150, 0x1E28F, 0x1E2AF, 0x1E2BF,
10708 0x1E2FA, 0x1E2FE, 0x1E300, 0x1E4CF, 0x1E4FA, 0x1E7DF, 0x1E7E7, 0x1E7E7,
10709 0x1E7EC, 0x1E7EC, 0x1E7EF, 0x1E7EF, 0x1E7FF, 0x1E7FF, 0x1E8C5, 0x1E8C6,
10710 0x1E8D7, 0x1E8FF, 0x1E94C, 0x1E94F, 0x1E95A, 0x1E95D, 0x1E960, 0x1EC70,
10711 0x1ECB5, 0x1ED00, 0x1ED3E, 0x1EDFF, 0x1EE04, 0x1EE04, 0x1EE20, 0x1EE20,
10712 0x1EE23, 0x1EE23, 0x1EE25, 0x1EE26, 0x1EE28, 0x1EE28, 0x1EE33, 0x1EE33,
10713 0x1EE38, 0x1EE38, 0x1EE3A, 0x1EE3A, 0x1EE3C, 0x1EE41, 0x1EE43, 0x1EE46,
10714 0x1EE48, 0x1EE48, 0x1EE4A, 0x1EE4A, 0x1EE4C, 0x1EE4C, 0x1EE50, 0x1EE50,
10715 0x1EE53, 0x1EE53, 0x1EE55, 0x1EE56, 0x1EE58, 0x1EE58, 0x1EE5A, 0x1EE5A,
10716 0x1EE5C, 0x1EE5C, 0x1EE5E, 0x1EE5E, 0x1EE60, 0x1EE60, 0x1EE63, 0x1EE63,
10717 0x1EE65, 0x1EE66, 0x1EE6B, 0x1EE6B, 0x1EE73, 0x1EE73, 0x1EE78, 0x1EE78,
10718 0x1EE7D, 0x1EE7D, 0x1EE7F, 0x1EE7F, 0x1EE8A, 0x1EE8A, 0x1EE9C, 0x1EEA0,
10719 0x1EEA4, 0x1EEA4, 0x1EEAA, 0x1EEAA, 0x1EEBC, 0x1EEEF, 0x1EEF2, 0x1EFFF,
10720 0x1F02C, 0x1F02F, 0x1F094, 0x1F09F, 0x1F0AF, 0x1F0B0, 0x1F0C0, 0x1F0C0,
10721 0x1F0D0, 0x1F0D0, 0x1F0F6, 0x1F0FF, 0x1F1AE, 0x1F1E5, 0x1F203, 0x1F20F,
10722 0x1F23C, 0x1F23F, 0x1F249, 0x1F24F, 0x1F252, 0x1F25F, 0x1F266, 0x1F2FF,
10723 0x1F6D8, 0x1F6DB, 0x1F6ED, 0x1F6EF, 0x1F6FD, 0x1F6FF, 0x1F777, 0x1F77A,
10724 0x1F7DA, 0x1F7DF, 0x1F7EC, 0x1F7EF, 0x1F7F1, 0x1F7FF, 0x1F80C, 0x1F80F,
10725 0x1F848, 0x1F84F, 0x1F85A, 0x1F85F, 0x1F888, 0x1F88F, 0x1F8AE, 0x1F8AF,
10726 0x1F8B2, 0x1F8FF, 0x1FA54, 0x1FA5F, 0x1FA6E, 0x1FA6F, 0x1FA7D, 0x1FA7F,
10727 0x1FA89, 0x1FA8F, 0x1FABE, 0x1FABE, 0x1FAC6, 0x1FACD, 0x1FADC, 0x1FADF,
10728 0x1FAE9, 0x1FAEF, 0x1FAF9, 0x1FAFF, 0x1FB93, 0x1FB93, 0x1FBCB, 0x1FBEF,
10729 0x1FBFA, 0x1FFFF, 0x2A6E0, 0x2A6FF, 0x2B73A, 0x2B73F, 0x2B81E, 0x2B81F,
10730 0x2CEA2, 0x2CEAF, 0x2EBE1, 0x2EBEF, 0x2EE5E, 0x2F7FF, 0x2FA1E, 0x2FFFF,
10731 0x3134B, 0x3134F, 0x323B0, 0xE0000, 0xE0002, 0xE001F, 0xE0080, 0xE00FF,
10732 0xE01F0, 0x10FFFF,
10733 // #260 (17139+147): scx=Common:Zyyy
10734 0x0000, 0x0040, 0x005B, 0x0060, 0x007B, 0x00A9, 0x00AB, 0x00B9,
10735 0x00BB, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x02B9, 0x02DF,
10736 0x02E5, 0x02E9, 0x02EC, 0x02FF, 0x0374, 0x0374, 0x037E, 0x037E,
10737 0x0385, 0x0385, 0x0387, 0x0387, 0x0605, 0x0605, 0x06DD, 0x06DD,
10738 0x08E2, 0x08E2, 0x0E3F, 0x0E3F, 0x0FD5, 0x0FD8, 0x16EB, 0x16ED,
10739 0x2000, 0x200B, 0x200E, 0x202E, 0x2030, 0x2064, 0x2066, 0x2070,
10740 0x2074, 0x207E, 0x2080, 0x208E, 0x20A0, 0x20C0, 0x2100, 0x2125,
10741 0x2127, 0x2129, 0x212C, 0x2131, 0x2133, 0x214D, 0x214F, 0x215F,
10742 0x2189, 0x218B, 0x2190, 0x2426, 0x2440, 0x244A, 0x2460, 0x27FF,
10743 0x2900, 0x2B73, 0x2B76, 0x2B95, 0x2B97, 0x2BFF, 0x2E00, 0x2E42,
10744 0x2E44, 0x2E5D, 0x2FF0, 0x3000, 0x3004, 0x3004, 0x3012, 0x3012,
10745 0x3020, 0x3020, 0x3036, 0x3036, 0x31EF, 0x31EF, 0x3248, 0x325F,
10746 0x327F, 0x327F, 0x32B1, 0x32BF, 0x32CC, 0x32CF, 0x3371, 0x337A,
10747 0x3380, 0x33DF, 0x33FF, 0x33FF, 0x4DC0, 0x4DFF, 0xA708, 0xA721,
10748 0xA788, 0xA78A, 0xAB5B, 0xAB5B, 0xAB6A, 0xAB6B, 0xFE10, 0xFE19,
10749 0xFE30, 0xFE44, 0xFE47, 0xFE52, 0xFE54, 0xFE66, 0xFE68, 0xFE6B,
10750 0xFEFF, 0xFEFF, 0xFF01, 0xFF20, 0xFF3B, 0xFF40, 0xFF5B, 0xFF60,
10751 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF9, 0xFFFD, 0x10190, 0x1019C,
10752 0x101D0, 0x101FC, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5, 0x1D100, 0x1D126,
10753 0x1D129, 0x1D166, 0x1D16A, 0x1D17A, 0x1D183, 0x1D184, 0x1D18C, 0x1D1A9,
10754 0x1D1AE, 0x1D1EA, 0x1D2C0, 0x1D2D3, 0x1D2E0, 0x1D2F3, 0x1D300, 0x1D356,
10755 0x1D372, 0x1D378, 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F,
10756 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9,
10757 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A,
10758 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E,
10759 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5,
10760 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D7FF, 0x1EC71, 0x1ECB4, 0x1ED01, 0x1ED3D,
10761 0x1F000, 0x1F02B, 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF,
10762 0x1F0C1, 0x1F0CF, 0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD, 0x1F1E6, 0x1F1FF,
10763 0x1F201, 0x1F202, 0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F260, 0x1F265,
10764 0x1F300, 0x1F6D7, 0x1F6DC, 0x1F6EC, 0x1F6F0, 0x1F6FC, 0x1F700, 0x1F776,
10765 0x1F77B, 0x1F7D9, 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0, 0x1F800, 0x1F80B,
10766 0x1F810, 0x1F847, 0x1F850, 0x1F859, 0x1F860, 0x1F887, 0x1F890, 0x1F8AD,
10767 0x1F8B0, 0x1F8B1, 0x1F900, 0x1FA53, 0x1FA60, 0x1FA6D, 0x1FA70, 0x1FA7C,
10768 0x1FA80, 0x1FA88, 0x1FA90, 0x1FABD, 0x1FABF, 0x1FAC5, 0x1FACE, 0x1FADB,
10769 0x1FAE0, 0x1FAE8, 0x1FAF0, 0x1FAF8, 0x1FB00, 0x1FB92, 0x1FB94, 0x1FBCA,
10770 0x1FBF0, 0x1FBF9, 0xE0001, 0xE0001, 0xE0020, 0xE007F,
10771 // #261 (17286+47): scx=Latin:Latn
10772 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00BA, 0x00BA,
10773 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02B8, 0x02E0, 0x02E4,
10774 0x0363, 0x036F, 0x0485, 0x0486, 0x0951, 0x0952, 0x10FB, 0x10FB,
10775 0x1D00, 0x1D25, 0x1D2C, 0x1D5C, 0x1D62, 0x1D65, 0x1D6B, 0x1D77,
10776 0x1D79, 0x1DBE, 0x1E00, 0x1EFF, 0x202F, 0x202F, 0x2071, 0x2071,
10777 0x207F, 0x207F, 0x2090, 0x209C, 0x20F0, 0x20F0, 0x212A, 0x212B,
10778 0x2132, 0x2132, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C60, 0x2C7F,
10779 0xA700, 0xA707, 0xA722, 0xA787, 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1,
10780 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA7FF, 0xA92E, 0xA92E,
10781 0xAB30, 0xAB5A, 0xAB5C, 0xAB64, 0xAB66, 0xAB69, 0xFB00, 0xFB06,
10782 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10780, 0x10785, 0x10787, 0x107B0,
10783 0x107B2, 0x107BA, 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A,
10784 // #262 (17333+38): scx=Greek:Grek
10785 0x0342, 0x0342, 0x0345, 0x0345, 0x0370, 0x0373, 0x0375, 0x0377,
10786 0x037A, 0x037D, 0x037F, 0x037F, 0x0384, 0x0384, 0x0386, 0x0386,
10787 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03E1,
10788 0x03F0, 0x03FF, 0x1D26, 0x1D2A, 0x1D5D, 0x1D61, 0x1D66, 0x1D6A,
10789 0x1DBF, 0x1DC1, 0x1F00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45,
10790 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B,
10791 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4,
10792 0x1FC6, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4,
10793 0x1FF6, 0x1FFE, 0x2126, 0x2126, 0xAB65, 0xAB65, 0x10140, 0x1018E,
10794 0x101A0, 0x101A0, 0x1D200, 0x1D245,
10795 // #263 (17371+11): scx=Cyrillic:Cyrl
10796 0x0400, 0x052F, 0x1C80, 0x1C88, 0x1D2B, 0x1D2B, 0x1D78, 0x1D78,
10797 0x1DF8, 0x1DF8, 0x2DE0, 0x2DFF, 0x2E43, 0x2E43, 0xA640, 0xA69F,
10798 0xFE2E, 0xFE2F, 0x1E030, 0x1E06D, 0x1E08F, 0x1E08F,
10799 // #264 (17382+52): scx=Arabic:Arab
10800 0x0600, 0x0604, 0x0606, 0x06DC, 0x06DE, 0x06FF, 0x0750, 0x077F,
10801 0x0870, 0x088E, 0x0890, 0x0891, 0x0898, 0x08E1, 0x08E3, 0x08FF,
10802 0xFB50, 0xFBC2, 0xFBD3, 0xFD8F, 0xFD92, 0xFDC7, 0xFDCF, 0xFDCF,
10803 0xFDF0, 0xFDFF, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0x102E0, 0x102FB,
10804 0x10E60, 0x10E7E, 0x10EFD, 0x10EFF, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F,
10805 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32,
10806 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42,
10807 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F,
10808 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59,
10809 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62,
10810 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77,
10811 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B,
10812 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1EEF0, 0x1EEF1,
10813 // #265 (17434+12): scx=Syriac:Syrc
10814 0x060C, 0x060C, 0x061B, 0x061C, 0x061F, 0x061F, 0x0640, 0x0640,
10815 0x064B, 0x0655, 0x0670, 0x0670, 0x0700, 0x070D, 0x070F, 0x074A,
10816 0x074D, 0x074F, 0x0860, 0x086A, 0x1DF8, 0x1DF8, 0x1DFA, 0x1DFA,
10817 // #266 (17446+7): scx=Thaana:Thaa
10818 0x060C, 0x060C, 0x061B, 0x061C, 0x061F, 0x061F, 0x0660, 0x0669,
10819 0x0780, 0x07B1, 0xFDF2, 0xFDF2, 0xFDFD, 0xFDFD,
10820 // #267 (17453+8): scx=Devanagari:Deva
10821 0x0900, 0x0952, 0x0955, 0x097F, 0x1CD0, 0x1CF6, 0x1CF8, 0x1CF9,
10822 0x20F0, 0x20F0, 0xA830, 0xA839, 0xA8E0, 0xA8FF, 0x11B00, 0x11B09,
10823 // #268 (17461+26): scx=Bengali:Beng
10824 0x0951, 0x0952, 0x0964, 0x0965, 0x0980, 0x0983, 0x0985, 0x098C,
10825 0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2,
10826 0x09B6, 0x09B9, 0x09BC, 0x09C4, 0x09C7, 0x09C8, 0x09CB, 0x09CE,
10827 0x09D7, 0x09D7, 0x09DC, 0x09DD, 0x09DF, 0x09E3, 0x09E6, 0x09FE,
10828 0x1CD0, 0x1CD0, 0x1CD2, 0x1CD2, 0x1CD5, 0x1CD6, 0x1CD8, 0x1CD8,
10829 0x1CE1, 0x1CE1, 0x1CEA, 0x1CEA, 0x1CED, 0x1CED, 0x1CF2, 0x1CF2,
10830 0x1CF5, 0x1CF7, 0xA8F1, 0xA8F1,
10831 // #269 (17487+19): scx=Gurmukhi:Guru
10832 0x0951, 0x0952, 0x0964, 0x0965, 0x0A01, 0x0A03, 0x0A05, 0x0A0A,
10833 0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33,
10834 0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42,
10835 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, 0x0A51, 0x0A51, 0x0A59, 0x0A5C,
10836 0x0A5E, 0x0A5E, 0x0A66, 0x0A76, 0xA830, 0xA839,
10837 // #270 (17506+17): scx=Gujarati:Gujr
10838 0x0951, 0x0952, 0x0964, 0x0965, 0x0A81, 0x0A83, 0x0A85, 0x0A8D,
10839 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3,
10840 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5, 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD,
10841 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3, 0x0AE6, 0x0AF1, 0x0AF9, 0x0AFF,
10842 0xA830, 0xA839,
10843 // #271 (17523+18): scx=Oriya:Orya
10844 0x0951, 0x0952, 0x0964, 0x0965, 0x0B01, 0x0B03, 0x0B05, 0x0B0C,
10845 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
10846 0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D,
10847 0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B77,
10848 0x1CDA, 0x1CDA, 0x1CF2, 0x1CF2,
10849 // #272 (17541+25): scx=Tamil:Taml
10850 0x0951, 0x0952, 0x0964, 0x0965, 0x0B82, 0x0B83, 0x0B85, 0x0B8A,
10851 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C,
10852 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9,
10853 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0,
10854 0x0BD7, 0x0BD7, 0x0BE6, 0x0BFA, 0x1CDA, 0x1CDA, 0xA8F3, 0xA8F3,
10855 0x11301, 0x11301, 0x11303, 0x11303, 0x1133B, 0x1133C, 0x11FC0, 0x11FF1,
10856 0x11FFF, 0x11FFF,
10857 // #273 (17566+17): scx=Telugu:Telu
10858 0x0951, 0x0952, 0x0964, 0x0965, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10,
10859 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48,
10860 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D,
10861 0x0C60, 0x0C63, 0x0C66, 0x0C6F, 0x0C77, 0x0C7F, 0x1CDA, 0x1CDA,
10862 0x1CF2, 0x1CF2,
10863 // #274 (17583+21): scx=Kannada:Knda
10864 0x0951, 0x0952, 0x0964, 0x0965, 0x0C80, 0x0C8C, 0x0C8E, 0x0C90,
10865 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4,
10866 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE,
10867 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF3, 0x1CD0, 0x1CD0,
10868 0x1CD2, 0x1CD2, 0x1CDA, 0x1CDA, 0x1CF2, 0x1CF2, 0x1CF4, 0x1CF4,
10869 0xA830, 0xA835,
10870 // #275 (17604+12): scx=Malayalam:Mlym
10871 0x0951, 0x0952, 0x0964, 0x0965, 0x0D00, 0x0D0C, 0x0D0E, 0x0D10,
10872 0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4F, 0x0D54, 0x0D63,
10873 0x0D66, 0x0D7F, 0x1CDA, 0x1CDA, 0x1CF2, 0x1CF2, 0xA830, 0xA832,
10874 // #276 (17616+15): scx=Sinhala:Sinh
10875 0x0964, 0x0965, 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1,
10876 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA,
10877 0x0DCF, 0x0DD4, 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF,
10878 0x0DF2, 0x0DF4, 0x1CF2, 0x1CF2, 0x111E1, 0x111F4,
10879 // #277 (17631+4): scx=Myanmar:Mymr
10880 0x1000, 0x109F, 0xA92E, 0xA92E, 0xA9E0, 0xA9FE, 0xAA60, 0xAA7F,
10881 // #278 (17635+9): scx=Georgian:Geor
10882 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FF,
10883 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x2D00, 0x2D25, 0x2D27, 0x2D27,
10884 0x2D2D, 0x2D2D,
10885 // #279 (17644+21): scx=Hangul:Hang
10886 0x1100, 0x11FF, 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F,
10887 0x302E, 0x3030, 0x3037, 0x3037, 0x30FB, 0x30FB, 0x3131, 0x318E,
10888 0x3200, 0x321E, 0x3260, 0x327E, 0xA960, 0xA97C, 0xAC00, 0xD7A3,
10889 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xFE45, 0xFE46, 0xFF61, 0xFF65,
10890 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7,
10891 0xFFDA, 0xFFDC,
10892 // #280 (17665+5): scx=Mongolian:Mong
10893 0x1800, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA, 0x202F, 0x202F,
10894 0x11660, 0x1166C,
10895 // #281 (17670+17): scx=Hiragana:Hira
10896 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F, 0x3030, 0x3035,
10897 0x3037, 0x3037, 0x303C, 0x303D, 0x3041, 0x3096, 0x3099, 0x30A0,
10898 0x30FB, 0x30FC, 0xFE45, 0xFE46, 0xFF61, 0xFF65, 0xFF70, 0xFF70,
10899 0xFF9E, 0xFF9F, 0x1B001, 0x1B11F, 0x1B132, 0x1B132, 0x1B150, 0x1B152,
10900 0x1F200, 0x1F200,
10901 // #282 (17687+20): scx=Katakana:Kana
10902 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F, 0x3030, 0x3035,
10903 0x3037, 0x3037, 0x303C, 0x303D, 0x3099, 0x309C, 0x30A0, 0x30FF,
10904 0x31F0, 0x31FF, 0x32D0, 0x32FE, 0x3300, 0x3357, 0xFE45, 0xFE46,
10905 0xFF61, 0xFF9F, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE,
10906 0x1B000, 0x1B000, 0x1B120, 0x1B122, 0x1B155, 0x1B155, 0x1B164, 0x1B167,
10907 // #283 (17707+12): scx=Bopomofo:Bopo
10908 0x02EA, 0x02EB, 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F,
10909 0x302A, 0x302D, 0x3030, 0x3030, 0x3037, 0x3037, 0x30FB, 0x30FB,
10910 0x3105, 0x312F, 0x31A0, 0x31BF, 0xFE45, 0xFE46, 0xFF61, 0xFF65,
10911 // #284 (17719+39): scx=Han:Hani
10912 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x3001, 0x3003,
10913 0x3005, 0x3011, 0x3013, 0x301F, 0x3021, 0x302D, 0x3030, 0x3030,
10914 0x3037, 0x303F, 0x30FB, 0x30FB, 0x3190, 0x319F, 0x31C0, 0x31E3,
10915 0x3220, 0x3247, 0x3280, 0x32B0, 0x32C0, 0x32CB, 0x32FF, 0x32FF,
10916 0x3358, 0x3370, 0x337B, 0x337F, 0x33E0, 0x33FE, 0x3400, 0x4DBF,
10917 0x4E00, 0x9FFF, 0xA700, 0xA707, 0xF900, 0xFA6D, 0xFA70, 0xFAD9,
10918 0xFE45, 0xFE46, 0xFF61, 0xFF65, 0x16FE2, 0x16FE3, 0x16FF0, 0x16FF1,
10919 0x1D360, 0x1D371, 0x1F250, 0x1F251, 0x20000, 0x2A6DF, 0x2A700, 0x2B739,
10920 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D,
10921 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0x31350, 0x323AF,
10922 // #285 (17758+7): scx=Yi:Yiii
10923 0x3001, 0x3002, 0x3008, 0x3011, 0x3014, 0x301B, 0x30FB, 0x30FB,
10924 0xA000, 0xA48C, 0xA490, 0xA4C6, 0xFF61, 0xFF65,
10925 // #286 (17765+20): scx=Inherited:Zinh:Qaai
10926 0x0300, 0x0341, 0x0343, 0x0344, 0x0346, 0x0362, 0x0953, 0x0954,
10927 0x1AB0, 0x1ACE, 0x1DC2, 0x1DF7, 0x1DF9, 0x1DF9, 0x1DFB, 0x1DFF,
10928 0x200C, 0x200D, 0x20D0, 0x20EF, 0xFE00, 0xFE0F, 0xFE20, 0xFE2D,
10929 0x101FD, 0x101FD, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167, 0x1D169,
10930 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0xE0100, 0xE01EF,
10931 // #287 (17785+3): scx=Tagalog:Tglg
10932 0x1700, 0x1715, 0x171F, 0x171F, 0x1735, 0x1736,
10933 // #288 (17788+1): scx=Hanunoo:Hano
10934 0x1720, 0x1736,
10935 // #289 (17789+2): scx=Buhid:Buhd
10936 0x1735, 0x1736, 0x1740, 0x1753,
10937 // #290 (17791+4): scx=Tagbanwa:Tagb
10938 0x1735, 0x1736, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
10939 // #291 (17795+6): scx=Limbu:Limb
10940 0x0965, 0x0965, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B,
10941 0x1940, 0x1940, 0x1944, 0x194F,
10942 // #292 (17801+3): scx=Tai_Le:Tale
10943 0x1040, 0x1049, 0x1950, 0x196D, 0x1970, 0x1974,
10944 // #293 (17804+10): scx=Linear_B:Linb
10945 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D,
10946 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10100, 0x10102,
10947 0x10107, 0x10133, 0x10137, 0x1013F,
10948 // #294 (17814+9): scx=Cypriot:Cprt
10949 0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1013F, 0x10800, 0x10805,
10950 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C,
10951 0x1083F, 0x1083F,
10952 // #295 (17823+3): scx=Buginese:Bugi
10953 0x1A00, 0x1A1B, 0x1A1E, 0x1A1F, 0xA9CF, 0xA9CF,
10954 // #296 (17826+4): scx=Coptic:Copt:Qaac
10955 0x03E2, 0x03EF, 0x2C80, 0x2CF3, 0x2CF9, 0x2CFF, 0x102E0, 0x102FB,
10956 // #297 (17830+10): scx=Glagolitic:Glag
10957 0x0484, 0x0484, 0x0487, 0x0487, 0x2C00, 0x2C5F, 0x2E43, 0x2E43,
10958 0xA66F, 0xA66F, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021,
10959 0x1E023, 0x1E024, 0x1E026, 0x1E02A,
10960 // #298 (17840+3): scx=Syloti_Nagri:Sylo
10961 0x0964, 0x0965, 0x09E6, 0x09EF, 0xA800, 0xA82C,
10962 // #299 (17843+3): scx=Phags_Pa:Phag
10963 0x1802, 0x1803, 0x1805, 0x1805, 0xA840, 0xA877,
10964 // #300 (17846+6): scx=Nko:Nkoo
10965 0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x07C0, 0x07FA,
10966 0x07FD, 0x07FF, 0xFD3E, 0xFD3F,
10967 // #301 (17852+1): scx=Kayah_Li:Kali
10968 0xA900, 0xA92F,
10969 // #302 (17853+3): scx=Javanese:Java
10970 0xA980, 0xA9CD, 0xA9CF, 0xA9D9, 0xA9DE, 0xA9DF,
10971 // #303 (17856+4): scx=Kaithi:Kthi
10972 0x0966, 0x096F, 0xA830, 0xA839, 0x11080, 0x110C2, 0x110CD, 0x110CD,
10973 // #304 (17860+3): scx=Mandaic:Mand
10974 0x0640, 0x0640, 0x0840, 0x085B, 0x085E, 0x085E,
10975 // #305 (17863+4): scx=Chakma:Cakm
10976 0x09E6, 0x09EF, 0x1040, 0x1049, 0x11100, 0x11134, 0x11136, 0x11147,
10977 // #306 (17867+8): scx=Sharada:Shrd
10978 0x0951, 0x0951, 0x1CD7, 0x1CD7, 0x1CD9, 0x1CD9, 0x1CDC, 0x1CDD,
10979 0x1CE0, 0x1CE0, 0xA830, 0xA835, 0xA838, 0xA838, 0x11180, 0x111DF,
10980 // #307 (17875+4): scx=Takri:Takr
10981 0x0964, 0x0965, 0xA830, 0xA839, 0x11680, 0x116B9, 0x116C0, 0x116C9,
10982 // #308 (17879+5): scx=Duployan:Dupl
10983 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99,
10984 0x1BC9C, 0x1BCA3,
10985 // #309 (17884+25): scx=Grantha:Gran
10986 0x0951, 0x0952, 0x0964, 0x0965, 0x0BE6, 0x0BF3, 0x1CD0, 0x1CD0,
10987 0x1CD2, 0x1CD3, 0x1CF2, 0x1CF4, 0x1CF8, 0x1CF9, 0x20F0, 0x20F0,
10988 0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328,
10989 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133B, 0x11344,
10990 0x11347, 0x11348, 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357,
10991 0x1135D, 0x11363, 0x11366, 0x1136C, 0x11370, 0x11374, 0x11FD0, 0x11FD1,
10992 0x11FD3, 0x11FD3,
10993 // #310 (17909+4): scx=Khojki:Khoj
10994 0x0AE6, 0x0AEF, 0xA830, 0xA839, 0x11200, 0x11211, 0x11213, 0x11241,
10995 // #311 (17913+4): scx=Linear_A:Lina
10996 0x10107, 0x10133, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767,
10997 // #312 (17917+3): scx=Mahajani:Mahj
10998 0x0964, 0x096F, 0xA830, 0xA839, 0x11150, 0x11176,
10999 // #313 (17920+3): scx=Manichaean:Mani
11000 0x0640, 0x0640, 0x10AC0, 0x10AE6, 0x10AEB, 0x10AF6,
11001 // #314 (17923+3): scx=Modi
11002 0xA830, 0xA839, 0x11600, 0x11644, 0x11650, 0x11659,
11003 // #315 (17926+2): scx=Old_Permic:Perm
11004 0x0483, 0x0483, 0x10350, 0x1037A,
11005 // #316 (17928+4): scx=Psalter_Pahlavi:Phlp
11006 0x0640, 0x0640, 0x10B80, 0x10B91, 0x10B99, 0x10B9C, 0x10BA9, 0x10BAF,
11007 // #317 (17932+4): scx=Khudawadi:Sind
11008 0x0964, 0x0965, 0xA830, 0xA839, 0x112B0, 0x112EA, 0x112F0, 0x112F9,
11009 // #318 (17936+6): scx=Tirhuta:Tirh
11010 0x0951, 0x0952, 0x0964, 0x0965, 0x1CF2, 0x1CF2, 0xA830, 0xA839,
11011 0x11480, 0x114C7, 0x114D0, 0x114D9,
11012 // #319 (17942+6): scx=Multani:Mult
11013 0x0A66, 0x0A6F, 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D,
11014 0x1128F, 0x1129D, 0x1129F, 0x112A9,
11015 // #320 (17948+5): scx=Adlam:Adlm
11016 0x061F, 0x061F, 0x0640, 0x0640, 0x1E900, 0x1E94B, 0x1E950, 0x1E959,
11017 0x1E95E, 0x1E95F,
11018 // #321 (17953+8): scx=Masaram_Gondi:Gonm
11019 0x0964, 0x0965, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36,
11020 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59,
11021 // #322 (17961+3): scx=Dogra:Dogr
11022 0x0964, 0x096F, 0xA830, 0xA839, 0x11800, 0x1183B,
11023 // #323 (17964+7): scx=Gunjala_Gondi:Gong
11024 0x0964, 0x0965, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E,
11025 0x11D90, 0x11D91, 0x11D93, 0x11D98, 0x11DA0, 0x11DA9,
11026 // #324 (17971+7): scx=Hanifi_Rohingya:Rohg
11027 0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x0640, 0x0640,
11028 0x06D4, 0x06D4, 0x10D00, 0x10D27, 0x10D30, 0x10D39,
11029 // #325 (17978+2): scx=Sogdian:Sogd
11030 0x0640, 0x0640, 0x10F30, 0x10F59,
11031 // #326 (17980+9): scx=Nandinagari:Nand
11032 0x0964, 0x0965, 0x0CE6, 0x0CEF, 0x1CE9, 0x1CE9, 0x1CF2, 0x1CF2,
11033 0x1CFA, 0x1CFA, 0xA830, 0xA835, 0x119A0, 0x119A7, 0x119AA, 0x119D7,
11034 0x119DA, 0x119E4,
11035 // #327 (17989+7): scx=Yezidi:Yezi
11036 0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x0660, 0x0669,
11037 0x10E80, 0x10EA9, 0x10EAB, 0x10EAD, 0x10EB0, 0x10EB1,
11038 // #328 (17996+2): scx=Cypro_Minoan:Cpmn
11039 0x10100, 0x10101, 0x12F90, 0x12FF2,
11040 // #329 (17998+3): scx=Old_Uyghur:Ougr
11041 0x0640, 0x0640, 0x10AF2, 0x10AF2, 0x10F70, 0x10F89
11042 #if !defined(SRELL_NO_UNICODE_POS)
11043 ,
11044 // #330 (18001+13532/2): bp=RGI_Emoji
11045 // 1338/2 + 48/2 + 1966/2 + 774/2 + 24/2 + 9382/2
11046 // #331 (18001+1338/2): bp=Basic_Emoji
11047 1, 0x231A, 0x231B,
11048 1, 0x23E9, 0x23EC,
11049 2, 0x23F0,
11050 2, 0x23F3,
11051 1, 0x25FD, 0x25FE,
11052 1, 0x2614, 0x2615,
11053 1, 0x2648, 0x2653,
11054 2, 0x267F,
11055 2, 0x2693,
11056 2, 0x26A1,
11057 1, 0x26AA, 0x26AB,
11058 1, 0x26BD, 0x26BE,
11059 1, 0x26C4, 0x26C5,
11060 2, 0x26CE,
11061 2, 0x26D4,
11062 2, 0x26EA,
11063 1, 0x26F2, 0x26F3,
11064 2, 0x26F5,
11065 2, 0x26FA,
11066 2, 0x26FD,
11067 2, 0x2705,
11068 1, 0x270A, 0x270B,
11069 2, 0x2728,
11070 2, 0x274C,
11071 2, 0x274E,
11072 1, 0x2753, 0x2755,
11073 2, 0x2757,
11074 1, 0x2795, 0x2797,
11075 2, 0x27B0,
11076 2, 0x27BF,
11077 1, 0x2B1B, 0x2B1C,
11078 2, 0x2B50,
11079 2, 0x2B55,
11080 2, 0x1F004,
11081 2, 0x1F0CF,
11082 2, 0x1F18E,
11083 1, 0x1F191, 0x1F19A,
11084 2, 0x1F201,
11085 2, 0x1F21A,
11086 2, 0x1F22F,
11087 1, 0x1F232, 0x1F236,
11088 1, 0x1F238, 0x1F23A,
11089 1, 0x1F250, 0x1F251,
11090 1, 0x1F300, 0x1F30C,
11091 1, 0x1F30D, 0x1F30E,
11092 2, 0x1F30F,
11093 2, 0x1F310,
11094 2, 0x1F311,
11095 2, 0x1F312,
11096 1, 0x1F313, 0x1F315,
11097 1, 0x1F316, 0x1F318,
11098 2, 0x1F319,
11099 2, 0x1F31A,
11100 2, 0x1F31B,
11101 2, 0x1F31C,
11102 1, 0x1F31D, 0x1F31E,
11103 1, 0x1F31F, 0x1F320,
11104 1, 0x1F32D, 0x1F32F,
11105 1, 0x1F330, 0x1F331,
11106 1, 0x1F332, 0x1F333,
11107 1, 0x1F334, 0x1F335,
11108 1, 0x1F337, 0x1F34A,
11109 2, 0x1F34B,
11110 1, 0x1F34C, 0x1F34F,
11111 2, 0x1F350,
11112 1, 0x1F351, 0x1F37B,
11113 2, 0x1F37C,
11114 1, 0x1F37E, 0x1F37F,
11115 1, 0x1F380, 0x1F393,
11116 1, 0x1F3A0, 0x1F3C4,
11117 2, 0x1F3C5,
11118 2, 0x1F3C6,
11119 2, 0x1F3C7,
11120 2, 0x1F3C8,
11121 2, 0x1F3C9,
11122 2, 0x1F3CA,
11123 1, 0x1F3CF, 0x1F3D3,
11124 1, 0x1F3E0, 0x1F3E3,
11125 2, 0x1F3E4,
11126 1, 0x1F3E5, 0x1F3F0,
11127 2, 0x1F3F4,
11128 1, 0x1F3F8, 0x1F407,
11129 2, 0x1F408,
11130 1, 0x1F409, 0x1F40B,
11131 1, 0x1F40C, 0x1F40E,
11132 1, 0x1F40F, 0x1F410,
11133 1, 0x1F411, 0x1F412,
11134 2, 0x1F413,
11135 2, 0x1F414,
11136 2, 0x1F415,
11137 2, 0x1F416,
11138 1, 0x1F417, 0x1F429,
11139 2, 0x1F42A,
11140 1, 0x1F42B, 0x1F43E,
11141 2, 0x1F440,
11142 1, 0x1F442, 0x1F464,
11143 2, 0x1F465,
11144 1, 0x1F466, 0x1F46B,
11145 1, 0x1F46C, 0x1F46D,
11146 1, 0x1F46E, 0x1F4AC,
11147 2, 0x1F4AD,
11148 1, 0x1F4AE, 0x1F4B5,
11149 1, 0x1F4B6, 0x1F4B7,
11150 1, 0x1F4B8, 0x1F4EB,
11151 1, 0x1F4EC, 0x1F4ED,
11152 2, 0x1F4EE,
11153 2, 0x1F4EF,
11154 1, 0x1F4F0, 0x1F4F4,
11155 2, 0x1F4F5,
11156 1, 0x1F4F6, 0x1F4F7,
11157 2, 0x1F4F8,
11158 1, 0x1F4F9, 0x1F4FC,
11159 1, 0x1F4FF, 0x1F502,
11160 2, 0x1F503,
11161 1, 0x1F504, 0x1F507,
11162 2, 0x1F508,
11163 2, 0x1F509,
11164 1, 0x1F50A, 0x1F514,
11165 2, 0x1F515,
11166 1, 0x1F516, 0x1F52B,
11167 1, 0x1F52C, 0x1F52D,
11168 1, 0x1F52E, 0x1F53D,
11169 1, 0x1F54B, 0x1F54E,
11170 1, 0x1F550, 0x1F55B,
11171 1, 0x1F55C, 0x1F567,
11172 2, 0x1F57A,
11173 1, 0x1F595, 0x1F596,
11174 2, 0x1F5A4,
11175 1, 0x1F5FB, 0x1F5FF,
11176 2, 0x1F600,
11177 1, 0x1F601, 0x1F606,
11178 1, 0x1F607, 0x1F608,
11179 1, 0x1F609, 0x1F60D,
11180 2, 0x1F60E,
11181 2, 0x1F60F,
11182 2, 0x1F610,
11183 2, 0x1F611,
11184 1, 0x1F612, 0x1F614,
11185 2, 0x1F615,
11186 2, 0x1F616,
11187 2, 0x1F617,
11188 2, 0x1F618,
11189 2, 0x1F619,
11190 2, 0x1F61A,
11191 2, 0x1F61B,
11192 1, 0x1F61C, 0x1F61E,
11193 2, 0x1F61F,
11194 1, 0x1F620, 0x1F625,
11195 1, 0x1F626, 0x1F627,
11196 1, 0x1F628, 0x1F62B,
11197 2, 0x1F62C,
11198 2, 0x1F62D,
11199 1, 0x1F62E, 0x1F62F,
11200 1, 0x1F630, 0x1F633,
11201 2, 0x1F634,
11202 2, 0x1F635,
11203 2, 0x1F636,
11204 1, 0x1F637, 0x1F640,
11205 1, 0x1F641, 0x1F644,
11206 1, 0x1F645, 0x1F64F,
11207 2, 0x1F680,
11208 1, 0x1F681, 0x1F682,
11209 1, 0x1F683, 0x1F685,
11210 2, 0x1F686,
11211 2, 0x1F687,
11212 2, 0x1F688,
11213 2, 0x1F689,
11214 1, 0x1F68A, 0x1F68B,
11215 2, 0x1F68C,
11216 2, 0x1F68D,
11217 2, 0x1F68E,
11218 2, 0x1F68F,
11219 2, 0x1F690,
11220 1, 0x1F691, 0x1F693,
11221 2, 0x1F694,
11222 2, 0x1F695,
11223 2, 0x1F696,
11224 2, 0x1F697,
11225 2, 0x1F698,
11226 1, 0x1F699, 0x1F69A,
11227 1, 0x1F69B, 0x1F6A1,
11228 2, 0x1F6A2,
11229 2, 0x1F6A3,
11230 1, 0x1F6A4, 0x1F6A5,
11231 2, 0x1F6A6,
11232 1, 0x1F6A7, 0x1F6AD,
11233 1, 0x1F6AE, 0x1F6B1,
11234 2, 0x1F6B2,
11235 1, 0x1F6B3, 0x1F6B5,
11236 2, 0x1F6B6,
11237 1, 0x1F6B7, 0x1F6B8,
11238 1, 0x1F6B9, 0x1F6BE,
11239 2, 0x1F6BF,
11240 2, 0x1F6C0,
11241 1, 0x1F6C1, 0x1F6C5,
11242 2, 0x1F6CC,
11243 2, 0x1F6D0,
11244 1, 0x1F6D1, 0x1F6D2,
11245 2, 0x1F6D5,
11246 1, 0x1F6D6, 0x1F6D7,
11247 2, 0x1F6DC,
11248 1, 0x1F6DD, 0x1F6DF,
11249 1, 0x1F6EB, 0x1F6EC,
11250 1, 0x1F6F4, 0x1F6F6,
11251 1, 0x1F6F7, 0x1F6F8,
11252 2, 0x1F6F9,
11253 2, 0x1F6FA,
11254 1, 0x1F6FB, 0x1F6FC,
11255 1, 0x1F7E0, 0x1F7EB,
11256 2, 0x1F7F0,
11257 2, 0x1F90C,
11258 1, 0x1F90D, 0x1F90F,
11259 1, 0x1F910, 0x1F918,
11260 1, 0x1F919, 0x1F91E,
11261 2, 0x1F91F,
11262 1, 0x1F920, 0x1F927,
11263 1, 0x1F928, 0x1F92F,
11264 2, 0x1F930,
11265 1, 0x1F931, 0x1F932,
11266 1, 0x1F933, 0x1F93A,
11267 1, 0x1F93C, 0x1F93E,
11268 2, 0x1F93F,
11269 1, 0x1F940, 0x1F945,
11270 1, 0x1F947, 0x1F94B,
11271 2, 0x1F94C,
11272 1, 0x1F94D, 0x1F94F,
11273 1, 0x1F950, 0x1F95E,
11274 1, 0x1F95F, 0x1F96B,
11275 1, 0x1F96C, 0x1F970,
11276 2, 0x1F971,
11277 2, 0x1F972,
11278 1, 0x1F973, 0x1F976,
11279 1, 0x1F977, 0x1F978,
11280 2, 0x1F979,
11281 2, 0x1F97A,
11282 2, 0x1F97B,
11283 1, 0x1F97C, 0x1F97F,
11284 1, 0x1F980, 0x1F984,
11285 1, 0x1F985, 0x1F991,
11286 1, 0x1F992, 0x1F997,
11287 1, 0x1F998, 0x1F9A2,
11288 1, 0x1F9A3, 0x1F9A4,
11289 1, 0x1F9A5, 0x1F9AA,
11290 1, 0x1F9AB, 0x1F9AD,
11291 1, 0x1F9AE, 0x1F9AF,
11292 1, 0x1F9B0, 0x1F9B9,
11293 1, 0x1F9BA, 0x1F9BF,
11294 2, 0x1F9C0,
11295 1, 0x1F9C1, 0x1F9C2,
11296 1, 0x1F9C3, 0x1F9CA,
11297 2, 0x1F9CB,
11298 2, 0x1F9CC,
11299 1, 0x1F9CD, 0x1F9CF,
11300 1, 0x1F9D0, 0x1F9E6,
11301 1, 0x1F9E7, 0x1F9FF,
11302 1, 0x1FA70, 0x1FA73,
11303 2, 0x1FA74,
11304 1, 0x1FA75, 0x1FA77,
11305 1, 0x1FA78, 0x1FA7A,
11306 1, 0x1FA7B, 0x1FA7C,
11307 1, 0x1FA80, 0x1FA82,
11308 1, 0x1FA83, 0x1FA86,
11309 1, 0x1FA87, 0x1FA88,
11310 1, 0x1FA90, 0x1FA95,
11311 1, 0x1FA96, 0x1FAA8,
11312 1, 0x1FAA9, 0x1FAAC,
11313 1, 0x1FAAD, 0x1FAAF,
11314 1, 0x1FAB0, 0x1FAB6,
11315 1, 0x1FAB7, 0x1FABA,
11316 1, 0x1FABB, 0x1FABD,
11317 2, 0x1FABF,
11318 1, 0x1FAC0, 0x1FAC2,
11319 1, 0x1FAC3, 0x1FAC5,
11320 1, 0x1FACE, 0x1FACF,
11321 1, 0x1FAD0, 0x1FAD6,
11322 1, 0x1FAD7, 0x1FAD9,
11323 1, 0x1FADA, 0x1FADB,
11324 1, 0x1FAE0, 0x1FAE7,
11325 2, 0x1FAE8,
11326 1, 0x1FAF0, 0x1FAF6,
11327 1, 0x1FAF7, 0x1FAF8,
11328 3, 0x00A9, 0xFE0F,
11329 3, 0x00AE, 0xFE0F,
11330 3, 0x203C, 0xFE0F,
11331 3, 0x2049, 0xFE0F,
11332 3, 0x2122, 0xFE0F,
11333 3, 0x2139, 0xFE0F,
11334 3, 0x2194, 0xFE0F,
11335 3, 0x2195, 0xFE0F,
11336 3, 0x2196, 0xFE0F,
11337 3, 0x2197, 0xFE0F,
11338 3, 0x2198, 0xFE0F,
11339 3, 0x2199, 0xFE0F,
11340 3, 0x21A9, 0xFE0F,
11341 3, 0x21AA, 0xFE0F,
11342 3, 0x2328, 0xFE0F,
11343 3, 0x23CF, 0xFE0F,
11344 3, 0x23ED, 0xFE0F,
11345 3, 0x23EE, 0xFE0F,
11346 3, 0x23EF, 0xFE0F,
11347 3, 0x23F1, 0xFE0F,
11348 3, 0x23F2, 0xFE0F,
11349 3, 0x23F8, 0xFE0F,
11350 3, 0x23F9, 0xFE0F,
11351 3, 0x23FA, 0xFE0F,
11352 3, 0x24C2, 0xFE0F,
11353 3, 0x25AA, 0xFE0F,
11354 3, 0x25AB, 0xFE0F,
11355 3, 0x25B6, 0xFE0F,
11356 3, 0x25C0, 0xFE0F,
11357 3, 0x25FB, 0xFE0F,
11358 3, 0x25FC, 0xFE0F,
11359 3, 0x2600, 0xFE0F,
11360 3, 0x2601, 0xFE0F,
11361 3, 0x2602, 0xFE0F,
11362 3, 0x2603, 0xFE0F,
11363 3, 0x2604, 0xFE0F,
11364 3, 0x260E, 0xFE0F,
11365 3, 0x2611, 0xFE0F,
11366 3, 0x2618, 0xFE0F,
11367 3, 0x261D, 0xFE0F,
11368 3, 0x2620, 0xFE0F,
11369 3, 0x2622, 0xFE0F,
11370 3, 0x2623, 0xFE0F,
11371 3, 0x2626, 0xFE0F,
11372 3, 0x262A, 0xFE0F,
11373 3, 0x262E, 0xFE0F,
11374 3, 0x262F, 0xFE0F,
11375 3, 0x2638, 0xFE0F,
11376 3, 0x2639, 0xFE0F,
11377 3, 0x263A, 0xFE0F,
11378 3, 0x2640, 0xFE0F,
11379 3, 0x2642, 0xFE0F,
11380 3, 0x265F, 0xFE0F,
11381 3, 0x2660, 0xFE0F,
11382 3, 0x2663, 0xFE0F,
11383 3, 0x2665, 0xFE0F,
11384 3, 0x2666, 0xFE0F,
11385 3, 0x2668, 0xFE0F,
11386 3, 0x267B, 0xFE0F,
11387 3, 0x267E, 0xFE0F,
11388 3, 0x2692, 0xFE0F,
11389 3, 0x2694, 0xFE0F,
11390 3, 0x2695, 0xFE0F,
11391 3, 0x2696, 0xFE0F,
11392 3, 0x2697, 0xFE0F,
11393 3, 0x2699, 0xFE0F,
11394 3, 0x269B, 0xFE0F,
11395 3, 0x269C, 0xFE0F,
11396 3, 0x26A0, 0xFE0F,
11397 3, 0x26A7, 0xFE0F,
11398 3, 0x26B0, 0xFE0F,
11399 3, 0x26B1, 0xFE0F,
11400 3, 0x26C8, 0xFE0F,
11401 3, 0x26CF, 0xFE0F,
11402 3, 0x26D1, 0xFE0F,
11403 3, 0x26D3, 0xFE0F,
11404 3, 0x26E9, 0xFE0F,
11405 3, 0x26F0, 0xFE0F,
11406 3, 0x26F1, 0xFE0F,
11407 3, 0x26F4, 0xFE0F,
11408 3, 0x26F7, 0xFE0F,
11409 3, 0x26F8, 0xFE0F,
11410 3, 0x26F9, 0xFE0F,
11411 3, 0x2702, 0xFE0F,
11412 3, 0x2708, 0xFE0F,
11413 3, 0x2709, 0xFE0F,
11414 3, 0x270C, 0xFE0F,
11415 3, 0x270D, 0xFE0F,
11416 3, 0x270F, 0xFE0F,
11417 3, 0x2712, 0xFE0F,
11418 3, 0x2714, 0xFE0F,
11419 3, 0x2716, 0xFE0F,
11420 3, 0x271D, 0xFE0F,
11421 3, 0x2721, 0xFE0F,
11422 3, 0x2733, 0xFE0F,
11423 3, 0x2734, 0xFE0F,
11424 3, 0x2744, 0xFE0F,
11425 3, 0x2747, 0xFE0F,
11426 3, 0x2763, 0xFE0F,
11427 3, 0x2764, 0xFE0F,
11428 3, 0x27A1, 0xFE0F,
11429 3, 0x2934, 0xFE0F,
11430 3, 0x2935, 0xFE0F,
11431 3, 0x2B05, 0xFE0F,
11432 3, 0x2B06, 0xFE0F,
11433 3, 0x2B07, 0xFE0F,
11434 3, 0x3030, 0xFE0F,
11435 3, 0x303D, 0xFE0F,
11436 3, 0x3297, 0xFE0F,
11437 3, 0x3299, 0xFE0F,
11438 3, 0x1F170, 0xFE0F,
11439 3, 0x1F171, 0xFE0F,
11440 3, 0x1F17E, 0xFE0F,
11441 3, 0x1F17F, 0xFE0F,
11442 3, 0x1F202, 0xFE0F,
11443 3, 0x1F237, 0xFE0F,
11444 3, 0x1F321, 0xFE0F,
11445 3, 0x1F324, 0xFE0F,
11446 3, 0x1F325, 0xFE0F,
11447 3, 0x1F326, 0xFE0F,
11448 3, 0x1F327, 0xFE0F,
11449 3, 0x1F328, 0xFE0F,
11450 3, 0x1F329, 0xFE0F,
11451 3, 0x1F32A, 0xFE0F,
11452 3, 0x1F32B, 0xFE0F,
11453 3, 0x1F32C, 0xFE0F,
11454 3, 0x1F336, 0xFE0F,
11455 3, 0x1F37D, 0xFE0F,
11456 3, 0x1F396, 0xFE0F,
11457 3, 0x1F397, 0xFE0F,
11458 3, 0x1F399, 0xFE0F,
11459 3, 0x1F39A, 0xFE0F,
11460 3, 0x1F39B, 0xFE0F,
11461 3, 0x1F39E, 0xFE0F,
11462 3, 0x1F39F, 0xFE0F,
11463 3, 0x1F3CB, 0xFE0F,
11464 3, 0x1F3CC, 0xFE0F,
11465 3, 0x1F3CD, 0xFE0F,
11466 3, 0x1F3CE, 0xFE0F,
11467 3, 0x1F3D4, 0xFE0F,
11468 3, 0x1F3D5, 0xFE0F,
11469 3, 0x1F3D6, 0xFE0F,
11470 3, 0x1F3D7, 0xFE0F,
11471 3, 0x1F3D8, 0xFE0F,
11472 3, 0x1F3D9, 0xFE0F,
11473 3, 0x1F3DA, 0xFE0F,
11474 3, 0x1F3DB, 0xFE0F,
11475 3, 0x1F3DC, 0xFE0F,
11476 3, 0x1F3DD, 0xFE0F,
11477 3, 0x1F3DE, 0xFE0F,
11478 3, 0x1F3DF, 0xFE0F,
11479 3, 0x1F3F3, 0xFE0F,
11480 3, 0x1F3F5, 0xFE0F,
11481 3, 0x1F3F7, 0xFE0F,
11482 3, 0x1F43F, 0xFE0F,
11483 3, 0x1F441, 0xFE0F,
11484 3, 0x1F4FD, 0xFE0F,
11485 3, 0x1F549, 0xFE0F,
11486 3, 0x1F54A, 0xFE0F,
11487 3, 0x1F56F, 0xFE0F,
11488 3, 0x1F570, 0xFE0F,
11489 3, 0x1F573, 0xFE0F,
11490 3, 0x1F574, 0xFE0F,
11491 3, 0x1F575, 0xFE0F,
11492 3, 0x1F576, 0xFE0F,
11493 3, 0x1F577, 0xFE0F,
11494 3, 0x1F578, 0xFE0F,
11495 3, 0x1F579, 0xFE0F,
11496 3, 0x1F587, 0xFE0F,
11497 3, 0x1F58A, 0xFE0F,
11498 3, 0x1F58B, 0xFE0F,
11499 3, 0x1F58C, 0xFE0F,
11500 3, 0x1F58D, 0xFE0F,
11501 3, 0x1F590, 0xFE0F,
11502 3, 0x1F5A5, 0xFE0F,
11503 3, 0x1F5A8, 0xFE0F,
11504 3, 0x1F5B1, 0xFE0F,
11505 3, 0x1F5B2, 0xFE0F,
11506 3, 0x1F5BC, 0xFE0F,
11507 3, 0x1F5C2, 0xFE0F,
11508 3, 0x1F5C3, 0xFE0F,
11509 3, 0x1F5C4, 0xFE0F,
11510 3, 0x1F5D1, 0xFE0F,
11511 3, 0x1F5D2, 0xFE0F,
11512 3, 0x1F5D3, 0xFE0F,
11513 3, 0x1F5DC, 0xFE0F,
11514 3, 0x1F5DD, 0xFE0F,
11515 3, 0x1F5DE, 0xFE0F,
11516 3, 0x1F5E1, 0xFE0F,
11517 3, 0x1F5E3, 0xFE0F,
11518 3, 0x1F5E8, 0xFE0F,
11519 3, 0x1F5EF, 0xFE0F,
11520 3, 0x1F5F3, 0xFE0F,
11521 3, 0x1F5FA, 0xFE0F,
11522 3, 0x1F6CB, 0xFE0F,
11523 3, 0x1F6CD, 0xFE0F,
11524 3, 0x1F6CE, 0xFE0F,
11525 3, 0x1F6CF, 0xFE0F,
11526 3, 0x1F6E0, 0xFE0F,
11527 3, 0x1F6E1, 0xFE0F,
11528 3, 0x1F6E2, 0xFE0F,
11529 3, 0x1F6E3, 0xFE0F,
11530 3, 0x1F6E4, 0xFE0F,
11531 3, 0x1F6E5, 0xFE0F,
11532 3, 0x1F6E9, 0xFE0F,
11533 3, 0x1F6F0, 0xFE0F,
11534 3, 0x1F6F3, 0xFE0F,
11535 0, // Padding.
11536 // #332 (18670+48/2): bp=Emoji_Keycap_Sequence
11537 4, 0x0023, 0xFE0F, 0x20E3,
11538 4, 0x002A, 0xFE0F, 0x20E3,
11539 4, 0x0030, 0xFE0F, 0x20E3,
11540 4, 0x0031, 0xFE0F, 0x20E3,
11541 4, 0x0032, 0xFE0F, 0x20E3,
11542 4, 0x0033, 0xFE0F, 0x20E3,
11543 4, 0x0034, 0xFE0F, 0x20E3,
11544 4, 0x0035, 0xFE0F, 0x20E3,
11545 4, 0x0036, 0xFE0F, 0x20E3,
11546 4, 0x0037, 0xFE0F, 0x20E3,
11547 4, 0x0038, 0xFE0F, 0x20E3,
11548 4, 0x0039, 0xFE0F, 0x20E3,
11549 // #333 (18694+1966/2): bp=RGI_Emoji_Modifier_Sequence
11550 3, 0x261D, 0x1F3FB,
11551 3, 0x261D, 0x1F3FC,
11552 3, 0x261D, 0x1F3FD,
11553 3, 0x261D, 0x1F3FE,
11554 3, 0x261D, 0x1F3FF,
11555 3, 0x26F9, 0x1F3FB,
11556 3, 0x26F9, 0x1F3FC,
11557 3, 0x26F9, 0x1F3FD,
11558 3, 0x26F9, 0x1F3FE,
11559 3, 0x26F9, 0x1F3FF,
11560 3, 0x270A, 0x1F3FB,
11561 3, 0x270A, 0x1F3FC,
11562 3, 0x270A, 0x1F3FD,
11563 3, 0x270A, 0x1F3FE,
11564 3, 0x270A, 0x1F3FF,
11565 3, 0x270B, 0x1F3FB,
11566 3, 0x270B, 0x1F3FC,
11567 3, 0x270B, 0x1F3FD,
11568 3, 0x270B, 0x1F3FE,
11569 3, 0x270B, 0x1F3FF,
11570 3, 0x270C, 0x1F3FB,
11571 3, 0x270C, 0x1F3FC,
11572 3, 0x270C, 0x1F3FD,
11573 3, 0x270C, 0x1F3FE,
11574 3, 0x270C, 0x1F3FF,
11575 3, 0x270D, 0x1F3FB,
11576 3, 0x270D, 0x1F3FC,
11577 3, 0x270D, 0x1F3FD,
11578 3, 0x270D, 0x1F3FE,
11579 3, 0x270D, 0x1F3FF,
11580 3, 0x1F385, 0x1F3FB,
11581 3, 0x1F385, 0x1F3FC,
11582 3, 0x1F385, 0x1F3FD,
11583 3, 0x1F385, 0x1F3FE,
11584 3, 0x1F385, 0x1F3FF,
11585 3, 0x1F3C2, 0x1F3FB,
11586 3, 0x1F3C2, 0x1F3FC,
11587 3, 0x1F3C2, 0x1F3FD,
11588 3, 0x1F3C2, 0x1F3FE,
11589 3, 0x1F3C2, 0x1F3FF,
11590 3, 0x1F3C3, 0x1F3FB,
11591 3, 0x1F3C3, 0x1F3FC,
11592 3, 0x1F3C3, 0x1F3FD,
11593 3, 0x1F3C3, 0x1F3FE,
11594 3, 0x1F3C3, 0x1F3FF,
11595 3, 0x1F3C4, 0x1F3FB,
11596 3, 0x1F3C4, 0x1F3FC,
11597 3, 0x1F3C4, 0x1F3FD,
11598 3, 0x1F3C4, 0x1F3FE,
11599 3, 0x1F3C4, 0x1F3FF,
11600 3, 0x1F3C7, 0x1F3FB,
11601 3, 0x1F3C7, 0x1F3FC,
11602 3, 0x1F3C7, 0x1F3FD,
11603 3, 0x1F3C7, 0x1F3FE,
11604 3, 0x1F3C7, 0x1F3FF,
11605 3, 0x1F3CA, 0x1F3FB,
11606 3, 0x1F3CA, 0x1F3FC,
11607 3, 0x1F3CA, 0x1F3FD,
11608 3, 0x1F3CA, 0x1F3FE,
11609 3, 0x1F3CA, 0x1F3FF,
11610 3, 0x1F3CB, 0x1F3FB,
11611 3, 0x1F3CB, 0x1F3FC,
11612 3, 0x1F3CB, 0x1F3FD,
11613 3, 0x1F3CB, 0x1F3FE,
11614 3, 0x1F3CB, 0x1F3FF,
11615 3, 0x1F3CC, 0x1F3FB,
11616 3, 0x1F3CC, 0x1F3FC,
11617 3, 0x1F3CC, 0x1F3FD,
11618 3, 0x1F3CC, 0x1F3FE,
11619 3, 0x1F3CC, 0x1F3FF,
11620 3, 0x1F442, 0x1F3FB,
11621 3, 0x1F442, 0x1F3FC,
11622 3, 0x1F442, 0x1F3FD,
11623 3, 0x1F442, 0x1F3FE,
11624 3, 0x1F442, 0x1F3FF,
11625 3, 0x1F443, 0x1F3FB,
11626 3, 0x1F443, 0x1F3FC,
11627 3, 0x1F443, 0x1F3FD,
11628 3, 0x1F443, 0x1F3FE,
11629 3, 0x1F443, 0x1F3FF,
11630 3, 0x1F446, 0x1F3FB,
11631 3, 0x1F446, 0x1F3FC,
11632 3, 0x1F446, 0x1F3FD,
11633 3, 0x1F446, 0x1F3FE,
11634 3, 0x1F446, 0x1F3FF,
11635 3, 0x1F447, 0x1F3FB,
11636 3, 0x1F447, 0x1F3FC,
11637 3, 0x1F447, 0x1F3FD,
11638 3, 0x1F447, 0x1F3FE,
11639 3, 0x1F447, 0x1F3FF,
11640 3, 0x1F448, 0x1F3FB,
11641 3, 0x1F448, 0x1F3FC,
11642 3, 0x1F448, 0x1F3FD,
11643 3, 0x1F448, 0x1F3FE,
11644 3, 0x1F448, 0x1F3FF,
11645 3, 0x1F449, 0x1F3FB,
11646 3, 0x1F449, 0x1F3FC,
11647 3, 0x1F449, 0x1F3FD,
11648 3, 0x1F449, 0x1F3FE,
11649 3, 0x1F449, 0x1F3FF,
11650 3, 0x1F44A, 0x1F3FB,
11651 3, 0x1F44A, 0x1F3FC,
11652 3, 0x1F44A, 0x1F3FD,
11653 3, 0x1F44A, 0x1F3FE,
11654 3, 0x1F44A, 0x1F3FF,
11655 3, 0x1F44B, 0x1F3FB,
11656 3, 0x1F44B, 0x1F3FC,
11657 3, 0x1F44B, 0x1F3FD,
11658 3, 0x1F44B, 0x1F3FE,
11659 3, 0x1F44B, 0x1F3FF,
11660 3, 0x1F44C, 0x1F3FB,
11661 3, 0x1F44C, 0x1F3FC,
11662 3, 0x1F44C, 0x1F3FD,
11663 3, 0x1F44C, 0x1F3FE,
11664 3, 0x1F44C, 0x1F3FF,
11665 3, 0x1F44D, 0x1F3FB,
11666 3, 0x1F44D, 0x1F3FC,
11667 3, 0x1F44D, 0x1F3FD,
11668 3, 0x1F44D, 0x1F3FE,
11669 3, 0x1F44D, 0x1F3FF,
11670 3, 0x1F44E, 0x1F3FB,
11671 3, 0x1F44E, 0x1F3FC,
11672 3, 0x1F44E, 0x1F3FD,
11673 3, 0x1F44E, 0x1F3FE,
11674 3, 0x1F44E, 0x1F3FF,
11675 3, 0x1F44F, 0x1F3FB,
11676 3, 0x1F44F, 0x1F3FC,
11677 3, 0x1F44F, 0x1F3FD,
11678 3, 0x1F44F, 0x1F3FE,
11679 3, 0x1F44F, 0x1F3FF,
11680 3, 0x1F450, 0x1F3FB,
11681 3, 0x1F450, 0x1F3FC,
11682 3, 0x1F450, 0x1F3FD,
11683 3, 0x1F450, 0x1F3FE,
11684 3, 0x1F450, 0x1F3FF,
11685 3, 0x1F466, 0x1F3FB,
11686 3, 0x1F466, 0x1F3FC,
11687 3, 0x1F466, 0x1F3FD,
11688 3, 0x1F466, 0x1F3FE,
11689 3, 0x1F466, 0x1F3FF,
11690 3, 0x1F467, 0x1F3FB,
11691 3, 0x1F467, 0x1F3FC,
11692 3, 0x1F467, 0x1F3FD,
11693 3, 0x1F467, 0x1F3FE,
11694 3, 0x1F467, 0x1F3FF,
11695 3, 0x1F468, 0x1F3FB,
11696 3, 0x1F468, 0x1F3FC,
11697 3, 0x1F468, 0x1F3FD,
11698 3, 0x1F468, 0x1F3FE,
11699 3, 0x1F468, 0x1F3FF,
11700 3, 0x1F469, 0x1F3FB,
11701 3, 0x1F469, 0x1F3FC,
11702 3, 0x1F469, 0x1F3FD,
11703 3, 0x1F469, 0x1F3FE,
11704 3, 0x1F469, 0x1F3FF,
11705 3, 0x1F46B, 0x1F3FB,
11706 3, 0x1F46B, 0x1F3FC,
11707 3, 0x1F46B, 0x1F3FD,
11708 3, 0x1F46B, 0x1F3FE,
11709 3, 0x1F46B, 0x1F3FF,
11710 3, 0x1F46C, 0x1F3FB,
11711 3, 0x1F46C, 0x1F3FC,
11712 3, 0x1F46C, 0x1F3FD,
11713 3, 0x1F46C, 0x1F3FE,
11714 3, 0x1F46C, 0x1F3FF,
11715 3, 0x1F46D, 0x1F3FB,
11716 3, 0x1F46D, 0x1F3FC,
11717 3, 0x1F46D, 0x1F3FD,
11718 3, 0x1F46D, 0x1F3FE,
11719 3, 0x1F46D, 0x1F3FF,
11720 3, 0x1F46E, 0x1F3FB,
11721 3, 0x1F46E, 0x1F3FC,
11722 3, 0x1F46E, 0x1F3FD,
11723 3, 0x1F46E, 0x1F3FE,
11724 3, 0x1F46E, 0x1F3FF,
11725 3, 0x1F470, 0x1F3FB,
11726 3, 0x1F470, 0x1F3FC,
11727 3, 0x1F470, 0x1F3FD,
11728 3, 0x1F470, 0x1F3FE,
11729 3, 0x1F470, 0x1F3FF,
11730 3, 0x1F471, 0x1F3FB,
11731 3, 0x1F471, 0x1F3FC,
11732 3, 0x1F471, 0x1F3FD,
11733 3, 0x1F471, 0x1F3FE,
11734 3, 0x1F471, 0x1F3FF,
11735 3, 0x1F472, 0x1F3FB,
11736 3, 0x1F472, 0x1F3FC,
11737 3, 0x1F472, 0x1F3FD,
11738 3, 0x1F472, 0x1F3FE,
11739 3, 0x1F472, 0x1F3FF,
11740 3, 0x1F473, 0x1F3FB,
11741 3, 0x1F473, 0x1F3FC,
11742 3, 0x1F473, 0x1F3FD,
11743 3, 0x1F473, 0x1F3FE,
11744 3, 0x1F473, 0x1F3FF,
11745 3, 0x1F474, 0x1F3FB,
11746 3, 0x1F474, 0x1F3FC,
11747 3, 0x1F474, 0x1F3FD,
11748 3, 0x1F474, 0x1F3FE,
11749 3, 0x1F474, 0x1F3FF,
11750 3, 0x1F475, 0x1F3FB,
11751 3, 0x1F475, 0x1F3FC,
11752 3, 0x1F475, 0x1F3FD,
11753 3, 0x1F475, 0x1F3FE,
11754 3, 0x1F475, 0x1F3FF,
11755 3, 0x1F476, 0x1F3FB,
11756 3, 0x1F476, 0x1F3FC,
11757 3, 0x1F476, 0x1F3FD,
11758 3, 0x1F476, 0x1F3FE,
11759 3, 0x1F476, 0x1F3FF,
11760 3, 0x1F477, 0x1F3FB,
11761 3, 0x1F477, 0x1F3FC,
11762 3, 0x1F477, 0x1F3FD,
11763 3, 0x1F477, 0x1F3FE,
11764 3, 0x1F477, 0x1F3FF,
11765 3, 0x1F478, 0x1F3FB,
11766 3, 0x1F478, 0x1F3FC,
11767 3, 0x1F478, 0x1F3FD,
11768 3, 0x1F478, 0x1F3FE,
11769 3, 0x1F478, 0x1F3FF,
11770 3, 0x1F47C, 0x1F3FB,
11771 3, 0x1F47C, 0x1F3FC,
11772 3, 0x1F47C, 0x1F3FD,
11773 3, 0x1F47C, 0x1F3FE,
11774 3, 0x1F47C, 0x1F3FF,
11775 3, 0x1F481, 0x1F3FB,
11776 3, 0x1F481, 0x1F3FC,
11777 3, 0x1F481, 0x1F3FD,
11778 3, 0x1F481, 0x1F3FE,
11779 3, 0x1F481, 0x1F3FF,
11780 3, 0x1F482, 0x1F3FB,
11781 3, 0x1F482, 0x1F3FC,
11782 3, 0x1F482, 0x1F3FD,
11783 3, 0x1F482, 0x1F3FE,
11784 3, 0x1F482, 0x1F3FF,
11785 3, 0x1F483, 0x1F3FB,
11786 3, 0x1F483, 0x1F3FC,
11787 3, 0x1F483, 0x1F3FD,
11788 3, 0x1F483, 0x1F3FE,
11789 3, 0x1F483, 0x1F3FF,
11790 3, 0x1F485, 0x1F3FB,
11791 3, 0x1F485, 0x1F3FC,
11792 3, 0x1F485, 0x1F3FD,
11793 3, 0x1F485, 0x1F3FE,
11794 3, 0x1F485, 0x1F3FF,
11795 3, 0x1F486, 0x1F3FB,
11796 3, 0x1F486, 0x1F3FC,
11797 3, 0x1F486, 0x1F3FD,
11798 3, 0x1F486, 0x1F3FE,
11799 3, 0x1F486, 0x1F3FF,
11800 3, 0x1F487, 0x1F3FB,
11801 3, 0x1F487, 0x1F3FC,
11802 3, 0x1F487, 0x1F3FD,
11803 3, 0x1F487, 0x1F3FE,
11804 3, 0x1F487, 0x1F3FF,
11805 3, 0x1F48F, 0x1F3FB,
11806 3, 0x1F48F, 0x1F3FC,
11807 3, 0x1F48F, 0x1F3FD,
11808 3, 0x1F48F, 0x1F3FE,
11809 3, 0x1F48F, 0x1F3FF,
11810 3, 0x1F491, 0x1F3FB,
11811 3, 0x1F491, 0x1F3FC,
11812 3, 0x1F491, 0x1F3FD,
11813 3, 0x1F491, 0x1F3FE,
11814 3, 0x1F491, 0x1F3FF,
11815 3, 0x1F4AA, 0x1F3FB,
11816 3, 0x1F4AA, 0x1F3FC,
11817 3, 0x1F4AA, 0x1F3FD,
11818 3, 0x1F4AA, 0x1F3FE,
11819 3, 0x1F4AA, 0x1F3FF,
11820 3, 0x1F574, 0x1F3FB,
11821 3, 0x1F574, 0x1F3FC,
11822 3, 0x1F574, 0x1F3FD,
11823 3, 0x1F574, 0x1F3FE,
11824 3, 0x1F574, 0x1F3FF,
11825 3, 0x1F575, 0x1F3FB,
11826 3, 0x1F575, 0x1F3FC,
11827 3, 0x1F575, 0x1F3FD,
11828 3, 0x1F575, 0x1F3FE,
11829 3, 0x1F575, 0x1F3FF,
11830 3, 0x1F57A, 0x1F3FB,
11831 3, 0x1F57A, 0x1F3FC,
11832 3, 0x1F57A, 0x1F3FD,
11833 3, 0x1F57A, 0x1F3FE,
11834 3, 0x1F57A, 0x1F3FF,
11835 3, 0x1F590, 0x1F3FB,
11836 3, 0x1F590, 0x1F3FC,
11837 3, 0x1F590, 0x1F3FD,
11838 3, 0x1F590, 0x1F3FE,
11839 3, 0x1F590, 0x1F3FF,
11840 3, 0x1F595, 0x1F3FB,
11841 3, 0x1F595, 0x1F3FC,
11842 3, 0x1F595, 0x1F3FD,
11843 3, 0x1F595, 0x1F3FE,
11844 3, 0x1F595, 0x1F3FF,
11845 3, 0x1F596, 0x1F3FB,
11846 3, 0x1F596, 0x1F3FC,
11847 3, 0x1F596, 0x1F3FD,
11848 3, 0x1F596, 0x1F3FE,
11849 3, 0x1F596, 0x1F3FF,
11850 3, 0x1F645, 0x1F3FB,
11851 3, 0x1F645, 0x1F3FC,
11852 3, 0x1F645, 0x1F3FD,
11853 3, 0x1F645, 0x1F3FE,
11854 3, 0x1F645, 0x1F3FF,
11855 3, 0x1F646, 0x1F3FB,
11856 3, 0x1F646, 0x1F3FC,
11857 3, 0x1F646, 0x1F3FD,
11858 3, 0x1F646, 0x1F3FE,
11859 3, 0x1F646, 0x1F3FF,
11860 3, 0x1F647, 0x1F3FB,
11861 3, 0x1F647, 0x1F3FC,
11862 3, 0x1F647, 0x1F3FD,
11863 3, 0x1F647, 0x1F3FE,
11864 3, 0x1F647, 0x1F3FF,
11865 3, 0x1F64B, 0x1F3FB,
11866 3, 0x1F64B, 0x1F3FC,
11867 3, 0x1F64B, 0x1F3FD,
11868 3, 0x1F64B, 0x1F3FE,
11869 3, 0x1F64B, 0x1F3FF,
11870 3, 0x1F64C, 0x1F3FB,
11871 3, 0x1F64C, 0x1F3FC,
11872 3, 0x1F64C, 0x1F3FD,
11873 3, 0x1F64C, 0x1F3FE,
11874 3, 0x1F64C, 0x1F3FF,
11875 3, 0x1F64D, 0x1F3FB,
11876 3, 0x1F64D, 0x1F3FC,
11877 3, 0x1F64D, 0x1F3FD,
11878 3, 0x1F64D, 0x1F3FE,
11879 3, 0x1F64D, 0x1F3FF,
11880 3, 0x1F64E, 0x1F3FB,
11881 3, 0x1F64E, 0x1F3FC,
11882 3, 0x1F64E, 0x1F3FD,
11883 3, 0x1F64E, 0x1F3FE,
11884 3, 0x1F64E, 0x1F3FF,
11885 3, 0x1F64F, 0x1F3FB,
11886 3, 0x1F64F, 0x1F3FC,
11887 3, 0x1F64F, 0x1F3FD,
11888 3, 0x1F64F, 0x1F3FE,
11889 3, 0x1F64F, 0x1F3FF,
11890 3, 0x1F6A3, 0x1F3FB,
11891 3, 0x1F6A3, 0x1F3FC,
11892 3, 0x1F6A3, 0x1F3FD,
11893 3, 0x1F6A3, 0x1F3FE,
11894 3, 0x1F6A3, 0x1F3FF,
11895 3, 0x1F6B4, 0x1F3FB,
11896 3, 0x1F6B4, 0x1F3FC,
11897 3, 0x1F6B4, 0x1F3FD,
11898 3, 0x1F6B4, 0x1F3FE,
11899 3, 0x1F6B4, 0x1F3FF,
11900 3, 0x1F6B5, 0x1F3FB,
11901 3, 0x1F6B5, 0x1F3FC,
11902 3, 0x1F6B5, 0x1F3FD,
11903 3, 0x1F6B5, 0x1F3FE,
11904 3, 0x1F6B5, 0x1F3FF,
11905 3, 0x1F6B6, 0x1F3FB,
11906 3, 0x1F6B6, 0x1F3FC,
11907 3, 0x1F6B6, 0x1F3FD,
11908 3, 0x1F6B6, 0x1F3FE,
11909 3, 0x1F6B6, 0x1F3FF,
11910 3, 0x1F6C0, 0x1F3FB,
11911 3, 0x1F6C0, 0x1F3FC,
11912 3, 0x1F6C0, 0x1F3FD,
11913 3, 0x1F6C0, 0x1F3FE,
11914 3, 0x1F6C0, 0x1F3FF,
11915 3, 0x1F6CC, 0x1F3FB,
11916 3, 0x1F6CC, 0x1F3FC,
11917 3, 0x1F6CC, 0x1F3FD,
11918 3, 0x1F6CC, 0x1F3FE,
11919 3, 0x1F6CC, 0x1F3FF,
11920 3, 0x1F90C, 0x1F3FB,
11921 3, 0x1F90C, 0x1F3FC,
11922 3, 0x1F90C, 0x1F3FD,
11923 3, 0x1F90C, 0x1F3FE,
11924 3, 0x1F90C, 0x1F3FF,
11925 3, 0x1F90F, 0x1F3FB,
11926 3, 0x1F90F, 0x1F3FC,
11927 3, 0x1F90F, 0x1F3FD,
11928 3, 0x1F90F, 0x1F3FE,
11929 3, 0x1F90F, 0x1F3FF,
11930 3, 0x1F918, 0x1F3FB,
11931 3, 0x1F918, 0x1F3FC,
11932 3, 0x1F918, 0x1F3FD,
11933 3, 0x1F918, 0x1F3FE,
11934 3, 0x1F918, 0x1F3FF,
11935 3, 0x1F919, 0x1F3FB,
11936 3, 0x1F919, 0x1F3FC,
11937 3, 0x1F919, 0x1F3FD,
11938 3, 0x1F919, 0x1F3FE,
11939 3, 0x1F919, 0x1F3FF,
11940 3, 0x1F91A, 0x1F3FB,
11941 3, 0x1F91A, 0x1F3FC,
11942 3, 0x1F91A, 0x1F3FD,
11943 3, 0x1F91A, 0x1F3FE,
11944 3, 0x1F91A, 0x1F3FF,
11945 3, 0x1F91B, 0x1F3FB,
11946 3, 0x1F91B, 0x1F3FC,
11947 3, 0x1F91B, 0x1F3FD,
11948 3, 0x1F91B, 0x1F3FE,
11949 3, 0x1F91B, 0x1F3FF,
11950 3, 0x1F91C, 0x1F3FB,
11951 3, 0x1F91C, 0x1F3FC,
11952 3, 0x1F91C, 0x1F3FD,
11953 3, 0x1F91C, 0x1F3FE,
11954 3, 0x1F91C, 0x1F3FF,
11955 3, 0x1F91D, 0x1F3FB,
11956 3, 0x1F91D, 0x1F3FC,
11957 3, 0x1F91D, 0x1F3FD,
11958 3, 0x1F91D, 0x1F3FE,
11959 3, 0x1F91D, 0x1F3FF,
11960 3, 0x1F91E, 0x1F3FB,
11961 3, 0x1F91E, 0x1F3FC,
11962 3, 0x1F91E, 0x1F3FD,
11963 3, 0x1F91E, 0x1F3FE,
11964 3, 0x1F91E, 0x1F3FF,
11965 3, 0x1F91F, 0x1F3FB,
11966 3, 0x1F91F, 0x1F3FC,
11967 3, 0x1F91F, 0x1F3FD,
11968 3, 0x1F91F, 0x1F3FE,
11969 3, 0x1F91F, 0x1F3FF,
11970 3, 0x1F926, 0x1F3FB,
11971 3, 0x1F926, 0x1F3FC,
11972 3, 0x1F926, 0x1F3FD,
11973 3, 0x1F926, 0x1F3FE,
11974 3, 0x1F926, 0x1F3FF,
11975 3, 0x1F930, 0x1F3FB,
11976 3, 0x1F930, 0x1F3FC,
11977 3, 0x1F930, 0x1F3FD,
11978 3, 0x1F930, 0x1F3FE,
11979 3, 0x1F930, 0x1F3FF,
11980 3, 0x1F931, 0x1F3FB,
11981 3, 0x1F931, 0x1F3FC,
11982 3, 0x1F931, 0x1F3FD,
11983 3, 0x1F931, 0x1F3FE,
11984 3, 0x1F931, 0x1F3FF,
11985 3, 0x1F932, 0x1F3FB,
11986 3, 0x1F932, 0x1F3FC,
11987 3, 0x1F932, 0x1F3FD,
11988 3, 0x1F932, 0x1F3FE,
11989 3, 0x1F932, 0x1F3FF,
11990 3, 0x1F933, 0x1F3FB,
11991 3, 0x1F933, 0x1F3FC,
11992 3, 0x1F933, 0x1F3FD,
11993 3, 0x1F933, 0x1F3FE,
11994 3, 0x1F933, 0x1F3FF,
11995 3, 0x1F934, 0x1F3FB,
11996 3, 0x1F934, 0x1F3FC,
11997 3, 0x1F934, 0x1F3FD,
11998 3, 0x1F934, 0x1F3FE,
11999 3, 0x1F934, 0x1F3FF,
12000 3, 0x1F935, 0x1F3FB,
12001 3, 0x1F935, 0x1F3FC,
12002 3, 0x1F935, 0x1F3FD,
12003 3, 0x1F935, 0x1F3FE,
12004 3, 0x1F935, 0x1F3FF,
12005 3, 0x1F936, 0x1F3FB,
12006 3, 0x1F936, 0x1F3FC,
12007 3, 0x1F936, 0x1F3FD,
12008 3, 0x1F936, 0x1F3FE,
12009 3, 0x1F936, 0x1F3FF,
12010 3, 0x1F937, 0x1F3FB,
12011 3, 0x1F937, 0x1F3FC,
12012 3, 0x1F937, 0x1F3FD,
12013 3, 0x1F937, 0x1F3FE,
12014 3, 0x1F937, 0x1F3FF,
12015 3, 0x1F938, 0x1F3FB,
12016 3, 0x1F938, 0x1F3FC,
12017 3, 0x1F938, 0x1F3FD,
12018 3, 0x1F938, 0x1F3FE,
12019 3, 0x1F938, 0x1F3FF,
12020 3, 0x1F939, 0x1F3FB,
12021 3, 0x1F939, 0x1F3FC,
12022 3, 0x1F939, 0x1F3FD,
12023 3, 0x1F939, 0x1F3FE,
12024 3, 0x1F939, 0x1F3FF,
12025 3, 0x1F93D, 0x1F3FB,
12026 3, 0x1F93D, 0x1F3FC,
12027 3, 0x1F93D, 0x1F3FD,
12028 3, 0x1F93D, 0x1F3FE,
12029 3, 0x1F93D, 0x1F3FF,
12030 3, 0x1F93E, 0x1F3FB,
12031 3, 0x1F93E, 0x1F3FC,
12032 3, 0x1F93E, 0x1F3FD,
12033 3, 0x1F93E, 0x1F3FE,
12034 3, 0x1F93E, 0x1F3FF,
12035 3, 0x1F977, 0x1F3FB,
12036 3, 0x1F977, 0x1F3FC,
12037 3, 0x1F977, 0x1F3FD,
12038 3, 0x1F977, 0x1F3FE,
12039 3, 0x1F977, 0x1F3FF,
12040 3, 0x1F9B5, 0x1F3FB,
12041 3, 0x1F9B5, 0x1F3FC,
12042 3, 0x1F9B5, 0x1F3FD,
12043 3, 0x1F9B5, 0x1F3FE,
12044 3, 0x1F9B5, 0x1F3FF,
12045 3, 0x1F9B6, 0x1F3FB,
12046 3, 0x1F9B6, 0x1F3FC,
12047 3, 0x1F9B6, 0x1F3FD,
12048 3, 0x1F9B6, 0x1F3FE,
12049 3, 0x1F9B6, 0x1F3FF,
12050 3, 0x1F9B8, 0x1F3FB,
12051 3, 0x1F9B8, 0x1F3FC,
12052 3, 0x1F9B8, 0x1F3FD,
12053 3, 0x1F9B8, 0x1F3FE,
12054 3, 0x1F9B8, 0x1F3FF,
12055 3, 0x1F9B9, 0x1F3FB,
12056 3, 0x1F9B9, 0x1F3FC,
12057 3, 0x1F9B9, 0x1F3FD,
12058 3, 0x1F9B9, 0x1F3FE,
12059 3, 0x1F9B9, 0x1F3FF,
12060 3, 0x1F9BB, 0x1F3FB,
12061 3, 0x1F9BB, 0x1F3FC,
12062 3, 0x1F9BB, 0x1F3FD,
12063 3, 0x1F9BB, 0x1F3FE,
12064 3, 0x1F9BB, 0x1F3FF,
12065 3, 0x1F9CD, 0x1F3FB,
12066 3, 0x1F9CD, 0x1F3FC,
12067 3, 0x1F9CD, 0x1F3FD,
12068 3, 0x1F9CD, 0x1F3FE,
12069 3, 0x1F9CD, 0x1F3FF,
12070 3, 0x1F9CE, 0x1F3FB,
12071 3, 0x1F9CE, 0x1F3FC,
12072 3, 0x1F9CE, 0x1F3FD,
12073 3, 0x1F9CE, 0x1F3FE,
12074 3, 0x1F9CE, 0x1F3FF,
12075 3, 0x1F9CF, 0x1F3FB,
12076 3, 0x1F9CF, 0x1F3FC,
12077 3, 0x1F9CF, 0x1F3FD,
12078 3, 0x1F9CF, 0x1F3FE,
12079 3, 0x1F9CF, 0x1F3FF,
12080 3, 0x1F9D1, 0x1F3FB,
12081 3, 0x1F9D1, 0x1F3FC,
12082 3, 0x1F9D1, 0x1F3FD,
12083 3, 0x1F9D1, 0x1F3FE,
12084 3, 0x1F9D1, 0x1F3FF,
12085 3, 0x1F9D2, 0x1F3FB,
12086 3, 0x1F9D2, 0x1F3FC,
12087 3, 0x1F9D2, 0x1F3FD,
12088 3, 0x1F9D2, 0x1F3FE,
12089 3, 0x1F9D2, 0x1F3FF,
12090 3, 0x1F9D3, 0x1F3FB,
12091 3, 0x1F9D3, 0x1F3FC,
12092 3, 0x1F9D3, 0x1F3FD,
12093 3, 0x1F9D3, 0x1F3FE,
12094 3, 0x1F9D3, 0x1F3FF,
12095 3, 0x1F9D4, 0x1F3FB,
12096 3, 0x1F9D4, 0x1F3FC,
12097 3, 0x1F9D4, 0x1F3FD,
12098 3, 0x1F9D4, 0x1F3FE,
12099 3, 0x1F9D4, 0x1F3FF,
12100 3, 0x1F9D5, 0x1F3FB,
12101 3, 0x1F9D5, 0x1F3FC,
12102 3, 0x1F9D5, 0x1F3FD,
12103 3, 0x1F9D5, 0x1F3FE,
12104 3, 0x1F9D5, 0x1F3FF,
12105 3, 0x1F9D6, 0x1F3FB,
12106 3, 0x1F9D6, 0x1F3FC,
12107 3, 0x1F9D6, 0x1F3FD,
12108 3, 0x1F9D6, 0x1F3FE,
12109 3, 0x1F9D6, 0x1F3FF,
12110 3, 0x1F9D7, 0x1F3FB,
12111 3, 0x1F9D7, 0x1F3FC,
12112 3, 0x1F9D7, 0x1F3FD,
12113 3, 0x1F9D7, 0x1F3FE,
12114 3, 0x1F9D7, 0x1F3FF,
12115 3, 0x1F9D8, 0x1F3FB,
12116 3, 0x1F9D8, 0x1F3FC,
12117 3, 0x1F9D8, 0x1F3FD,
12118 3, 0x1F9D8, 0x1F3FE,
12119 3, 0x1F9D8, 0x1F3FF,
12120 3, 0x1F9D9, 0x1F3FB,
12121 3, 0x1F9D9, 0x1F3FC,
12122 3, 0x1F9D9, 0x1F3FD,
12123 3, 0x1F9D9, 0x1F3FE,
12124 3, 0x1F9D9, 0x1F3FF,
12125 3, 0x1F9DA, 0x1F3FB,
12126 3, 0x1F9DA, 0x1F3FC,
12127 3, 0x1F9DA, 0x1F3FD,
12128 3, 0x1F9DA, 0x1F3FE,
12129 3, 0x1F9DA, 0x1F3FF,
12130 3, 0x1F9DB, 0x1F3FB,
12131 3, 0x1F9DB, 0x1F3FC,
12132 3, 0x1F9DB, 0x1F3FD,
12133 3, 0x1F9DB, 0x1F3FE,
12134 3, 0x1F9DB, 0x1F3FF,
12135 3, 0x1F9DC, 0x1F3FB,
12136 3, 0x1F9DC, 0x1F3FC,
12137 3, 0x1F9DC, 0x1F3FD,
12138 3, 0x1F9DC, 0x1F3FE,
12139 3, 0x1F9DC, 0x1F3FF,
12140 3, 0x1F9DD, 0x1F3FB,
12141 3, 0x1F9DD, 0x1F3FC,
12142 3, 0x1F9DD, 0x1F3FD,
12143 3, 0x1F9DD, 0x1F3FE,
12144 3, 0x1F9DD, 0x1F3FF,
12145 3, 0x1FAC3, 0x1F3FB,
12146 3, 0x1FAC3, 0x1F3FC,
12147 3, 0x1FAC3, 0x1F3FD,
12148 3, 0x1FAC3, 0x1F3FE,
12149 3, 0x1FAC3, 0x1F3FF,
12150 3, 0x1FAC4, 0x1F3FB,
12151 3, 0x1FAC4, 0x1F3FC,
12152 3, 0x1FAC4, 0x1F3FD,
12153 3, 0x1FAC4, 0x1F3FE,
12154 3, 0x1FAC4, 0x1F3FF,
12155 3, 0x1FAC5, 0x1F3FB,
12156 3, 0x1FAC5, 0x1F3FC,
12157 3, 0x1FAC5, 0x1F3FD,
12158 3, 0x1FAC5, 0x1F3FE,
12159 3, 0x1FAC5, 0x1F3FF,
12160 3, 0x1FAF0, 0x1F3FB,
12161 3, 0x1FAF0, 0x1F3FC,
12162 3, 0x1FAF0, 0x1F3FD,
12163 3, 0x1FAF0, 0x1F3FE,
12164 3, 0x1FAF0, 0x1F3FF,
12165 3, 0x1FAF1, 0x1F3FB,
12166 3, 0x1FAF1, 0x1F3FC,
12167 3, 0x1FAF1, 0x1F3FD,
12168 3, 0x1FAF1, 0x1F3FE,
12169 3, 0x1FAF1, 0x1F3FF,
12170 3, 0x1FAF2, 0x1F3FB,
12171 3, 0x1FAF2, 0x1F3FC,
12172 3, 0x1FAF2, 0x1F3FD,
12173 3, 0x1FAF2, 0x1F3FE,
12174 3, 0x1FAF2, 0x1F3FF,
12175 3, 0x1FAF3, 0x1F3FB,
12176 3, 0x1FAF3, 0x1F3FC,
12177 3, 0x1FAF3, 0x1F3FD,
12178 3, 0x1FAF3, 0x1F3FE,
12179 3, 0x1FAF3, 0x1F3FF,
12180 3, 0x1FAF4, 0x1F3FB,
12181 3, 0x1FAF4, 0x1F3FC,
12182 3, 0x1FAF4, 0x1F3FD,
12183 3, 0x1FAF4, 0x1F3FE,
12184 3, 0x1FAF4, 0x1F3FF,
12185 3, 0x1FAF5, 0x1F3FB,
12186 3, 0x1FAF5, 0x1F3FC,
12187 3, 0x1FAF5, 0x1F3FD,
12188 3, 0x1FAF5, 0x1F3FE,
12189 3, 0x1FAF5, 0x1F3FF,
12190 3, 0x1FAF6, 0x1F3FB,
12191 3, 0x1FAF6, 0x1F3FC,
12192 3, 0x1FAF6, 0x1F3FD,
12193 3, 0x1FAF6, 0x1F3FE,
12194 3, 0x1FAF6, 0x1F3FF,
12195 3, 0x1FAF7, 0x1F3FB,
12196 3, 0x1FAF7, 0x1F3FC,
12197 3, 0x1FAF7, 0x1F3FD,
12198 3, 0x1FAF7, 0x1F3FE,
12199 3, 0x1FAF7, 0x1F3FF,
12200 3, 0x1FAF8, 0x1F3FB,
12201 3, 0x1FAF8, 0x1F3FC,
12202 3, 0x1FAF8, 0x1F3FD,
12203 3, 0x1FAF8, 0x1F3FE,
12204 3, 0x1FAF8, 0x1F3FF,
12205 0, // Padding.
12206 // #334 (19677+774/2): bp=RGI_Emoji_Flag_Sequence
12207 3, 0x1F1E6, 0x1F1E8,
12208 3, 0x1F1E6, 0x1F1E9,
12209 3, 0x1F1E6, 0x1F1EA,
12210 3, 0x1F1E6, 0x1F1EB,
12211 3, 0x1F1E6, 0x1F1EC,
12212 3, 0x1F1E6, 0x1F1EE,
12213 3, 0x1F1E6, 0x1F1F1,
12214 3, 0x1F1E6, 0x1F1F2,
12215 3, 0x1F1E6, 0x1F1F4,
12216 3, 0x1F1E6, 0x1F1F6,
12217 3, 0x1F1E6, 0x1F1F7,
12218 3, 0x1F1E6, 0x1F1F8,
12219 3, 0x1F1E6, 0x1F1F9,
12220 3, 0x1F1E6, 0x1F1FA,
12221 3, 0x1F1E6, 0x1F1FC,
12222 3, 0x1F1E6, 0x1F1FD,
12223 3, 0x1F1E6, 0x1F1FF,
12224 3, 0x1F1E7, 0x1F1E6,
12225 3, 0x1F1E7, 0x1F1E7,
12226 3, 0x1F1E7, 0x1F1E9,
12227 3, 0x1F1E7, 0x1F1EA,
12228 3, 0x1F1E7, 0x1F1EB,
12229 3, 0x1F1E7, 0x1F1EC,
12230 3, 0x1F1E7, 0x1F1ED,
12231 3, 0x1F1E7, 0x1F1EE,
12232 3, 0x1F1E7, 0x1F1EF,
12233 3, 0x1F1E7, 0x1F1F1,
12234 3, 0x1F1E7, 0x1F1F2,
12235 3, 0x1F1E7, 0x1F1F3,
12236 3, 0x1F1E7, 0x1F1F4,
12237 3, 0x1F1E7, 0x1F1F6,
12238 3, 0x1F1E7, 0x1F1F7,
12239 3, 0x1F1E7, 0x1F1F8,
12240 3, 0x1F1E7, 0x1F1F9,
12241 3, 0x1F1E7, 0x1F1FB,
12242 3, 0x1F1E7, 0x1F1FC,
12243 3, 0x1F1E7, 0x1F1FE,
12244 3, 0x1F1E7, 0x1F1FF,
12245 3, 0x1F1E8, 0x1F1E6,
12246 3, 0x1F1E8, 0x1F1E8,
12247 3, 0x1F1E8, 0x1F1E9,
12248 3, 0x1F1E8, 0x1F1EB,
12249 3, 0x1F1E8, 0x1F1EC,
12250 3, 0x1F1E8, 0x1F1ED,
12251 3, 0x1F1E8, 0x1F1EE,
12252 3, 0x1F1E8, 0x1F1F0,
12253 3, 0x1F1E8, 0x1F1F1,
12254 3, 0x1F1E8, 0x1F1F2,
12255 3, 0x1F1E8, 0x1F1F3,
12256 3, 0x1F1E8, 0x1F1F4,
12257 3, 0x1F1E8, 0x1F1F5,
12258 3, 0x1F1E8, 0x1F1F7,
12259 3, 0x1F1E8, 0x1F1FA,
12260 3, 0x1F1E8, 0x1F1FB,
12261 3, 0x1F1E8, 0x1F1FC,
12262 3, 0x1F1E8, 0x1F1FD,
12263 3, 0x1F1E8, 0x1F1FE,
12264 3, 0x1F1E8, 0x1F1FF,
12265 3, 0x1F1E9, 0x1F1EA,
12266 3, 0x1F1E9, 0x1F1EC,
12267 3, 0x1F1E9, 0x1F1EF,
12268 3, 0x1F1E9, 0x1F1F0,
12269 3, 0x1F1E9, 0x1F1F2,
12270 3, 0x1F1E9, 0x1F1F4,
12271 3, 0x1F1E9, 0x1F1FF,
12272 3, 0x1F1EA, 0x1F1E6,
12273 3, 0x1F1EA, 0x1F1E8,
12274 3, 0x1F1EA, 0x1F1EA,
12275 3, 0x1F1EA, 0x1F1EC,
12276 3, 0x1F1EA, 0x1F1ED,
12277 3, 0x1F1EA, 0x1F1F7,
12278 3, 0x1F1EA, 0x1F1F8,
12279 3, 0x1F1EA, 0x1F1F9,
12280 3, 0x1F1EA, 0x1F1FA,
12281 3, 0x1F1EB, 0x1F1EE,
12282 3, 0x1F1EB, 0x1F1EF,
12283 3, 0x1F1EB, 0x1F1F0,
12284 3, 0x1F1EB, 0x1F1F2,
12285 3, 0x1F1EB, 0x1F1F4,
12286 3, 0x1F1EB, 0x1F1F7,
12287 3, 0x1F1EC, 0x1F1E6,
12288 3, 0x1F1EC, 0x1F1E7,
12289 3, 0x1F1EC, 0x1F1E9,
12290 3, 0x1F1EC, 0x1F1EA,
12291 3, 0x1F1EC, 0x1F1EB,
12292 3, 0x1F1EC, 0x1F1EC,
12293 3, 0x1F1EC, 0x1F1ED,
12294 3, 0x1F1EC, 0x1F1EE,
12295 3, 0x1F1EC, 0x1F1F1,
12296 3, 0x1F1EC, 0x1F1F2,
12297 3, 0x1F1EC, 0x1F1F3,
12298 3, 0x1F1EC, 0x1F1F5,
12299 3, 0x1F1EC, 0x1F1F6,
12300 3, 0x1F1EC, 0x1F1F7,
12301 3, 0x1F1EC, 0x1F1F8,
12302 3, 0x1F1EC, 0x1F1F9,
12303 3, 0x1F1EC, 0x1F1FA,
12304 3, 0x1F1EC, 0x1F1FC,
12305 3, 0x1F1EC, 0x1F1FE,
12306 3, 0x1F1ED, 0x1F1F0,
12307 3, 0x1F1ED, 0x1F1F2,
12308 3, 0x1F1ED, 0x1F1F3,
12309 3, 0x1F1ED, 0x1F1F7,
12310 3, 0x1F1ED, 0x1F1F9,
12311 3, 0x1F1ED, 0x1F1FA,
12312 3, 0x1F1EE, 0x1F1E8,
12313 3, 0x1F1EE, 0x1F1E9,
12314 3, 0x1F1EE, 0x1F1EA,
12315 3, 0x1F1EE, 0x1F1F1,
12316 3, 0x1F1EE, 0x1F1F2,
12317 3, 0x1F1EE, 0x1F1F3,
12318 3, 0x1F1EE, 0x1F1F4,
12319 3, 0x1F1EE, 0x1F1F6,
12320 3, 0x1F1EE, 0x1F1F7,
12321 3, 0x1F1EE, 0x1F1F8,
12322 3, 0x1F1EE, 0x1F1F9,
12323 3, 0x1F1EF, 0x1F1EA,
12324 3, 0x1F1EF, 0x1F1F2,
12325 3, 0x1F1EF, 0x1F1F4,
12326 3, 0x1F1EF, 0x1F1F5,
12327 3, 0x1F1F0, 0x1F1EA,
12328 3, 0x1F1F0, 0x1F1EC,
12329 3, 0x1F1F0, 0x1F1ED,
12330 3, 0x1F1F0, 0x1F1EE,
12331 3, 0x1F1F0, 0x1F1F2,
12332 3, 0x1F1F0, 0x1F1F3,
12333 3, 0x1F1F0, 0x1F1F5,
12334 3, 0x1F1F0, 0x1F1F7,
12335 3, 0x1F1F0, 0x1F1FC,
12336 3, 0x1F1F0, 0x1F1FE,
12337 3, 0x1F1F0, 0x1F1FF,
12338 3, 0x1F1F1, 0x1F1E6,
12339 3, 0x1F1F1, 0x1F1E7,
12340 3, 0x1F1F1, 0x1F1E8,
12341 3, 0x1F1F1, 0x1F1EE,
12342 3, 0x1F1F1, 0x1F1F0,
12343 3, 0x1F1F1, 0x1F1F7,
12344 3, 0x1F1F1, 0x1F1F8,
12345 3, 0x1F1F1, 0x1F1F9,
12346 3, 0x1F1F1, 0x1F1FA,
12347 3, 0x1F1F1, 0x1F1FB,
12348 3, 0x1F1F1, 0x1F1FE,
12349 3, 0x1F1F2, 0x1F1E6,
12350 3, 0x1F1F2, 0x1F1E8,
12351 3, 0x1F1F2, 0x1F1E9,
12352 3, 0x1F1F2, 0x1F1EA,
12353 3, 0x1F1F2, 0x1F1EB,
12354 3, 0x1F1F2, 0x1F1EC,
12355 3, 0x1F1F2, 0x1F1ED,
12356 3, 0x1F1F2, 0x1F1F0,
12357 3, 0x1F1F2, 0x1F1F1,
12358 3, 0x1F1F2, 0x1F1F2,
12359 3, 0x1F1F2, 0x1F1F3,
12360 3, 0x1F1F2, 0x1F1F4,
12361 3, 0x1F1F2, 0x1F1F5,
12362 3, 0x1F1F2, 0x1F1F6,
12363 3, 0x1F1F2, 0x1F1F7,
12364 3, 0x1F1F2, 0x1F1F8,
12365 3, 0x1F1F2, 0x1F1F9,
12366 3, 0x1F1F2, 0x1F1FA,
12367 3, 0x1F1F2, 0x1F1FB,
12368 3, 0x1F1F2, 0x1F1FC,
12369 3, 0x1F1F2, 0x1F1FD,
12370 3, 0x1F1F2, 0x1F1FE,
12371 3, 0x1F1F2, 0x1F1FF,
12372 3, 0x1F1F3, 0x1F1E6,
12373 3, 0x1F1F3, 0x1F1E8,
12374 3, 0x1F1F3, 0x1F1EA,
12375 3, 0x1F1F3, 0x1F1EB,
12376 3, 0x1F1F3, 0x1F1EC,
12377 3, 0x1F1F3, 0x1F1EE,
12378 3, 0x1F1F3, 0x1F1F1,
12379 3, 0x1F1F3, 0x1F1F4,
12380 3, 0x1F1F3, 0x1F1F5,
12381 3, 0x1F1F3, 0x1F1F7,
12382 3, 0x1F1F3, 0x1F1FA,
12383 3, 0x1F1F3, 0x1F1FF,
12384 3, 0x1F1F4, 0x1F1F2,
12385 3, 0x1F1F5, 0x1F1E6,
12386 3, 0x1F1F5, 0x1F1EA,
12387 3, 0x1F1F5, 0x1F1EB,
12388 3, 0x1F1F5, 0x1F1EC,
12389 3, 0x1F1F5, 0x1F1ED,
12390 3, 0x1F1F5, 0x1F1F0,
12391 3, 0x1F1F5, 0x1F1F1,
12392 3, 0x1F1F5, 0x1F1F2,
12393 3, 0x1F1F5, 0x1F1F3,
12394 3, 0x1F1F5, 0x1F1F7,
12395 3, 0x1F1F5, 0x1F1F8,
12396 3, 0x1F1F5, 0x1F1F9,
12397 3, 0x1F1F5, 0x1F1FC,
12398 3, 0x1F1F5, 0x1F1FE,
12399 3, 0x1F1F6, 0x1F1E6,
12400 3, 0x1F1F7, 0x1F1EA,
12401 3, 0x1F1F7, 0x1F1F4,
12402 3, 0x1F1F7, 0x1F1F8,
12403 3, 0x1F1F7, 0x1F1FA,
12404 3, 0x1F1F7, 0x1F1FC,
12405 3, 0x1F1F8, 0x1F1E6,
12406 3, 0x1F1F8, 0x1F1E7,
12407 3, 0x1F1F8, 0x1F1E8,
12408 3, 0x1F1F8, 0x1F1E9,
12409 3, 0x1F1F8, 0x1F1EA,
12410 3, 0x1F1F8, 0x1F1EC,
12411 3, 0x1F1F8, 0x1F1ED,
12412 3, 0x1F1F8, 0x1F1EE,
12413 3, 0x1F1F8, 0x1F1EF,
12414 3, 0x1F1F8, 0x1F1F0,
12415 3, 0x1F1F8, 0x1F1F1,
12416 3, 0x1F1F8, 0x1F1F2,
12417 3, 0x1F1F8, 0x1F1F3,
12418 3, 0x1F1F8, 0x1F1F4,
12419 3, 0x1F1F8, 0x1F1F7,
12420 3, 0x1F1F8, 0x1F1F8,
12421 3, 0x1F1F8, 0x1F1F9,
12422 3, 0x1F1F8, 0x1F1FB,
12423 3, 0x1F1F8, 0x1F1FD,
12424 3, 0x1F1F8, 0x1F1FE,
12425 3, 0x1F1F8, 0x1F1FF,
12426 3, 0x1F1F9, 0x1F1E6,
12427 3, 0x1F1F9, 0x1F1E8,
12428 3, 0x1F1F9, 0x1F1E9,
12429 3, 0x1F1F9, 0x1F1EB,
12430 3, 0x1F1F9, 0x1F1EC,
12431 3, 0x1F1F9, 0x1F1ED,
12432 3, 0x1F1F9, 0x1F1EF,
12433 3, 0x1F1F9, 0x1F1F0,
12434 3, 0x1F1F9, 0x1F1F1,
12435 3, 0x1F1F9, 0x1F1F2,
12436 3, 0x1F1F9, 0x1F1F3,
12437 3, 0x1F1F9, 0x1F1F4,
12438 3, 0x1F1F9, 0x1F1F7,
12439 3, 0x1F1F9, 0x1F1F9,
12440 3, 0x1F1F9, 0x1F1FB,
12441 3, 0x1F1F9, 0x1F1FC,
12442 3, 0x1F1F9, 0x1F1FF,
12443 3, 0x1F1FA, 0x1F1E6,
12444 3, 0x1F1FA, 0x1F1EC,
12445 3, 0x1F1FA, 0x1F1F2,
12446 3, 0x1F1FA, 0x1F1F3,
12447 3, 0x1F1FA, 0x1F1F8,
12448 3, 0x1F1FA, 0x1F1FE,
12449 3, 0x1F1FA, 0x1F1FF,
12450 3, 0x1F1FB, 0x1F1E6,
12451 3, 0x1F1FB, 0x1F1E8,
12452 3, 0x1F1FB, 0x1F1EA,
12453 3, 0x1F1FB, 0x1F1EC,
12454 3, 0x1F1FB, 0x1F1EE,
12455 3, 0x1F1FB, 0x1F1F3,
12456 3, 0x1F1FB, 0x1F1FA,
12457 3, 0x1F1FC, 0x1F1EB,
12458 3, 0x1F1FC, 0x1F1F8,
12459 3, 0x1F1FD, 0x1F1F0,
12460 3, 0x1F1FE, 0x1F1EA,
12461 3, 0x1F1FE, 0x1F1F9,
12462 3, 0x1F1FF, 0x1F1E6,
12463 3, 0x1F1FF, 0x1F1F2,
12464 3, 0x1F1FF, 0x1F1FC,
12465 // #335 (20064+24/2): bp=RGI_Emoji_Tag_Sequence
12466 8, 0x1F3F4, 0xE0067, 0xE0062, 0xE0065, 0xE006E, 0xE0067, 0xE007F,
12467 8, 0x1F3F4, 0xE0067, 0xE0062, 0xE0073, 0xE0063, 0xE0074, 0xE007F,
12468 8, 0x1F3F4, 0xE0067, 0xE0062, 0xE0077, 0xE006C, 0xE0073, 0xE007F,
12469 // #336 (20076+9382/2): bp=RGI_Emoji_ZWJ_Sequence
12470 7, 0x1F468, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468,
12471 9, 0x1F468, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468,
12472 4, 0x1F468, 0x200D, 0x1F466,
12473 6, 0x1F468, 0x200D, 0x1F466, 0x200D, 0x1F466,
12474 4, 0x1F468, 0x200D, 0x1F467,
12475 6, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F466,
12476 6, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F467,
12477 6, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F466,
12478 8, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F466, 0x200D, 0x1F466,
12479 6, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467,
12480 8, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F466,
12481 8, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F467,
12482 6, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F466,
12483 8, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466,
12484 6, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467,
12485 8, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466,
12486 8, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467,
12487 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12488 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12489 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12490 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12491 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12492 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12493 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12494 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12495 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12496 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12497 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC,
12498 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD,
12499 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE,
12500 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF,
12501 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12502 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12503 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12504 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12505 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12506 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12507 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12508 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12509 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12510 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12511 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB,
12512 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD,
12513 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE,
12514 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF,
12515 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12516 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12517 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12518 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12519 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12520 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12521 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12522 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12523 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12524 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12525 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB,
12526 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC,
12527 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE,
12528 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF,
12529 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12530 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12531 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12532 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12533 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12534 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12535 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12536 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12537 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12538 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12539 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB,
12540 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC,
12541 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD,
12542 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF,
12543 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12544 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12545 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12546 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12547 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12548 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12549 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12550 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12551 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12552 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12553 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB,
12554 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC,
12555 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD,
12556 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE,
12557 7, 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468,
12558 7, 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469,
12559 9, 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468,
12560 9, 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469,
12561 4, 0x1F469, 0x200D, 0x1F466,
12562 6, 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466,
12563 4, 0x1F469, 0x200D, 0x1F467,
12564 6, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466,
12565 6, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467,
12566 6, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F466,
12567 8, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466,
12568 6, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467,
12569 8, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466,
12570 8, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467,
12571 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12572 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12573 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12574 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12575 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12576 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB,
12577 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC,
12578 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD,
12579 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE,
12580 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF,
12581 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12582 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12583 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12584 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12585 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12586 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB,
12587 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC,
12588 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD,
12589 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE,
12590 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF,
12591 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC,
12592 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD,
12593 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE,
12594 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF,
12595 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FC,
12596 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FD,
12597 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FE,
12598 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FF,
12599 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12600 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12601 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12602 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12603 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12604 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB,
12605 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC,
12606 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD,
12607 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE,
12608 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF,
12609 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12610 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12611 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12612 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12613 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12614 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB,
12615 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC,
12616 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD,
12617 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE,
12618 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF,
12619 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB,
12620 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD,
12621 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE,
12622 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF,
12623 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FB,
12624 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FD,
12625 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FE,
12626 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FF,
12627 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12628 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12629 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12630 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12631 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12632 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB,
12633 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC,
12634 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD,
12635 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE,
12636 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF,
12637 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12638 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12639 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12640 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12641 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12642 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB,
12643 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC,
12644 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD,
12645 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE,
12646 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF,
12647 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB,
12648 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC,
12649 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE,
12650 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF,
12651 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FB,
12652 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FC,
12653 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FE,
12654 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FF,
12655 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12656 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12657 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12658 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12659 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12660 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB,
12661 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC,
12662 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD,
12663 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE,
12664 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF,
12665 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12666 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12667 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12668 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12669 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12670 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB,
12671 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC,
12672 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD,
12673 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE,
12674 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF,
12675 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB,
12676 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC,
12677 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD,
12678 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF,
12679 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FB,
12680 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FC,
12681 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FD,
12682 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FF,
12683 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB,
12684 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC,
12685 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD,
12686 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE,
12687 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF,
12688 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB,
12689 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC,
12690 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD,
12691 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE,
12692 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF,
12693 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB,
12694 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC,
12695 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD,
12696 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE,
12697 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF,
12698 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB,
12699 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC,
12700 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD,
12701 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE,
12702 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF,
12703 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB,
12704 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC,
12705 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD,
12706 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE,
12707 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FB,
12708 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FC,
12709 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FD,
12710 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FE,
12711 6, 0x1F9D1, 0x200D, 0x1F91D, 0x200D, 0x1F9D1,
12712 6, 0x1F9D1, 0x200D, 0x1F9D1, 0x200D, 0x1F9D2,
12713 8, 0x1F9D1, 0x200D, 0x1F9D1, 0x200D, 0x1F9D2, 0x200D, 0x1F9D2,
12714 4, 0x1F9D1, 0x200D, 0x1F9D2,
12715 6, 0x1F9D1, 0x200D, 0x1F9D2, 0x200D, 0x1F9D2,
12716 11, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FC,
12717 11, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FD,
12718 11, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FE,
12719 11, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FF,
12720 9, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FC,
12721 9, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FD,
12722 9, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FE,
12723 9, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FF,
12724 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB,
12725 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC,
12726 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD,
12727 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE,
12728 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF,
12729 11, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FB,
12730 11, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FD,
12731 11, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FE,
12732 11, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FF,
12733 9, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FB,
12734 9, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FD,
12735 9, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FE,
12736 9, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FF,
12737 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB,
12738 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC,
12739 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD,
12740 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE,
12741 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF,
12742 11, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FB,
12743 11, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FC,
12744 11, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FE,
12745 11, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FF,
12746 9, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FB,
12747 9, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FC,
12748 9, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FE,
12749 9, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FF,
12750 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB,
12751 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC,
12752 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD,
12753 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE,
12754 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF,
12755 11, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FB,
12756 11, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FC,
12757 11, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FD,
12758 11, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FF,
12759 9, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FB,
12760 9, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FC,
12761 9, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FD,
12762 9, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FF,
12763 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB,
12764 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC,
12765 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD,
12766 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE,
12767 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF,
12768 11, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FB,
12769 11, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FC,
12770 11, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FD,
12771 11, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FE,
12772 9, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FB,
12773 9, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FC,
12774 9, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FD,
12775 9, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FE,
12776 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB,
12777 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC,
12778 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD,
12779 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE,
12780 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF,
12781 6, 0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FC,
12782 6, 0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FD,
12783 6, 0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FE,
12784 6, 0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FF,
12785 6, 0x1FAF1, 0x1F3FC, 0x200D, 0x1FAF2, 0x1F3FB,
12786 6, 0x1FAF1, 0x1F3FC, 0x200D, 0x1FAF2, 0x1F3FD,
12787 6, 0x1FAF1, 0x1F3FC, 0x200D, 0x1FAF2, 0x1F3FE,
12788 6, 0x1FAF1, 0x1F3FC, 0x200D, 0x1FAF2, 0x1F3FF,
12789 6, 0x1FAF1, 0x1F3FD, 0x200D, 0x1FAF2, 0x1F3FB,
12790 6, 0x1FAF1, 0x1F3FD, 0x200D, 0x1FAF2, 0x1F3FC,
12791 6, 0x1FAF1, 0x1F3FD, 0x200D, 0x1FAF2, 0x1F3FE,
12792 6, 0x1FAF1, 0x1F3FD, 0x200D, 0x1FAF2, 0x1F3FF,
12793 6, 0x1FAF1, 0x1F3FE, 0x200D, 0x1FAF2, 0x1F3FB,
12794 6, 0x1FAF1, 0x1F3FE, 0x200D, 0x1FAF2, 0x1F3FC,
12795 6, 0x1FAF1, 0x1F3FE, 0x200D, 0x1FAF2, 0x1F3FD,
12796 6, 0x1FAF1, 0x1F3FE, 0x200D, 0x1FAF2, 0x1F3FF,
12797 6, 0x1FAF1, 0x1F3FF, 0x200D, 0x1FAF2, 0x1F3FB,
12798 6, 0x1FAF1, 0x1F3FF, 0x200D, 0x1FAF2, 0x1F3FC,
12799 6, 0x1FAF1, 0x1F3FF, 0x200D, 0x1FAF2, 0x1F3FD,
12800 6, 0x1FAF1, 0x1F3FF, 0x200D, 0x1FAF2, 0x1F3FE,
12801 5, 0x1F3C3, 0x200D, 0x27A1, 0xFE0F,
12802 6, 0x1F3C3, 0x1F3FB, 0x200D, 0x27A1, 0xFE0F,
12803 6, 0x1F3C3, 0x1F3FC, 0x200D, 0x27A1, 0xFE0F,
12804 6, 0x1F3C3, 0x1F3FD, 0x200D, 0x27A1, 0xFE0F,
12805 6, 0x1F3C3, 0x1F3FE, 0x200D, 0x27A1, 0xFE0F,
12806 6, 0x1F3C3, 0x1F3FF, 0x200D, 0x27A1, 0xFE0F,
12807 5, 0x1F468, 0x200D, 0x2695, 0xFE0F,
12808 5, 0x1F468, 0x200D, 0x2696, 0xFE0F,
12809 5, 0x1F468, 0x200D, 0x2708, 0xFE0F,
12810 4, 0x1F468, 0x200D, 0x1F33E,
12811 4, 0x1F468, 0x200D, 0x1F373,
12812 4, 0x1F468, 0x200D, 0x1F37C,
12813 4, 0x1F468, 0x200D, 0x1F393,
12814 4, 0x1F468, 0x200D, 0x1F3A4,
12815 4, 0x1F468, 0x200D, 0x1F3A8,
12816 4, 0x1F468, 0x200D, 0x1F3EB,
12817 4, 0x1F468, 0x200D, 0x1F3ED,
12818 4, 0x1F468, 0x200D, 0x1F4BB,
12819 4, 0x1F468, 0x200D, 0x1F4BC,
12820 4, 0x1F468, 0x200D, 0x1F527,
12821 4, 0x1F468, 0x200D, 0x1F52C,
12822 4, 0x1F468, 0x200D, 0x1F680,
12823 4, 0x1F468, 0x200D, 0x1F692,
12824 4, 0x1F468, 0x200D, 0x1F9AF,
12825 7, 0x1F468, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
12826 4, 0x1F468, 0x200D, 0x1F9BC,
12827 7, 0x1F468, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
12828 4, 0x1F468, 0x200D, 0x1F9BD,
12829 7, 0x1F468, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
12830 6, 0x1F468, 0x1F3FB, 0x200D, 0x2695, 0xFE0F,
12831 6, 0x1F468, 0x1F3FB, 0x200D, 0x2696, 0xFE0F,
12832 6, 0x1F468, 0x1F3FB, 0x200D, 0x2708, 0xFE0F,
12833 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F33E,
12834 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F373,
12835 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F37C,
12836 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F393,
12837 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F3A4,
12838 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F3A8,
12839 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F3EB,
12840 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F3ED,
12841 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F4BB,
12842 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F4BC,
12843 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F527,
12844 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F52C,
12845 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F680,
12846 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F692,
12847 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9AF,
12848 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
12849 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9BC,
12850 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
12851 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9BD,
12852 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
12853 6, 0x1F468, 0x1F3FC, 0x200D, 0x2695, 0xFE0F,
12854 6, 0x1F468, 0x1F3FC, 0x200D, 0x2696, 0xFE0F,
12855 6, 0x1F468, 0x1F3FC, 0x200D, 0x2708, 0xFE0F,
12856 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F33E,
12857 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F373,
12858 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F37C,
12859 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F393,
12860 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F3A4,
12861 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F3A8,
12862 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F3EB,
12863 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F3ED,
12864 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F4BB,
12865 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F4BC,
12866 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F527,
12867 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F52C,
12868 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F680,
12869 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F692,
12870 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9AF,
12871 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
12872 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9BC,
12873 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
12874 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9BD,
12875 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
12876 6, 0x1F468, 0x1F3FD, 0x200D, 0x2695, 0xFE0F,
12877 6, 0x1F468, 0x1F3FD, 0x200D, 0x2696, 0xFE0F,
12878 6, 0x1F468, 0x1F3FD, 0x200D, 0x2708, 0xFE0F,
12879 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F33E,
12880 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F373,
12881 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F37C,
12882 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F393,
12883 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F3A4,
12884 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F3A8,
12885 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F3EB,
12886 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F3ED,
12887 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F4BB,
12888 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F4BC,
12889 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F527,
12890 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F52C,
12891 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F680,
12892 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F692,
12893 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9AF,
12894 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
12895 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9BC,
12896 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
12897 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9BD,
12898 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
12899 6, 0x1F468, 0x1F3FE, 0x200D, 0x2695, 0xFE0F,
12900 6, 0x1F468, 0x1F3FE, 0x200D, 0x2696, 0xFE0F,
12901 6, 0x1F468, 0x1F3FE, 0x200D, 0x2708, 0xFE0F,
12902 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F33E,
12903 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F373,
12904 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F37C,
12905 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F393,
12906 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F3A4,
12907 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F3A8,
12908 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F3EB,
12909 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F3ED,
12910 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F4BB,
12911 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F4BC,
12912 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F527,
12913 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F52C,
12914 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F680,
12915 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F692,
12916 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9AF,
12917 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
12918 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9BC,
12919 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
12920 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9BD,
12921 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
12922 6, 0x1F468, 0x1F3FF, 0x200D, 0x2695, 0xFE0F,
12923 6, 0x1F468, 0x1F3FF, 0x200D, 0x2696, 0xFE0F,
12924 6, 0x1F468, 0x1F3FF, 0x200D, 0x2708, 0xFE0F,
12925 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F33E,
12926 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F373,
12927 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F37C,
12928 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F393,
12929 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F3A4,
12930 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F3A8,
12931 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F3EB,
12932 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F3ED,
12933 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F4BB,
12934 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F4BC,
12935 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F527,
12936 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F52C,
12937 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F680,
12938 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F692,
12939 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9AF,
12940 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
12941 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9BC,
12942 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
12943 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9BD,
12944 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
12945 5, 0x1F469, 0x200D, 0x2695, 0xFE0F,
12946 5, 0x1F469, 0x200D, 0x2696, 0xFE0F,
12947 5, 0x1F469, 0x200D, 0x2708, 0xFE0F,
12948 4, 0x1F469, 0x200D, 0x1F33E,
12949 4, 0x1F469, 0x200D, 0x1F373,
12950 4, 0x1F469, 0x200D, 0x1F37C,
12951 4, 0x1F469, 0x200D, 0x1F393,
12952 4, 0x1F469, 0x200D, 0x1F3A4,
12953 4, 0x1F469, 0x200D, 0x1F3A8,
12954 4, 0x1F469, 0x200D, 0x1F3EB,
12955 4, 0x1F469, 0x200D, 0x1F3ED,
12956 4, 0x1F469, 0x200D, 0x1F4BB,
12957 4, 0x1F469, 0x200D, 0x1F4BC,
12958 4, 0x1F469, 0x200D, 0x1F527,
12959 4, 0x1F469, 0x200D, 0x1F52C,
12960 4, 0x1F469, 0x200D, 0x1F680,
12961 4, 0x1F469, 0x200D, 0x1F692,
12962 4, 0x1F469, 0x200D, 0x1F9AF,
12963 7, 0x1F469, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
12964 4, 0x1F469, 0x200D, 0x1F9BC,
12965 7, 0x1F469, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
12966 4, 0x1F469, 0x200D, 0x1F9BD,
12967 7, 0x1F469, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
12968 6, 0x1F469, 0x1F3FB, 0x200D, 0x2695, 0xFE0F,
12969 6, 0x1F469, 0x1F3FB, 0x200D, 0x2696, 0xFE0F,
12970 6, 0x1F469, 0x1F3FB, 0x200D, 0x2708, 0xFE0F,
12971 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F33E,
12972 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F373,
12973 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F37C,
12974 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F393,
12975 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F3A4,
12976 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F3A8,
12977 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F3EB,
12978 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F3ED,
12979 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F4BB,
12980 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F4BC,
12981 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F527,
12982 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F52C,
12983 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F680,
12984 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F692,
12985 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9AF,
12986 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
12987 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9BC,
12988 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
12989 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9BD,
12990 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
12991 6, 0x1F469, 0x1F3FC, 0x200D, 0x2695, 0xFE0F,
12992 6, 0x1F469, 0x1F3FC, 0x200D, 0x2696, 0xFE0F,
12993 6, 0x1F469, 0x1F3FC, 0x200D, 0x2708, 0xFE0F,
12994 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F33E,
12995 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F373,
12996 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F37C,
12997 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F393,
12998 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F3A4,
12999 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F3A8,
13000 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F3EB,
13001 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F3ED,
13002 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F4BB,
13003 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F4BC,
13004 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F527,
13005 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F52C,
13006 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F680,
13007 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F692,
13008 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9AF,
13009 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13010 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9BC,
13011 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13012 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9BD,
13013 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13014 6, 0x1F469, 0x1F3FD, 0x200D, 0x2695, 0xFE0F,
13015 6, 0x1F469, 0x1F3FD, 0x200D, 0x2696, 0xFE0F,
13016 6, 0x1F469, 0x1F3FD, 0x200D, 0x2708, 0xFE0F,
13017 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F33E,
13018 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F373,
13019 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F37C,
13020 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F393,
13021 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F3A4,
13022 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F3A8,
13023 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F3EB,
13024 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F3ED,
13025 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F4BB,
13026 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F4BC,
13027 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F527,
13028 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F52C,
13029 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F680,
13030 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F692,
13031 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9AF,
13032 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13033 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9BC,
13034 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13035 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9BD,
13036 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13037 6, 0x1F469, 0x1F3FE, 0x200D, 0x2695, 0xFE0F,
13038 6, 0x1F469, 0x1F3FE, 0x200D, 0x2696, 0xFE0F,
13039 6, 0x1F469, 0x1F3FE, 0x200D, 0x2708, 0xFE0F,
13040 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F33E,
13041 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F373,
13042 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F37C,
13043 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F393,
13044 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F3A4,
13045 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F3A8,
13046 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F3EB,
13047 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F3ED,
13048 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F4BB,
13049 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F4BC,
13050 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F527,
13051 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F52C,
13052 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F680,
13053 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F692,
13054 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9AF,
13055 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13056 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9BC,
13057 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13058 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9BD,
13059 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13060 6, 0x1F469, 0x1F3FF, 0x200D, 0x2695, 0xFE0F,
13061 6, 0x1F469, 0x1F3FF, 0x200D, 0x2696, 0xFE0F,
13062 6, 0x1F469, 0x1F3FF, 0x200D, 0x2708, 0xFE0F,
13063 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F33E,
13064 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F373,
13065 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F37C,
13066 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F393,
13067 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F3A4,
13068 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F3A8,
13069 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F3EB,
13070 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F3ED,
13071 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F4BB,
13072 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F4BC,
13073 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F527,
13074 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F52C,
13075 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F680,
13076 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F692,
13077 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9AF,
13078 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13079 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9BC,
13080 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13081 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9BD,
13082 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13083 5, 0x1F6B6, 0x200D, 0x27A1, 0xFE0F,
13084 6, 0x1F6B6, 0x1F3FB, 0x200D, 0x27A1, 0xFE0F,
13085 6, 0x1F6B6, 0x1F3FC, 0x200D, 0x27A1, 0xFE0F,
13086 6, 0x1F6B6, 0x1F3FD, 0x200D, 0x27A1, 0xFE0F,
13087 6, 0x1F6B6, 0x1F3FE, 0x200D, 0x27A1, 0xFE0F,
13088 6, 0x1F6B6, 0x1F3FF, 0x200D, 0x27A1, 0xFE0F,
13089 5, 0x1F9CE, 0x200D, 0x27A1, 0xFE0F,
13090 6, 0x1F9CE, 0x1F3FB, 0x200D, 0x27A1, 0xFE0F,
13091 6, 0x1F9CE, 0x1F3FC, 0x200D, 0x27A1, 0xFE0F,
13092 6, 0x1F9CE, 0x1F3FD, 0x200D, 0x27A1, 0xFE0F,
13093 6, 0x1F9CE, 0x1F3FE, 0x200D, 0x27A1, 0xFE0F,
13094 6, 0x1F9CE, 0x1F3FF, 0x200D, 0x27A1, 0xFE0F,
13095 5, 0x1F9D1, 0x200D, 0x2695, 0xFE0F,
13096 5, 0x1F9D1, 0x200D, 0x2696, 0xFE0F,
13097 5, 0x1F9D1, 0x200D, 0x2708, 0xFE0F,
13098 4, 0x1F9D1, 0x200D, 0x1F33E,
13099 4, 0x1F9D1, 0x200D, 0x1F373,
13100 4, 0x1F9D1, 0x200D, 0x1F37C,
13101 4, 0x1F9D1, 0x200D, 0x1F384,
13102 4, 0x1F9D1, 0x200D, 0x1F393,
13103 4, 0x1F9D1, 0x200D, 0x1F3A4,
13104 4, 0x1F9D1, 0x200D, 0x1F3A8,
13105 4, 0x1F9D1, 0x200D, 0x1F3EB,
13106 4, 0x1F9D1, 0x200D, 0x1F3ED,
13107 4, 0x1F9D1, 0x200D, 0x1F4BB,
13108 4, 0x1F9D1, 0x200D, 0x1F4BC,
13109 4, 0x1F9D1, 0x200D, 0x1F527,
13110 4, 0x1F9D1, 0x200D, 0x1F52C,
13111 4, 0x1F9D1, 0x200D, 0x1F680,
13112 4, 0x1F9D1, 0x200D, 0x1F692,
13113 4, 0x1F9D1, 0x200D, 0x1F9AF,
13114 7, 0x1F9D1, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13115 4, 0x1F9D1, 0x200D, 0x1F9BC,
13116 7, 0x1F9D1, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13117 4, 0x1F9D1, 0x200D, 0x1F9BD,
13118 7, 0x1F9D1, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13119 6, 0x1F9D1, 0x1F3FB, 0x200D, 0x2695, 0xFE0F,
13120 6, 0x1F9D1, 0x1F3FB, 0x200D, 0x2696, 0xFE0F,
13121 6, 0x1F9D1, 0x1F3FB, 0x200D, 0x2708, 0xFE0F,
13122 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F33E,
13123 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F373,
13124 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F37C,
13125 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F384,
13126 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F393,
13127 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F3A4,
13128 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F3A8,
13129 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F3EB,
13130 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F3ED,
13131 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F4BB,
13132 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F4BC,
13133 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F527,
13134 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F52C,
13135 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F680,
13136 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F692,
13137 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9AF,
13138 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13139 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9BC,
13140 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13141 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9BD,
13142 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13143 6, 0x1F9D1, 0x1F3FC, 0x200D, 0x2695, 0xFE0F,
13144 6, 0x1F9D1, 0x1F3FC, 0x200D, 0x2696, 0xFE0F,
13145 6, 0x1F9D1, 0x1F3FC, 0x200D, 0x2708, 0xFE0F,
13146 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F33E,
13147 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F373,
13148 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F37C,
13149 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F384,
13150 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F393,
13151 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F3A4,
13152 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F3A8,
13153 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F3EB,
13154 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F3ED,
13155 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F4BB,
13156 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F4BC,
13157 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F527,
13158 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F52C,
13159 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F680,
13160 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F692,
13161 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9AF,
13162 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13163 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9BC,
13164 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13165 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9BD,
13166 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13167 6, 0x1F9D1, 0x1F3FD, 0x200D, 0x2695, 0xFE0F,
13168 6, 0x1F9D1, 0x1F3FD, 0x200D, 0x2696, 0xFE0F,
13169 6, 0x1F9D1, 0x1F3FD, 0x200D, 0x2708, 0xFE0F,
13170 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F33E,
13171 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F373,
13172 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F37C,
13173 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F384,
13174 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F393,
13175 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F3A4,
13176 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F3A8,
13177 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F3EB,
13178 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F3ED,
13179 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F4BB,
13180 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F4BC,
13181 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F527,
13182 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F52C,
13183 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F680,
13184 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F692,
13185 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9AF,
13186 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13187 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9BC,
13188 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13189 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9BD,
13190 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13191 6, 0x1F9D1, 0x1F3FE, 0x200D, 0x2695, 0xFE0F,
13192 6, 0x1F9D1, 0x1F3FE, 0x200D, 0x2696, 0xFE0F,
13193 6, 0x1F9D1, 0x1F3FE, 0x200D, 0x2708, 0xFE0F,
13194 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F33E,
13195 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F373,
13196 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F37C,
13197 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F384,
13198 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F393,
13199 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F3A4,
13200 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F3A8,
13201 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F3EB,
13202 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F3ED,
13203 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F4BB,
13204 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F4BC,
13205 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F527,
13206 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F52C,
13207 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F680,
13208 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F692,
13209 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9AF,
13210 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13211 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9BC,
13212 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13213 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9BD,
13214 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13215 6, 0x1F9D1, 0x1F3FF, 0x200D, 0x2695, 0xFE0F,
13216 6, 0x1F9D1, 0x1F3FF, 0x200D, 0x2696, 0xFE0F,
13217 6, 0x1F9D1, 0x1F3FF, 0x200D, 0x2708, 0xFE0F,
13218 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F33E,
13219 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F373,
13220 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F37C,
13221 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F384,
13222 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F393,
13223 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F3A4,
13224 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F3A8,
13225 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F3EB,
13226 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F3ED,
13227 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F4BB,
13228 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F4BC,
13229 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F527,
13230 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F52C,
13231 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F680,
13232 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F692,
13233 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9AF,
13234 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9AF, 0x200D, 0x27A1, 0xFE0F,
13235 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9BC,
13236 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9BC, 0x200D, 0x27A1, 0xFE0F,
13237 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9BD,
13238 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9BD, 0x200D, 0x27A1, 0xFE0F,
13239 6, 0x26F9, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13240 6, 0x26F9, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13241 6, 0x26F9, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13242 6, 0x26F9, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13243 6, 0x26F9, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13244 6, 0x26F9, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13245 6, 0x26F9, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13246 6, 0x26F9, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13247 6, 0x26F9, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13248 6, 0x26F9, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13249 6, 0x26F9, 0xFE0F, 0x200D, 0x2640, 0xFE0F,
13250 6, 0x26F9, 0xFE0F, 0x200D, 0x2642, 0xFE0F,
13251 5, 0x1F3C3, 0x200D, 0x2640, 0xFE0F,
13252 8, 0x1F3C3, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13253 5, 0x1F3C3, 0x200D, 0x2642, 0xFE0F,
13254 8, 0x1F3C3, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13255 6, 0x1F3C3, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13256 9, 0x1F3C3, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13257 6, 0x1F3C3, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13258 9, 0x1F3C3, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13259 6, 0x1F3C3, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13260 9, 0x1F3C3, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13261 6, 0x1F3C3, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13262 9, 0x1F3C3, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13263 6, 0x1F3C3, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13264 9, 0x1F3C3, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13265 6, 0x1F3C3, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13266 9, 0x1F3C3, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13267 6, 0x1F3C3, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13268 9, 0x1F3C3, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13269 6, 0x1F3C3, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13270 9, 0x1F3C3, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13271 6, 0x1F3C3, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13272 9, 0x1F3C3, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13273 6, 0x1F3C3, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13274 9, 0x1F3C3, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13275 5, 0x1F3C4, 0x200D, 0x2640, 0xFE0F,
13276 5, 0x1F3C4, 0x200D, 0x2642, 0xFE0F,
13277 6, 0x1F3C4, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13278 6, 0x1F3C4, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13279 6, 0x1F3C4, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13280 6, 0x1F3C4, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13281 6, 0x1F3C4, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13282 6, 0x1F3C4, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13283 6, 0x1F3C4, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13284 6, 0x1F3C4, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13285 6, 0x1F3C4, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13286 6, 0x1F3C4, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13287 5, 0x1F3CA, 0x200D, 0x2640, 0xFE0F,
13288 5, 0x1F3CA, 0x200D, 0x2642, 0xFE0F,
13289 6, 0x1F3CA, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13290 6, 0x1F3CA, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13291 6, 0x1F3CA, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13292 6, 0x1F3CA, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13293 6, 0x1F3CA, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13294 6, 0x1F3CA, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13295 6, 0x1F3CA, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13296 6, 0x1F3CA, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13297 6, 0x1F3CA, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13298 6, 0x1F3CA, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13299 6, 0x1F3CB, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13300 6, 0x1F3CB, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13301 6, 0x1F3CB, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13302 6, 0x1F3CB, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13303 6, 0x1F3CB, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13304 6, 0x1F3CB, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13305 6, 0x1F3CB, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13306 6, 0x1F3CB, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13307 6, 0x1F3CB, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13308 6, 0x1F3CB, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13309 6, 0x1F3CB, 0xFE0F, 0x200D, 0x2640, 0xFE0F,
13310 6, 0x1F3CB, 0xFE0F, 0x200D, 0x2642, 0xFE0F,
13311 6, 0x1F3CC, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13312 6, 0x1F3CC, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13313 6, 0x1F3CC, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13314 6, 0x1F3CC, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13315 6, 0x1F3CC, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13316 6, 0x1F3CC, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13317 6, 0x1F3CC, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13318 6, 0x1F3CC, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13319 6, 0x1F3CC, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13320 6, 0x1F3CC, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13321 6, 0x1F3CC, 0xFE0F, 0x200D, 0x2640, 0xFE0F,
13322 6, 0x1F3CC, 0xFE0F, 0x200D, 0x2642, 0xFE0F,
13323 5, 0x1F46E, 0x200D, 0x2640, 0xFE0F,
13324 5, 0x1F46E, 0x200D, 0x2642, 0xFE0F,
13325 6, 0x1F46E, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13326 6, 0x1F46E, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13327 6, 0x1F46E, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13328 6, 0x1F46E, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13329 6, 0x1F46E, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13330 6, 0x1F46E, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13331 6, 0x1F46E, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13332 6, 0x1F46E, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13333 6, 0x1F46E, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13334 6, 0x1F46E, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13335 5, 0x1F46F, 0x200D, 0x2640, 0xFE0F,
13336 5, 0x1F46F, 0x200D, 0x2642, 0xFE0F,
13337 5, 0x1F470, 0x200D, 0x2640, 0xFE0F,
13338 5, 0x1F470, 0x200D, 0x2642, 0xFE0F,
13339 6, 0x1F470, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13340 6, 0x1F470, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13341 6, 0x1F470, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13342 6, 0x1F470, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13343 6, 0x1F470, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13344 6, 0x1F470, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13345 6, 0x1F470, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13346 6, 0x1F470, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13347 6, 0x1F470, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13348 6, 0x1F470, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13349 5, 0x1F471, 0x200D, 0x2640, 0xFE0F,
13350 5, 0x1F471, 0x200D, 0x2642, 0xFE0F,
13351 6, 0x1F471, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13352 6, 0x1F471, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13353 6, 0x1F471, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13354 6, 0x1F471, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13355 6, 0x1F471, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13356 6, 0x1F471, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13357 6, 0x1F471, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13358 6, 0x1F471, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13359 6, 0x1F471, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13360 6, 0x1F471, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13361 5, 0x1F473, 0x200D, 0x2640, 0xFE0F,
13362 5, 0x1F473, 0x200D, 0x2642, 0xFE0F,
13363 6, 0x1F473, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13364 6, 0x1F473, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13365 6, 0x1F473, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13366 6, 0x1F473, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13367 6, 0x1F473, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13368 6, 0x1F473, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13369 6, 0x1F473, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13370 6, 0x1F473, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13371 6, 0x1F473, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13372 6, 0x1F473, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13373 5, 0x1F477, 0x200D, 0x2640, 0xFE0F,
13374 5, 0x1F477, 0x200D, 0x2642, 0xFE0F,
13375 6, 0x1F477, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13376 6, 0x1F477, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13377 6, 0x1F477, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13378 6, 0x1F477, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13379 6, 0x1F477, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13380 6, 0x1F477, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13381 6, 0x1F477, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13382 6, 0x1F477, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13383 6, 0x1F477, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13384 6, 0x1F477, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13385 5, 0x1F481, 0x200D, 0x2640, 0xFE0F,
13386 5, 0x1F481, 0x200D, 0x2642, 0xFE0F,
13387 6, 0x1F481, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13388 6, 0x1F481, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13389 6, 0x1F481, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13390 6, 0x1F481, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13391 6, 0x1F481, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13392 6, 0x1F481, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13393 6, 0x1F481, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13394 6, 0x1F481, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13395 6, 0x1F481, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13396 6, 0x1F481, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13397 5, 0x1F482, 0x200D, 0x2640, 0xFE0F,
13398 5, 0x1F482, 0x200D, 0x2642, 0xFE0F,
13399 6, 0x1F482, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13400 6, 0x1F482, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13401 6, 0x1F482, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13402 6, 0x1F482, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13403 6, 0x1F482, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13404 6, 0x1F482, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13405 6, 0x1F482, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13406 6, 0x1F482, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13407 6, 0x1F482, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13408 6, 0x1F482, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13409 5, 0x1F486, 0x200D, 0x2640, 0xFE0F,
13410 5, 0x1F486, 0x200D, 0x2642, 0xFE0F,
13411 6, 0x1F486, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13412 6, 0x1F486, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13413 6, 0x1F486, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13414 6, 0x1F486, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13415 6, 0x1F486, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13416 6, 0x1F486, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13417 6, 0x1F486, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13418 6, 0x1F486, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13419 6, 0x1F486, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13420 6, 0x1F486, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13421 5, 0x1F487, 0x200D, 0x2640, 0xFE0F,
13422 5, 0x1F487, 0x200D, 0x2642, 0xFE0F,
13423 6, 0x1F487, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13424 6, 0x1F487, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13425 6, 0x1F487, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13426 6, 0x1F487, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13427 6, 0x1F487, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13428 6, 0x1F487, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13429 6, 0x1F487, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13430 6, 0x1F487, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13431 6, 0x1F487, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13432 6, 0x1F487, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13433 6, 0x1F575, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13434 6, 0x1F575, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13435 6, 0x1F575, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13436 6, 0x1F575, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13437 6, 0x1F575, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13438 6, 0x1F575, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13439 6, 0x1F575, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13440 6, 0x1F575, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13441 6, 0x1F575, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13442 6, 0x1F575, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13443 6, 0x1F575, 0xFE0F, 0x200D, 0x2640, 0xFE0F,
13444 6, 0x1F575, 0xFE0F, 0x200D, 0x2642, 0xFE0F,
13445 5, 0x1F645, 0x200D, 0x2640, 0xFE0F,
13446 5, 0x1F645, 0x200D, 0x2642, 0xFE0F,
13447 6, 0x1F645, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13448 6, 0x1F645, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13449 6, 0x1F645, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13450 6, 0x1F645, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13451 6, 0x1F645, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13452 6, 0x1F645, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13453 6, 0x1F645, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13454 6, 0x1F645, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13455 6, 0x1F645, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13456 6, 0x1F645, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13457 5, 0x1F646, 0x200D, 0x2640, 0xFE0F,
13458 5, 0x1F646, 0x200D, 0x2642, 0xFE0F,
13459 6, 0x1F646, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13460 6, 0x1F646, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13461 6, 0x1F646, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13462 6, 0x1F646, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13463 6, 0x1F646, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13464 6, 0x1F646, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13465 6, 0x1F646, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13466 6, 0x1F646, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13467 6, 0x1F646, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13468 6, 0x1F646, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13469 5, 0x1F647, 0x200D, 0x2640, 0xFE0F,
13470 5, 0x1F647, 0x200D, 0x2642, 0xFE0F,
13471 6, 0x1F647, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13472 6, 0x1F647, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13473 6, 0x1F647, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13474 6, 0x1F647, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13475 6, 0x1F647, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13476 6, 0x1F647, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13477 6, 0x1F647, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13478 6, 0x1F647, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13479 6, 0x1F647, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13480 6, 0x1F647, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13481 5, 0x1F64B, 0x200D, 0x2640, 0xFE0F,
13482 5, 0x1F64B, 0x200D, 0x2642, 0xFE0F,
13483 6, 0x1F64B, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13484 6, 0x1F64B, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13485 6, 0x1F64B, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13486 6, 0x1F64B, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13487 6, 0x1F64B, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13488 6, 0x1F64B, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13489 6, 0x1F64B, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13490 6, 0x1F64B, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13491 6, 0x1F64B, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13492 6, 0x1F64B, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13493 5, 0x1F64D, 0x200D, 0x2640, 0xFE0F,
13494 5, 0x1F64D, 0x200D, 0x2642, 0xFE0F,
13495 6, 0x1F64D, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13496 6, 0x1F64D, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13497 6, 0x1F64D, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13498 6, 0x1F64D, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13499 6, 0x1F64D, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13500 6, 0x1F64D, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13501 6, 0x1F64D, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13502 6, 0x1F64D, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13503 6, 0x1F64D, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13504 6, 0x1F64D, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13505 5, 0x1F64E, 0x200D, 0x2640, 0xFE0F,
13506 5, 0x1F64E, 0x200D, 0x2642, 0xFE0F,
13507 6, 0x1F64E, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13508 6, 0x1F64E, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13509 6, 0x1F64E, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13510 6, 0x1F64E, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13511 6, 0x1F64E, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13512 6, 0x1F64E, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13513 6, 0x1F64E, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13514 6, 0x1F64E, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13515 6, 0x1F64E, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13516 6, 0x1F64E, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13517 5, 0x1F6A3, 0x200D, 0x2640, 0xFE0F,
13518 5, 0x1F6A3, 0x200D, 0x2642, 0xFE0F,
13519 6, 0x1F6A3, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13520 6, 0x1F6A3, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13521 6, 0x1F6A3, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13522 6, 0x1F6A3, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13523 6, 0x1F6A3, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13524 6, 0x1F6A3, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13525 6, 0x1F6A3, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13526 6, 0x1F6A3, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13527 6, 0x1F6A3, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13528 6, 0x1F6A3, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13529 5, 0x1F6B4, 0x200D, 0x2640, 0xFE0F,
13530 5, 0x1F6B4, 0x200D, 0x2642, 0xFE0F,
13531 6, 0x1F6B4, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13532 6, 0x1F6B4, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13533 6, 0x1F6B4, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13534 6, 0x1F6B4, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13535 6, 0x1F6B4, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13536 6, 0x1F6B4, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13537 6, 0x1F6B4, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13538 6, 0x1F6B4, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13539 6, 0x1F6B4, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13540 6, 0x1F6B4, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13541 5, 0x1F6B5, 0x200D, 0x2640, 0xFE0F,
13542 5, 0x1F6B5, 0x200D, 0x2642, 0xFE0F,
13543 6, 0x1F6B5, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13544 6, 0x1F6B5, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13545 6, 0x1F6B5, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13546 6, 0x1F6B5, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13547 6, 0x1F6B5, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13548 6, 0x1F6B5, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13549 6, 0x1F6B5, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13550 6, 0x1F6B5, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13551 6, 0x1F6B5, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13552 6, 0x1F6B5, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13553 5, 0x1F6B6, 0x200D, 0x2640, 0xFE0F,
13554 8, 0x1F6B6, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13555 5, 0x1F6B6, 0x200D, 0x2642, 0xFE0F,
13556 8, 0x1F6B6, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13557 6, 0x1F6B6, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13558 9, 0x1F6B6, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13559 6, 0x1F6B6, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13560 9, 0x1F6B6, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13561 6, 0x1F6B6, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13562 9, 0x1F6B6, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13563 6, 0x1F6B6, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13564 9, 0x1F6B6, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13565 6, 0x1F6B6, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13566 9, 0x1F6B6, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13567 6, 0x1F6B6, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13568 9, 0x1F6B6, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13569 6, 0x1F6B6, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13570 9, 0x1F6B6, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13571 6, 0x1F6B6, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13572 9, 0x1F6B6, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13573 6, 0x1F6B6, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13574 9, 0x1F6B6, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13575 6, 0x1F6B6, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13576 9, 0x1F6B6, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13577 5, 0x1F926, 0x200D, 0x2640, 0xFE0F,
13578 5, 0x1F926, 0x200D, 0x2642, 0xFE0F,
13579 6, 0x1F926, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13580 6, 0x1F926, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13581 6, 0x1F926, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13582 6, 0x1F926, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13583 6, 0x1F926, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13584 6, 0x1F926, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13585 6, 0x1F926, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13586 6, 0x1F926, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13587 6, 0x1F926, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13588 6, 0x1F926, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13589 5, 0x1F935, 0x200D, 0x2640, 0xFE0F,
13590 5, 0x1F935, 0x200D, 0x2642, 0xFE0F,
13591 6, 0x1F935, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13592 6, 0x1F935, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13593 6, 0x1F935, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13594 6, 0x1F935, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13595 6, 0x1F935, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13596 6, 0x1F935, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13597 6, 0x1F935, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13598 6, 0x1F935, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13599 6, 0x1F935, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13600 6, 0x1F935, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13601 5, 0x1F937, 0x200D, 0x2640, 0xFE0F,
13602 5, 0x1F937, 0x200D, 0x2642, 0xFE0F,
13603 6, 0x1F937, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13604 6, 0x1F937, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13605 6, 0x1F937, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13606 6, 0x1F937, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13607 6, 0x1F937, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13608 6, 0x1F937, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13609 6, 0x1F937, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13610 6, 0x1F937, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13611 6, 0x1F937, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13612 6, 0x1F937, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13613 5, 0x1F938, 0x200D, 0x2640, 0xFE0F,
13614 5, 0x1F938, 0x200D, 0x2642, 0xFE0F,
13615 6, 0x1F938, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13616 6, 0x1F938, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13617 6, 0x1F938, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13618 6, 0x1F938, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13619 6, 0x1F938, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13620 6, 0x1F938, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13621 6, 0x1F938, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13622 6, 0x1F938, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13623 6, 0x1F938, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13624 6, 0x1F938, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13625 5, 0x1F939, 0x200D, 0x2640, 0xFE0F,
13626 5, 0x1F939, 0x200D, 0x2642, 0xFE0F,
13627 6, 0x1F939, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13628 6, 0x1F939, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13629 6, 0x1F939, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13630 6, 0x1F939, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13631 6, 0x1F939, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13632 6, 0x1F939, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13633 6, 0x1F939, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13634 6, 0x1F939, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13635 6, 0x1F939, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13636 6, 0x1F939, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13637 5, 0x1F93C, 0x200D, 0x2640, 0xFE0F,
13638 5, 0x1F93C, 0x200D, 0x2642, 0xFE0F,
13639 5, 0x1F93D, 0x200D, 0x2640, 0xFE0F,
13640 5, 0x1F93D, 0x200D, 0x2642, 0xFE0F,
13641 6, 0x1F93D, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13642 6, 0x1F93D, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13643 6, 0x1F93D, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13644 6, 0x1F93D, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13645 6, 0x1F93D, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13646 6, 0x1F93D, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13647 6, 0x1F93D, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13648 6, 0x1F93D, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13649 6, 0x1F93D, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13650 6, 0x1F93D, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13651 5, 0x1F93E, 0x200D, 0x2640, 0xFE0F,
13652 5, 0x1F93E, 0x200D, 0x2642, 0xFE0F,
13653 6, 0x1F93E, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13654 6, 0x1F93E, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13655 6, 0x1F93E, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13656 6, 0x1F93E, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13657 6, 0x1F93E, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13658 6, 0x1F93E, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13659 6, 0x1F93E, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13660 6, 0x1F93E, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13661 6, 0x1F93E, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13662 6, 0x1F93E, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13663 5, 0x1F9B8, 0x200D, 0x2640, 0xFE0F,
13664 5, 0x1F9B8, 0x200D, 0x2642, 0xFE0F,
13665 6, 0x1F9B8, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13666 6, 0x1F9B8, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13667 6, 0x1F9B8, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13668 6, 0x1F9B8, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13669 6, 0x1F9B8, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13670 6, 0x1F9B8, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13671 6, 0x1F9B8, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13672 6, 0x1F9B8, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13673 6, 0x1F9B8, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13674 6, 0x1F9B8, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13675 5, 0x1F9B9, 0x200D, 0x2640, 0xFE0F,
13676 5, 0x1F9B9, 0x200D, 0x2642, 0xFE0F,
13677 6, 0x1F9B9, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13678 6, 0x1F9B9, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13679 6, 0x1F9B9, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13680 6, 0x1F9B9, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13681 6, 0x1F9B9, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13682 6, 0x1F9B9, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13683 6, 0x1F9B9, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13684 6, 0x1F9B9, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13685 6, 0x1F9B9, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13686 6, 0x1F9B9, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13687 5, 0x1F9CD, 0x200D, 0x2640, 0xFE0F,
13688 5, 0x1F9CD, 0x200D, 0x2642, 0xFE0F,
13689 6, 0x1F9CD, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13690 6, 0x1F9CD, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13691 6, 0x1F9CD, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13692 6, 0x1F9CD, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13693 6, 0x1F9CD, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13694 6, 0x1F9CD, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13695 6, 0x1F9CD, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13696 6, 0x1F9CD, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13697 6, 0x1F9CD, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13698 6, 0x1F9CD, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13699 5, 0x1F9CE, 0x200D, 0x2640, 0xFE0F,
13700 8, 0x1F9CE, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13701 5, 0x1F9CE, 0x200D, 0x2642, 0xFE0F,
13702 8, 0x1F9CE, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13703 6, 0x1F9CE, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13704 9, 0x1F9CE, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13705 6, 0x1F9CE, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13706 9, 0x1F9CE, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13707 6, 0x1F9CE, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13708 9, 0x1F9CE, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13709 6, 0x1F9CE, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13710 9, 0x1F9CE, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13711 6, 0x1F9CE, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13712 9, 0x1F9CE, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13713 6, 0x1F9CE, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13714 9, 0x1F9CE, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13715 6, 0x1F9CE, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13716 9, 0x1F9CE, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13717 6, 0x1F9CE, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13718 9, 0x1F9CE, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13719 6, 0x1F9CE, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13720 9, 0x1F9CE, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13721 6, 0x1F9CE, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13722 9, 0x1F9CE, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, 0x200D, 0x27A1, 0xFE0F,
13723 5, 0x1F9CF, 0x200D, 0x2640, 0xFE0F,
13724 5, 0x1F9CF, 0x200D, 0x2642, 0xFE0F,
13725 6, 0x1F9CF, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13726 6, 0x1F9CF, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13727 6, 0x1F9CF, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13728 6, 0x1F9CF, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13729 6, 0x1F9CF, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13730 6, 0x1F9CF, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13731 6, 0x1F9CF, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13732 6, 0x1F9CF, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13733 6, 0x1F9CF, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13734 6, 0x1F9CF, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13735 5, 0x1F9D4, 0x200D, 0x2640, 0xFE0F,
13736 5, 0x1F9D4, 0x200D, 0x2642, 0xFE0F,
13737 6, 0x1F9D4, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13738 6, 0x1F9D4, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13739 6, 0x1F9D4, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13740 6, 0x1F9D4, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13741 6, 0x1F9D4, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13742 6, 0x1F9D4, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13743 6, 0x1F9D4, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13744 6, 0x1F9D4, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13745 6, 0x1F9D4, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13746 6, 0x1F9D4, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13747 5, 0x1F9D6, 0x200D, 0x2640, 0xFE0F,
13748 5, 0x1F9D6, 0x200D, 0x2642, 0xFE0F,
13749 6, 0x1F9D6, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13750 6, 0x1F9D6, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13751 6, 0x1F9D6, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13752 6, 0x1F9D6, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13753 6, 0x1F9D6, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13754 6, 0x1F9D6, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13755 6, 0x1F9D6, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13756 6, 0x1F9D6, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13757 6, 0x1F9D6, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13758 6, 0x1F9D6, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13759 5, 0x1F9D7, 0x200D, 0x2640, 0xFE0F,
13760 5, 0x1F9D7, 0x200D, 0x2642, 0xFE0F,
13761 6, 0x1F9D7, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13762 6, 0x1F9D7, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13763 6, 0x1F9D7, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13764 6, 0x1F9D7, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13765 6, 0x1F9D7, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13766 6, 0x1F9D7, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13767 6, 0x1F9D7, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13768 6, 0x1F9D7, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13769 6, 0x1F9D7, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13770 6, 0x1F9D7, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13771 5, 0x1F9D8, 0x200D, 0x2640, 0xFE0F,
13772 5, 0x1F9D8, 0x200D, 0x2642, 0xFE0F,
13773 6, 0x1F9D8, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13774 6, 0x1F9D8, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13775 6, 0x1F9D8, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13776 6, 0x1F9D8, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13777 6, 0x1F9D8, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13778 6, 0x1F9D8, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13779 6, 0x1F9D8, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13780 6, 0x1F9D8, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13781 6, 0x1F9D8, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13782 6, 0x1F9D8, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13783 5, 0x1F9D9, 0x200D, 0x2640, 0xFE0F,
13784 5, 0x1F9D9, 0x200D, 0x2642, 0xFE0F,
13785 6, 0x1F9D9, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13786 6, 0x1F9D9, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13787 6, 0x1F9D9, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13788 6, 0x1F9D9, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13789 6, 0x1F9D9, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13790 6, 0x1F9D9, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13791 6, 0x1F9D9, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13792 6, 0x1F9D9, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13793 6, 0x1F9D9, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13794 6, 0x1F9D9, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13795 5, 0x1F9DA, 0x200D, 0x2640, 0xFE0F,
13796 5, 0x1F9DA, 0x200D, 0x2642, 0xFE0F,
13797 6, 0x1F9DA, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13798 6, 0x1F9DA, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13799 6, 0x1F9DA, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13800 6, 0x1F9DA, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13801 6, 0x1F9DA, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13802 6, 0x1F9DA, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13803 6, 0x1F9DA, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13804 6, 0x1F9DA, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13805 6, 0x1F9DA, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13806 6, 0x1F9DA, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13807 5, 0x1F9DB, 0x200D, 0x2640, 0xFE0F,
13808 5, 0x1F9DB, 0x200D, 0x2642, 0xFE0F,
13809 6, 0x1F9DB, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13810 6, 0x1F9DB, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13811 6, 0x1F9DB, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13812 6, 0x1F9DB, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13813 6, 0x1F9DB, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13814 6, 0x1F9DB, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13815 6, 0x1F9DB, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13816 6, 0x1F9DB, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13817 6, 0x1F9DB, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13818 6, 0x1F9DB, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13819 5, 0x1F9DC, 0x200D, 0x2640, 0xFE0F,
13820 5, 0x1F9DC, 0x200D, 0x2642, 0xFE0F,
13821 6, 0x1F9DC, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13822 6, 0x1F9DC, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13823 6, 0x1F9DC, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13824 6, 0x1F9DC, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13825 6, 0x1F9DC, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13826 6, 0x1F9DC, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13827 6, 0x1F9DC, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13828 6, 0x1F9DC, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13829 6, 0x1F9DC, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13830 6, 0x1F9DC, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13831 5, 0x1F9DD, 0x200D, 0x2640, 0xFE0F,
13832 5, 0x1F9DD, 0x200D, 0x2642, 0xFE0F,
13833 6, 0x1F9DD, 0x1F3FB, 0x200D, 0x2640, 0xFE0F,
13834 6, 0x1F9DD, 0x1F3FB, 0x200D, 0x2642, 0xFE0F,
13835 6, 0x1F9DD, 0x1F3FC, 0x200D, 0x2640, 0xFE0F,
13836 6, 0x1F9DD, 0x1F3FC, 0x200D, 0x2642, 0xFE0F,
13837 6, 0x1F9DD, 0x1F3FD, 0x200D, 0x2640, 0xFE0F,
13838 6, 0x1F9DD, 0x1F3FD, 0x200D, 0x2642, 0xFE0F,
13839 6, 0x1F9DD, 0x1F3FE, 0x200D, 0x2640, 0xFE0F,
13840 6, 0x1F9DD, 0x1F3FE, 0x200D, 0x2642, 0xFE0F,
13841 6, 0x1F9DD, 0x1F3FF, 0x200D, 0x2640, 0xFE0F,
13842 6, 0x1F9DD, 0x1F3FF, 0x200D, 0x2642, 0xFE0F,
13843 5, 0x1F9DE, 0x200D, 0x2640, 0xFE0F,
13844 5, 0x1F9DE, 0x200D, 0x2642, 0xFE0F,
13845 5, 0x1F9DF, 0x200D, 0x2640, 0xFE0F,
13846 5, 0x1F9DF, 0x200D, 0x2642, 0xFE0F,
13847 4, 0x1F468, 0x200D, 0x1F9B0,
13848 4, 0x1F468, 0x200D, 0x1F9B1,
13849 4, 0x1F468, 0x200D, 0x1F9B2,
13850 4, 0x1F468, 0x200D, 0x1F9B3,
13851 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9B0,
13852 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9B1,
13853 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9B2,
13854 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9B3,
13855 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9B0,
13856 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9B1,
13857 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9B2,
13858 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9B3,
13859 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9B0,
13860 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9B1,
13861 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9B2,
13862 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9B3,
13863 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9B0,
13864 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9B1,
13865 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9B2,
13866 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9B3,
13867 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9B0,
13868 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9B1,
13869 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9B2,
13870 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9B3,
13871 4, 0x1F469, 0x200D, 0x1F9B0,
13872 4, 0x1F469, 0x200D, 0x1F9B1,
13873 4, 0x1F469, 0x200D, 0x1F9B2,
13874 4, 0x1F469, 0x200D, 0x1F9B3,
13875 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9B0,
13876 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9B1,
13877 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9B2,
13878 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9B3,
13879 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9B0,
13880 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9B1,
13881 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9B2,
13882 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9B3,
13883 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9B0,
13884 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9B1,
13885 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9B2,
13886 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9B3,
13887 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9B0,
13888 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9B1,
13889 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9B2,
13890 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9B3,
13891 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9B0,
13892 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9B1,
13893 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9B2,
13894 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9B3,
13895 4, 0x1F9D1, 0x200D, 0x1F9B0,
13896 4, 0x1F9D1, 0x200D, 0x1F9B1,
13897 4, 0x1F9D1, 0x200D, 0x1F9B2,
13898 4, 0x1F9D1, 0x200D, 0x1F9B3,
13899 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9B0,
13900 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9B1,
13901 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9B2,
13902 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9B3,
13903 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9B0,
13904 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9B1,
13905 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9B2,
13906 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9B3,
13907 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9B0,
13908 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9B1,
13909 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9B2,
13910 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9B3,
13911 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9B0,
13912 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9B1,
13913 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9B2,
13914 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9B3,
13915 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9B0,
13916 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9B1,
13917 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9B2,
13918 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9B3,
13919 5, 0x26D3, 0xFE0F, 0x200D, 0x1F4A5,
13920 5, 0x2764, 0xFE0F, 0x200D, 0x1F525,
13921 5, 0x2764, 0xFE0F, 0x200D, 0x1FA79,
13922 4, 0x1F344, 0x200D, 0x1F7EB,
13923 4, 0x1F34B, 0x200D, 0x1F7E9,
13924 6, 0x1F3F3, 0xFE0F, 0x200D, 0x26A7, 0xFE0F,
13925 5, 0x1F3F3, 0xFE0F, 0x200D, 0x1F308,
13926 5, 0x1F3F4, 0x200D, 0x2620, 0xFE0F,
13927 4, 0x1F408, 0x200D, 0x2B1B,
13928 4, 0x1F415, 0x200D, 0x1F9BA,
13929 4, 0x1F426, 0x200D, 0x2B1B,
13930 4, 0x1F426, 0x200D, 0x1F525,
13931 5, 0x1F43B, 0x200D, 0x2744, 0xFE0F,
13932 6, 0x1F441, 0xFE0F, 0x200D, 0x1F5E8, 0xFE0F,
13933 4, 0x1F62E, 0x200D, 0x1F4A8,
13934 4, 0x1F635, 0x200D, 0x1F4AB,
13935 5, 0x1F636, 0x200D, 0x1F32B, 0xFE0F,
13936 5, 0x1F642, 0x200D, 0x2194, 0xFE0F,
13937 5, 0x1F642, 0x200D, 0x2195, 0xFE0F
13938 #endif // !defined(SRELL_NO_UNICODE_POS)
13939 };
13940 #define SRELL_UPDATA_VERSION 301
13941 // ... "srell_updata3.h"]
13942
13943 static const ui_l32 error_property = static_cast<ui_l32>(-1);
13944 } // namespace up_constants
13945
13946 namespace up_internal
13947 {
13948 typedef int up_type;
13949 typedef const char *pname_type;
13950
13951 struct pnameno_map_type
13952 {
13953 pname_type name;
13954 up_type pno;
13955 };
13956
13957 struct posinfo
13958 {
13959 ui_l32 offset;
13960 ui_l32 numofpairs;
13961 };
13962
13963 typedef up_constants::unicode_property_data<
13964 pnameno_map_type,
13965 posinfo,
13966 ui_l32
13967 > updata;
13968
13969 } // namespace up_internal
13970
13971 //template <typename PairType>
13972 class unicode_property
13973 {
13974 public:
13975
13976 typedef simple_array<char> pstring;
13977
13978 unicode_property()
13979 {
13980 }
13981
13982 unicode_property &operator=(const unicode_property &)
13983 {
13984 return *this;
13985 }
13986
13987 #if defined(SRELL_CPP11_MOVE_ENABLED)
13988 unicode_property &operator=(unicode_property &&) SRELL_NOEXCEPT
13989 {
13990 return *this;
13991 }
13992 #endif
13993
13994 static ui_l32 lookup_property(const pstring &name, const pstring &value)
13995 {
13996 up_type ptype = name.size() > 1 ? lookup_property_name(name) : up_constants::uptype_gc;
13997 const posinfo *pos = &updata::positiontable[ptype];
13998 ui_l32 pno = lookup_property_value(value, pos->offset, pos->numofpairs);
13999
14000 if (pno == upid_error && name.size() < 2)
14001 {
14002 ptype = up_constants::uptype_bp;
14003 pos = &updata::positiontable[ptype];
14004 pno = lookup_property_value(value, pos->offset, pos->numofpairs);
14005 }
14006
14007 return pno != upid_error ? pno : up_constants::error_property;
14008 }
14009
14010 static ui_l32 ranges_offset(const ui_l32 property_number)
14011 {
14012 return updata::positiontable[property_number].offset;
14013 }
14014
14015 static ui_l32 number_of_ranges(const ui_l32 property_number)
14016 {
14017 return updata::positiontable[property_number].numofpairs;
14018 }
14019
14020 static const ui_l32 *ranges_address(const ui_l32 pno)
14021 {
14022 return &updata::rangetable[ranges_offset(pno) << 1];
14023 }
14024
14025 static bool is_valid_pno(const ui_l32 pno)
14026 {
14027 return pno != up_constants::error_property && pno <= max_property_number;
14028 }
14029
14030 static bool is_pos(const ui_l32 pno)
14031 {
14032 return pno > max_property_number && pno <= max_pos_number;
14033 }
14034
14035 private:
14036
14037 typedef up_internal::up_type up_type;
14038 typedef up_internal::pname_type pname_type;
14039 typedef up_internal::pnameno_map_type pnameno_map_type;
14040 typedef up_internal::posinfo posinfo;
14041 typedef up_internal::updata updata;
14042
14043 static up_type lookup_property_name(const pstring &name)
14044 {
14045 return lookup_property_value(name, 1, updata::propertynumbertable[0].pno);
14046 }
14047
14048 static ui_l32 lookup_property_value(const pstring &value, const ui_l32 offset, ui_l32 count)
14049 {
14050 const pnameno_map_type *base = &updata::propertynumbertable[offset];
14051
14052 while (count)
14053 {
14054 ui_l32 mid = count >> 1;
14055 const pnameno_map_type &map = base[mid];
14056 const int cmp = compare(value, map.name);
14057
14058 if (cmp < 0)
14059 {
14060 count = mid;
14061 }
14062 else if (cmp > 0)
14063 {
14064 ++mid;
14065 count -= mid;
14066 base += mid;
14067 }
14068 else //if (cmp == 0)
14069 return static_cast<ui_l32>(map.pno);
14070 }
14071 return upid_error;
14072 }
14073
14074 static int compare(const pstring &value, pname_type pname)
14075 {
14076 for (pstring::size_type i = 0;; ++i, ++pname)
14077 {
14078 if (value[i] == 0)
14079 return (*pname == 0) ? 0 : (value[i] < *pname ? -1 : 1);
14080
14081 if (value[i] != *pname)
14082 return value[i] < *pname ? -1 : 1;
14083 }
14084 }
14085
14086 private:
14087
14088 static const ui_l32 max_property_number = static_cast<ui_l32>(up_constants::upid_max_property_number);
14089 static const ui_l32 max_pos_number = static_cast<ui_l32>(up_constants::upid_max_pos_number);
14090 #if (SRELL_UPDATA_VERSION > 300)
14091 static const ui_l32 upid_error = static_cast<ui_l32>(up_constants::upid_error);
14092 #else
14093 static const ui_l32 upid_error = static_cast<ui_l32>(up_constants::upid_unknown);
14094 #endif
14095 };
14096 // unicode_property
14097
14098 #endif // !defined(SRELL_NO_UNICODE_PROPERTY)
14099 } // namespace re_detail
14100
14101 // ... "rei_up.hpp"]
14102 // ["rei_range_pair.hpp" ...
14103
14104 namespace re_detail
14105 {
14106
14107 struct range_pair // , public std::pair<charT, charT>
14108 {
14109 ui_l32 second;
14110 ui_l32 first;
14111
14112 void set(const ui_l32 min, const ui_l32 max)
14113 {
14114 this->first = min;
14115 this->second = max;
14116 }
14117
14118 void set(const ui_l32 minmax)
14119 {
14120 this->first = minmax;
14121 this->second = minmax;
14122 }
14123
14124 bool is_range_valid() const
14125 {
14126 return first <= second;
14127 }
14128
14129 bool operator==(const range_pair &right) const
14130 {
14131 return this->first == right.first && this->second == right.second;
14132 }
14133
14134 bool operator<(const range_pair &right) const
14135 {
14136 return this->second < right.first; // This assumes that optimise() has been called.
14137 }
14138
14139 void swap(range_pair &right)
14140 {
14141 const range_pair tmp = *this;
14142 *this = right;
14143 right = tmp;
14144 }
14145 };
14146 // range_pair
14147
14148 struct range_pair_helper : public range_pair
14149 {
14150 range_pair_helper(const ui_l32 min, const ui_l32 max)
14151 {
14152 this->first = min;
14153 this->second = max;
14154 }
14155
14156 range_pair_helper(const ui_l32 minmax)
14157 {
14158 this->first = minmax;
14159 this->second = minmax;
14160 }
14161 };
14162 // range_pair_helper
14163
14164 struct range_pairs // : public simple_array<range_pair>
14165 {
14166 public:
14167
14168 typedef simple_array<range_pair> array_type;
14169 typedef array_type::size_type size_type;
14170
14171 range_pairs()
14172 {
14173 }
14174
14175 range_pairs(const range_pairs &rp) : rparray_(rp.rparray_)
14176 {
14177 }
14178
14179 range_pairs &operator=(const range_pairs &rp)
14180 {
14181 rparray_.operator=(rp.rparray_);
14182 return *this;
14183 }
14184
14185 range_pairs(const size_type initsize) : rparray_(initsize)
14186 {
14187 }
14188
14189 range_pairs(const range_pairs &right, size_type pos, size_type size)
14190 : rparray_(right.rparray_, pos, size)
14191 {
14192 }
14193
14194 #if defined(SRELL_CPP11_MOVE_ENABLED)
14195 range_pairs(range_pairs &&rp) SRELL_NOEXCEPT
14196 : rparray_(std::move(rp.rparray_))
14197 {
14198 }
14199
14200 range_pairs &operator=(range_pairs &&rp) SRELL_NOEXCEPT
14201 {
14202 rparray_.operator=(std::move(rp.rparray_));
14203 return *this;
14204 }
14205 #endif
14206
14207 void clear()
14208 {
14209 rparray_.clear();
14210 }
14211
14212 size_type size() const
14213 {
14214 return rparray_.size();
14215 }
14216
14217 const range_pair &operator[](const size_type pos) const
14218 {
14219 return rparray_[pos];
14220 }
14221 range_pair &operator[](const size_type pos)
14222 {
14223 return rparray_[pos];
14224 }
14225
14226 void resize(const size_type size)
14227 {
14228 rparray_.resize(size);
14229 }
14230
14231 void swap(range_pairs &right)
14232 {
14233 rparray_.swap(right.rparray_);
14234 }
14235
14236 void set_solerange(const range_pair &right)
14237 {
14238 rparray_.clear();
14239 rparray_.push_back(right);
14240 }
14241
14242 void append_newclass(const range_pairs &right)
14243 {
14244 rparray_.append(right.rparray_);
14245 }
14246
14247 void append_newpair(const range_pair &right)
14248 {
14249 rparray_.push_back(right);
14250 }
14251
14252 void join(const range_pair &right)
14253 {
14254 range_pair *base = &rparray_[0];
14255 size_type count = rparray_.size();
14256
14257 while (count)
14258 {
14259 size_type mid = count / 2;
14260 range_pair *cp = &base[mid];
14261
14262 if (cp->first && (right.second < cp->first - 1))
14263 {
14264 count = mid;
14265 }
14266 else if (right.first && (cp->second < right.first - 1))
14267 {
14268 ++mid;
14269 base += mid;
14270 count -= mid;
14271 }
14272 else
14273 {
14274 if (cp->first > right.first)
14275 cp->first = right.first;
14276
14277 if (cp->second < right.second)
14278 cp->second = right.second;
14279
14280 range_pair *lw = cp;
14281
14282 if (cp->first > 0u)
14283 {
14284 for (--cp->first; lw != &rparray_[0];)
14285 {
14286 if ((--lw)->second < cp->first)
14287 {
14288 ++lw;
14289 break;
14290 }
14291 }
14292 ++cp->first;
14293 }
14294 else
14295 lw = &rparray_[0];
14296
14297 if (lw != cp)
14298 {
14299 if (cp->first > lw->first)
14300 cp->first = lw->first;
14301
14302 rparray_.erase(lw - &rparray_[0], cp - lw);
14303 cp = lw;
14304 }
14305
14306 range_pair *const rend = &rparray_[0] + rparray_.size();
14307 range_pair *rw = cp;
14308
14309 if (++cp->second > 0u)
14310 {
14311 for (; ++rw != rend;)
14312 {
14313 if (cp->second < rw->first)
14314 break;
14315 }
14316 --rw;
14317 }
14318 else
14319 rw = rend - 1;
14320
14321 --cp->second;
14322
14323 if (rw != cp)
14324 {
14325 if (rw->second < cp->second)
14326 rw->second = cp->second;
14327
14328 rw->first = cp->first;
14329 rparray_.erase(cp - &rparray_[0], rw - cp);
14330 }
14331 return;
14332 }
14333 }
14334 rparray_.insert(base - &rparray_[0], right);
14335 }
14336
14337 void merge(const range_pairs &right)
14338 {
14339 for (size_type i = 0; i < right.size(); ++i)
14340 join(right[i]);
14341 }
14342
14343 bool same(ui_l32 pos, const ui_l32 count, const range_pairs &right) const
14344 {
14345 if (count == right.size())
14346 {
14347 for (ui_l32 i = 0; i < count; ++i, ++pos)
14348 if (!(rparray_[pos] == right[i]))
14349 return false;
14350
14351 return true;
14352 }
14353 return false;
14354 }
14355
14356 int relationship(const range_pairs &right) const
14357 {
14358 if (rparray_.size() == right.rparray_.size())
14359 {
14360 for (size_type i = 0; i < rparray_.size(); ++i)
14361 {
14362 if (!(this->rparray_[i] == right.rparray_[i]))
14363 {
14364 if (i == 0)
14365 goto check_overlap;
14366
14367 return 1; // Overlapped.
14368 }
14369 }
14370 return 0; // Same.
14371 }
14372 check_overlap:
14373 return is_overlap(right) ? 1 : 2; // Overlapped or exclusive.
14374 }
14375
14376 void negation()
14377 {
14378 ui_l32 begin = 0;
14379 range_pairs newpairs;
14380
14381 for (size_type i = 0; i < rparray_.size(); ++i)
14382 {
14383 const range_pair &range = rparray_[i];
14384
14385 if (begin < range.first)
14386 newpairs.join(range_pair_helper(begin, range.first - 1));
14387
14388 begin = range.second + 1;
14389 }
14390
14391 if (begin <= constants::unicode_max_codepoint)
14392 newpairs.join(range_pair_helper(begin, constants::unicode_max_codepoint));
14393
14394 *this = newpairs;
14395 }
14396
14397 bool is_overlap(const range_pairs &right) const
14398 {
14399 for (size_type i = 0; i < rparray_.size(); ++i)
14400 {
14401 const range_pair &leftrange = rparray_[i];
14402
14403 for (size_type j = 0; j < right.size(); ++j)
14404 {
14405 const range_pair &rightrange = right[j];
14406
14407 if (rightrange.first <= leftrange.second) // Excludes l1 l2 < r1 r2.
14408 if (leftrange.first <= rightrange.second) // Excludes r1 r2 < l1 l2.
14409 return true;
14410 }
14411 }
14412 return false;
14413 }
14414
14415 void load_from_memory(const ui_l32 *array, ui_l32 number_of_pairs)
14416 {
14417 for (; number_of_pairs; --number_of_pairs, array += 2)
14418 join(range_pair_helper(array[0], array[1]));
14419 }
14420
14421 void make_caseunfoldedcharset()
14422 {
14423 ui_l32 table[ucf_constants::rev_maxset] = {};
14424 range_pairs newranges;
14425
14426 for (size_type i = 0; i < rparray_.size(); ++i)
14427 {
14428 const range_pair &range = rparray_[i];
14429
14430 for (ui_l32 ucp = range.first; ucp <= range.second && ucp <= ucf_constants::rev_maxcp; ++ucp)
14431 {
14432 const ui_l32 setnum = unicode_case_folding::do_caseunfolding(table, ucp);
14433
14434 for (ui_l32 j = 0; j < setnum; ++j)
14435 {
14436 if (table[j] != ucp)
14437 newranges.join(range_pair_helper(table[j]));
14438 }
14439 }
14440 }
14441 merge(newranges);
14442 }
14443
14444 // For updataout.hpp.
14445 void remove_range(const range_pair &right)
14446 {
14447 for (size_type pos = 0; pos < rparray_.size();)
14448 {
14449 range_pair &left = rparray_[pos];
14450
14451 if (right.first <= left.first) // r1 <= l1
14452 {
14453 if (left.first <= right.second) // r1 <= l1 <= r2.
14454 {
14455 if (right.second < left.second) // r1 <= l1 <= r2 < l2.
14456 {
14457 left.first = right.second + 1;
14458 return;
14459 }
14460 else // r1 <= l1 <= l2 <= r2.
14461 rparray_.erase(pos);
14462 }
14463 else // r1 <= r2 < l1
14464 return;
14465 }
14466 //else // l1 < r1
14467 else if (right.first <= left.second) // l1 < r1 <= l2.
14468 {
14469 if (left.second <= right.second) // l1 < r1 <= l2 <= r2.
14470 {
14471 left.second = right.first - 1;
14472 ++pos;
14473 }
14474 else // l1 < r1 <= r2 < l2
14475 {
14476 range_pair newrange(left);
14477
14478 left.second = right.first - 1;
14479 newrange.first = right.second + 1;
14480 rparray_.insert(++pos, newrange);
14481 return;
14482 }
14483 }
14484 else // l1 <= l2 < r1
14485 ++pos;
14486 }
14487 }
14488
14489 ui_l32 consists_of_one_character(const bool icase) const
14490 {
14491 if (rparray_.size() >= 1)
14492 {
14493 ui_l32 (*const casefolding_func)(const ui_l32) = !icase ? do_nothing : unicode_case_folding::do_casefolding;
14494 const ui_l32 ucp1st = casefolding_func(rparray_[0].first);
14495
14496 for (size_type no = 0; no < rparray_.size(); ++no)
14497 {
14498 const range_pair &cr = rparray_[no];
14499
14500 for (ui_l32 ucp = cr.first;; ++ucp)
14501 {
14502 if (ucp1st != casefolding_func(ucp))
14503 return constants::invalid_u32value;
14504
14505 if (ucp == cr.second)
14506 break;
14507 }
14508 }
14509 return ucp1st;
14510 }
14511 return constants::invalid_u32value;
14512 }
14513
14514 void split_ranges(range_pairs &kept, range_pairs &removed, const range_pairs &rightranges) const
14515 {
14516 size_type prevolj = 0;
14517 range_pair newpair;
14518
14519 kept.rparray_ = this->rparray_; // Subtraction set.
14520 removed.clear(); // Intersection set.
14521
14522 for (size_type i = 0;; ++i)
14523 {
14524 RETRY_SAMEINDEXNO:
14525 if (i >= kept.rparray_.size())
14526 break;
14527
14528 range_pair &left = kept.rparray_[i];
14529
14530 for (size_type j = prevolj; j < rightranges.rparray_.size(); ++j)
14531 {
14532 const range_pair &right = rightranges.rparray_[j];
14533
14534 if (left.second < right.first) // Excludes l1 l2 < r1 r2.
14535 break;
14536
14537 if (left.first <= right.second) // Excludes r1 r2 < l1 l2.
14538 {
14539 prevolj = j;
14540
14541 if (left.first < right.first) // l1 < r1 <= r2.
14542 {
14543 if (right.second < left.second) // l1 < r1 <= r2 < l2.
14544 {
14545 removed.join(range_pair_helper(right.first, right.second));
14546
14547 newpair.set(right.second + 1, left.second);
14548 left.second = right.first - 1;
14549 kept.rparray_.insert(i + 1, newpair);
14550 }
14551 else // l1 < r1 <= l2 <= r2.
14552 {
14553 removed.join(range_pair_helper(right.first, left.second));
14554 left.second = right.first - 1;
14555 }
14556 }
14557 //else // r1 <= l1.
14558 else if (right.second < left.second) // r1 <= l1 <= r2 < l2.
14559 {
14560 removed.join(range_pair_helper(left.first, right.second));
14561 left.first = right.second + 1;
14562 }
14563 else // r1 <= l1 <= l2 <= r2.
14564 {
14565 removed.join(range_pair_helper(left.first, left.second));
14566 kept.rparray_.erase(i);
14567 goto RETRY_SAMEINDEXNO;
14568 }
14569 }
14570 }
14571 }
14572 }
14573
14574 #if defined(SRELLDBG_NO_BITSET)
14575 bool is_included(const ui_l32 ch) const
14576 {
14577 const range_pair *const end = rparray_.data() + rparray_.size();
14578
14579 for (const range_pair *cur = rparray_.data(); cur != end; ++cur)
14580 {
14581 if (ch <= cur->second)
14582 return ch >= cur->first;
14583 }
14584 return false;
14585 }
14586 #endif // defined(SRELLDBG_NO_BITSET)
14587
14588 // For multiple_range_pairs functions.
14589
14590 bool is_included_ls(const ui_l32 pos, ui_l32 count, const ui_l32 c) const
14591 {
14592 const range_pair *cur = &rparray_[pos];
14593
14594 for (; count; ++cur, --count)
14595 {
14596 if (c <= cur->second)
14597 return c >= cur->first;
14598 }
14599 return false;
14600 }
14601
14602 bool is_included(const ui_l32 pos, ui_l32 count, const ui_l32 c) const
14603 {
14604 const range_pair *base = &rparray_[pos];
14605
14606 while (count)
14607 {
14608 ui_l32 mid = count >> 1;
14609 const range_pair &rp = base[mid];
14610
14611 if (c <= rp.second)
14612 {
14613 if (c >= rp.first)
14614 return true;
14615
14616 count = mid;
14617 }
14618 else
14619 {
14620 ++mid;
14621 count -= mid;
14622 base += mid;
14623 }
14624 }
14625 return false;
14626 }
14627
14628 void replace(const size_type pos, const size_type count, const range_pairs &right)
14629 {
14630 rparray_.replace(pos, count, right.rparray_);
14631 }
14632
14633 #if !defined(SRELLDBG_NO_CCPOS)
14634
14635 // For Eytzinger layout functions.
14636
14637 bool is_included_el(ui_l32 pos, const ui_l32 len, const ui_l32 c) const
14638 {
14639 const range_pair *const base = &rparray_[pos];
14640
14641 #if defined(__GNUC__)
14642 __builtin_prefetch(base);
14643 #endif
14644 for (pos = 0; pos < len;)
14645 {
14646 const range_pair &rp = base[pos];
14647
14648 if (c <= rp.second)
14649 {
14650 if (c >= rp.first)
14651 return true;
14652
14653 pos = (pos << 1) + 1;
14654 }
14655 else
14656 {
14657 pos = (pos << 1) + 2;
14658 }
14659 }
14660 return false;
14661 }
14662
14663 ui_l32 create_el(const range_pair *srcbase, const ui_l32 srcsize)
14664 {
14665 const ui_l32 basepos = static_cast<ui_l32>(rparray_.size());
14666
14667 rparray_.resize(basepos + srcsize);
14668 set_eytzinger_layout(0, srcbase, srcsize, &rparray_[basepos], 0);
14669
14670 return srcsize;
14671 }
14672
14673 #endif // !defined(SRELLDBG_NO_CCPOS)
14674
14675 ui_l32 total_codepoints() const
14676 {
14677 ui_l32 num = 0;
14678
14679 for (size_type no = 0; no < rparray_.size(); ++no)
14680 {
14681 const range_pair &cr = rparray_[no];
14682
14683 num += cr.second - cr.first + 1;
14684 }
14685 return num;
14686 }
14687
14688 private:
14689
14690 #if !defined(SRELLDBG_NO_CCPOS)
14691
14692 ui_l32 set_eytzinger_layout(ui_l32 srcpos, const range_pair *const srcbase, const ui_l32 srclen,
14693 range_pair *const destbase, const ui_l32 destpos)
14694 {
14695 if (destpos < srclen)
14696 {
14697 const ui_l32 nextpos = (destpos << 1) + 1;
14698
14699 srcpos = set_eytzinger_layout(srcpos, srcbase, srclen, destbase, nextpos);
14700 destbase[destpos] = srcbase[srcpos++];
14701 srcpos = set_eytzinger_layout(srcpos, srcbase, srclen, destbase, nextpos + 1);
14702 }
14703 return srcpos;
14704 }
14705
14706 #endif // !defined(SRELLDBG_NO_CCPOS)
14707
14708 static ui_l32 do_nothing(const ui_l32 cp)
14709 {
14710 return cp;
14711 }
14712
14713 array_type rparray_;
14714
14715 public: // For debug.
14716
14717 void print_pairs(const int, const char *const = NULL, const char *const = NULL) const;
14718 };
14719 // range_pairs
14720
14721 } // namespace re_detail
14722
14723 // ... "rei_range_pair.hpp"]
14724 // ["rei_char_class.hpp" ...
14725
14726 namespace re_detail
14727 {
14728
14729 #if !defined(SRELL_NO_UNICODE_PROPERTY)
14730
14731 // For RegExpIdentifierStart and RegExpIdentifierPart
14732 struct identifier_charclass
14733 {
14734 public:
14735
14736 void clear()
14737 {
14738 char_class_.clear();
14739 char_class_pos_.clear();
14740 }
14741
14742 void setup()
14743 {
14744 if (char_class_pos_.size() == 0)
14745 {
14746 static const ui_l32 additions[] = {
14747 // reg_exp_identifier_start, reg_exp_identifier_part.
14748 0x24, 0x24, 0x5f, 0x5f, 0x200c, 0x200d // '$' '_' <ZWNJ>-<ZWJ>
14749 };
14750 range_pairs ranges;
14751
14752 // For reg_exp_identifier_start.
14753 {
14754 const ui_l32 *const IDs_address = unicode_property::ranges_address(upid_bp_ID_Start);
14755 const ui_l32 IDs_number = unicode_property::number_of_ranges(upid_bp_ID_Start);
14756 ranges.load_from_memory(IDs_address, IDs_number);
14757 }
14758 ranges.load_from_memory(&additions[0], 2);
14759 append_charclass(ranges);
14760
14761 // For reg_exp_identifier_part.
14762 ranges.clear();
14763 {
14764 const ui_l32 *const IDc_address = unicode_property::ranges_address(upid_bp_ID_Continue);
14765 const ui_l32 IDc_number = unicode_property::number_of_ranges(upid_bp_ID_Continue);
14766 ranges.load_from_memory(IDc_address, IDc_number);
14767 }
14768 ranges.load_from_memory(&additions[0], 3);
14769 append_charclass(ranges);
14770 }
14771 }
14772
14773 bool is_identifier(const ui_l32 ch, const bool part) const
14774 {
14775 const range_pair &rp = char_class_pos_[part ? 1 : 0];
14776
14777 return char_class_.is_included(rp.first, rp.second, ch);
14778 }
14779
14780 private:
14781
14782 void append_charclass(const range_pairs &rps)
14783 {
14784 char_class_pos_.push_back(range_pair_helper(static_cast<ui_l32>(char_class_.size()), static_cast<ui_l32>(rps.size())));
14785 char_class_.append_newclass(rps);
14786 }
14787
14788 range_pairs char_class_;
14789 range_pairs::array_type char_class_pos_;
14790
14791 // UnicodeIDStart::
14792 // any Unicode code point with the Unicode property "ID_Start"
14793 // UnicodeIDContinue::
14794 // any Unicode code point with the Unicode property "ID_Continue"
14795 static const ui_l32 upid_bp_ID_Start = static_cast<ui_l32>(up_constants::bp_ID_Start);
14796 static const ui_l32 upid_bp_ID_Continue = static_cast<ui_l32>(up_constants::bp_ID_Continue);
14797 };
14798 // identifier_charclass
14799 #endif // !defined(SRELL_NO_UNICODE_PROPERTY)
14800
14801 class re_character_class
14802 {
14803 public:
14804
14805 enum
14806 { // 0 1 2 3 4 5
14807 newline, dotall, space, digit, word, icase_word,
14808 // 6
14809 number_of_predefcls
14810 };
14811
14812 #if !defined(SRELL_NO_UNICODE_PROPERTY)
14813 typedef unicode_property::pstring pstring;
14814 #endif
14815
14816 re_character_class()
14817 {
14818 setup_predefinedclass();
14819 }
14820
14821 re_character_class &operator=(const re_character_class &that)
14822 {
14823 if (this != &that)
14824 {
14825 this->char_class_ = that.char_class_;
14826 this->char_class_pos_ = that.char_class_pos_;
14827 #if !defined(SRELLDBG_NO_CCPOS)
14828 this->char_class_el_ = that.char_class_el_;
14829 this->char_class_pos_el_ = that.char_class_pos_el_;
14830 #endif
14831 }
14832 return *this;
14833 }
14834
14835 #if defined(SRELL_CPP11_MOVE_ENABLED)
14836 re_character_class &operator=(re_character_class &&that) SRELL_NOEXCEPT
14837 {
14838 if (this != &that)
14839 {
14840 this->char_class_ = std::move(that.char_class_);
14841 this->char_class_pos_ = std::move(that.char_class_pos_);
14842 #if !defined(SRELLDBG_NO_CCPOS)
14843 this->char_class_el_ = std::move(that.char_class_el_);
14844 this->char_class_pos_el_ = std::move(that.char_class_pos_el_);
14845 #endif
14846 }
14847 return *this;
14848 }
14849 #endif
14850
14851 bool is_included(const ui_l32 class_number, const ui_l32 c) const
14852 {
14853 // return char_class_.is_included(char_class_pos_[class_number], c);
14854 const range_pair &rp = char_class_pos_[class_number];
14855
14856 return char_class_.is_included(rp.first, rp.second, c);
14857 }
14858
14859 #if !defined(SRELLDBG_NO_CCPOS)
14860 bool is_included(const ui_l32 pos, const ui_l32 len, const ui_l32 c) const
14861 {
14862 return char_class_el_.is_included_el(pos, len, c);
14863 }
14864 #endif
14865
14866 void setup_icase_word()
14867 {
14868 range_pair &icase_pos = char_class_pos_[icase_word];
14869
14870 if (icase_pos.second == char_class_pos_[word].second)
14871 {
14872 range_pairs icasewordclass(char_class_, icase_pos.first, icase_pos.second);
14873
14874 icasewordclass.make_caseunfoldedcharset();
14875 // Includes 017f and 212a so that they and their case-folded
14876 // characters 's' and 'k' will be excluded from the character
14877 // set that /[\W]/i matches.
14878
14879 char_class_.replace(icase_pos.first, icase_pos.second, icasewordclass);
14880
14881 if (icase_pos.second < static_cast<ui_l32>(icasewordclass.size()))
14882 {
14883 const ui_l32 delta = static_cast<ui_l32>(icasewordclass.size() - icase_pos.second);
14884
14885 for (int i = number_of_predefcls; i < static_cast<int>(char_class_pos_.size()); ++i)
14886 char_class_pos_[i].first += delta;
14887 }
14888 icase_pos.second = static_cast<ui_l32>(icasewordclass.size());
14889 }
14890 }
14891
14892 void clear()
14893 {
14894 char_class_pos_.resize(number_of_predefcls);
14895
14896 ui_l32 basesize = 0;
14897 for (int i = 0; i < number_of_predefcls; ++i)
14898 basesize += char_class_pos_[i].second;
14899
14900 char_class_.resize(basesize);
14901
14902 #if !defined(SRELLDBG_NO_CCPOS)
14903 char_class_el_.clear();
14904 char_class_pos_el_.clear();
14905 #endif
14906 }
14907
14908 ui_l32 register_newclass(const range_pairs &rps)
14909 {
14910 for (range_pairs::size_type no = 0; no < char_class_pos_.size(); ++no)
14911 {
14912 const range_pair &rp = char_class_pos_[no];
14913
14914 if (char_class_.same(rp.first, rp.second, rps))
14915 return static_cast<ui_l32>(no);
14916 }
14917
14918 append_charclass(rps);
14919 return static_cast<ui_l32>(char_class_pos_.size() - 1);
14920 }
14921
14922 range_pairs operator[](const ui_l32 no) const
14923 {
14924 const range_pair &ccpos = char_class_pos_[no];
14925 range_pairs rp(ccpos.second);
14926
14927 for (ui_l32 i = 0; i < ccpos.second; ++i)
14928 rp[i] = char_class_[ccpos.first + i];
14929
14930 return rp;
14931 }
14932
14933 #if !defined(SRELLDBG_NO_CCPOS)
14934
14935 const range_pair &charclasspos(const ui_l32 no) // const
14936 {
14937 range_pair &elpos = char_class_pos_el_[no];
14938
14939 if (elpos.second == 0)
14940 {
14941 const range_pair &posinfo = char_class_pos_[no];
14942
14943 if (posinfo.second > 0)
14944 {
14945 elpos.first = static_cast<ui_l32>(char_class_el_.size());
14946 elpos.second = char_class_el_.create_el(&char_class_[posinfo.first], posinfo.second);
14947 }
14948 }
14949 return elpos;
14950 }
14951
14952 void finalise()
14953 {
14954 char_class_el_.clear();
14955 char_class_pos_el_.resize(char_class_pos_.size());
14956 std::memset(&char_class_pos_el_[0], 0, char_class_pos_el_.size() * sizeof (range_pairs::array_type::value_type));
14957 }
14958
14959 #endif // #if !defined(SRELLDBG_NO_CCPOS)
14960
14961 void optimise()
14962 {
14963 }
14964
14965 #if !defined(SRELL_NO_UNICODE_PROPERTY)
14966
14967 ui_l32 get_propertynumber(const pstring &pname, const pstring &pvalue) const
14968 {
14969 const ui_l32 pno = static_cast<ui_l32>(unicode_property::lookup_property(pname, pvalue));
14970
14971 return (pno != up_constants::error_property) ? pno : up_constants::error_property;
14972 }
14973
14974 bool load_upranges(range_pairs &newranges, const ui_l32 property_number) const
14975 {
14976 newranges.clear();
14977
14978 if (unicode_property::is_valid_pno(property_number))
14979 {
14980 if (property_number == upid_bp_Assigned)
14981 {
14982 load_updata(newranges, upid_gc_Cn);
14983 newranges.negation();
14984 }
14985 else
14986 load_updata(newranges, property_number);
14987
14988 return true;
14989 }
14990 return false;
14991 }
14992
14993 // Properties of strings.
14994 bool is_pos(const ui_l32 pno) const
14995 {
14996 return unicode_property::is_pos(pno);
14997 }
14998
14999 bool get_prawdata(simple_array<ui_l32> &seq, ui_l32 property_number)
15000 {
15001 if (property_number != up_constants::error_property)
15002 {
15003 if (property_number == upid_bp_Assigned)
15004 property_number = upid_gc_Cn;
15005
15006 const ui_l32 *const address = unicode_property::ranges_address(property_number);
15007 // const ui_l32 offset = unicode_property::ranges_offset(property_number);
15008 const ui_l32 number = unicode_property::number_of_ranges(property_number) * 2;
15009
15010 seq.resize(number);
15011 for (ui_l32 i = 0; i < number; ++i)
15012 seq[i] = address[i];
15013
15014 return true;
15015 }
15016 seq.clear();
15017 return false;
15018 }
15019
15020 #endif // !defined(SRELL_NO_UNICODE_PROPERTY)
15021
15022 void swap(re_character_class &right)
15023 {
15024 if (this != &right)
15025 {
15026 this->char_class_.swap(right.char_class_);
15027 this->char_class_pos_.swap(right.char_class_pos_);
15028 #if !defined(SRELLDBG_NO_CCPOS)
15029 this->char_class_el_.swap(right.char_class_el_);
15030 this->char_class_pos_el_.swap(right.char_class_pos_el_);
15031 #endif
15032 }
15033 }
15034
15035 private:
15036
15037 #if !defined(SRELL_NO_UNICODE_PROPERTY)
15038
15039 void load_updata(range_pairs &newranges, const ui_l32 property_number) const
15040 {
15041 const ui_l32 *const address = unicode_property::ranges_address(property_number);
15042 // const ui_l32 offset = unicode_property::ranges_offset(property_number);
15043 const ui_l32 number = unicode_property::number_of_ranges(property_number);
15044
15045 newranges.load_from_memory(address, number);
15046 }
15047
15048 #endif // !defined(SRELL_NO_UNICODE_PROPERTY)
15049
15050 void append_charclass(const range_pairs &rps)
15051 {
15052 char_class_pos_.push_back(range_pair_helper(static_cast<ui_l32>(char_class_.size()), static_cast<ui_l32>(rps.size())));
15053 char_class_.append_newclass(rps);
15054 }
15055
15056 // The production CharacterClassEscape::s evaluates as follows:
15057 // Return the set of characters containing the characters that are on the right-hand side of the WhiteSpace or LineTerminator productions.
15058 // WhiteSpace::<TAB> <VT> <FF> <SP> <NBSP> <ZWNBSP> <USP>
15059 // 0009 000B 000C 0020 00A0 FEFF Zs
15060 // LineTerminator::<LF> <CR> <LS> <PS>
15061 // 000A 000D 2028 2029
15062
15063 void setup_predefinedclass()
15064 {
15065 #if !defined(SRELL_NO_UNICODE_PROPERTY)
15066 const ui_l32 *const Zs_address = unicode_property::ranges_address(upid_gc_Zs);
15067 // const ui_l32 Zs_offset = unicode_property::ranges_offset(upid_gc_Zs);
15068 const ui_l32 Zs_number = unicode_property::number_of_ranges(upid_gc_Zs);
15069 #else
15070 static const ui_l32 Zs[] = {
15071 0x1680, 0x1680, 0x2000, 0x200a, // 0x2028, 0x2029,
15072 0x202f, 0x202f, 0x205f, 0x205f, 0x3000, 0x3000
15073 };
15074 #endif // defined(SRELL_NO_UNICODE_PROPERTY)
15075 static const ui_l32 allranges[] = {
15076 // dotall.
15077 0x0000, 0x10ffff,
15078 // newline.
15079 0x0a, 0x0a, 0x0d, 0x0d, // \n \r
15080 // newline, space.
15081 0x2028, 0x2029,
15082 // space.
15083 0x09, 0x0d, // \t \n \v \f \r
15084 0x20, 0x20, // ' '
15085 0xa0, 0xa0, // <NBSP>
15086 0xfeff, 0xfeff, // <BOM>
15087 // digit, word.
15088 0x30, 0x39, // '0'-'9'
15089 0x41, 0x5a, 0x5f, 0x5f, 0x61, 0x7a // 'A'-'Z' '_' 'a'-'z'
15090 };
15091 range_pairs ranges;
15092
15093 // newline.
15094 ranges.load_from_memory(&allranges[2], 3);
15095 append_charclass(ranges);
15096
15097 // dotall.
15098 ranges.clear();
15099 ranges.load_from_memory(&allranges[0], 1);
15100 append_charclass(ranges);
15101
15102 // space.
15103 ranges.clear();
15104 ranges.load_from_memory(&allranges[6], 5);
15105 #if !defined(SRELL_NO_UNICODE_PROPERTY)
15106 ranges.load_from_memory(Zs_address, Zs_number);
15107 #else
15108 ranges.load_from_memory(Zs, 5);
15109 #endif
15110 append_charclass(ranges);
15111
15112 // digit.
15113 ranges.clear();
15114 ranges.load_from_memory(&allranges[16], 1);
15115 append_charclass(ranges);
15116
15117 // word.
15118 ranges.clear();
15119 ranges.load_from_memory(&allranges[16], 4);
15120 append_charclass(ranges);
15121
15122 // Reservation for icase_word.
15123 append_charclass(ranges);
15124 }
15125
15126 private:
15127
15128 range_pairs char_class_;
15129 range_pairs::array_type char_class_pos_;
15130
15131 #if !defined(SRELLDBG_NO_CCPOS)
15132 range_pairs char_class_el_;
15133 range_pairs::array_type char_class_pos_el_;
15134
15135 #endif
15136
15137 #if !defined(SRELL_NO_UNICODE_PROPERTY)
15138 static const ui_l32 upid_gc_Zs = static_cast<ui_l32>(up_constants::gc_Space_Separator);
15139 static const ui_l32 upid_gc_Cn = static_cast<ui_l32>(up_constants::gc_Unassigned);
15140 static const ui_l32 upid_bp_Assigned = static_cast<ui_l32>(up_constants::bp_Assigned);
15141
15142 #endif
15143
15144 public: // For debug.
15145
15146 void print_classes(const int) const;
15147 };
15148 // re_character_class
15149
15150 } // namespace re_detail
15151
15152 // ... "rei_char_class.hpp"]
15153 // ["rei_groupname_mapper.hpp" ...
15154
15155 namespace re_detail
15156 {
15157
15158 #if !defined(SRELL_NO_NAMEDCAPTURE)
15159
15160 template <typename charT>
15161 class groupname_mapper
15162 {
15163 public:
15164
15165 typedef simple_array<charT> gname_string;
15166 typedef std::size_t size_type;
15167 static const ui_l32 notfound = 0u;
15168
15169 groupname_mapper()
15170 {
15171 }
15172
15173 groupname_mapper(const groupname_mapper &right)
15174 : names_(right.names_), keysize_classno_(right.keysize_classno_)
15175 {
15176 }
15177
15178 #if defined(SRELL_CPP11_MOVE_ENABLED)
15179 groupname_mapper(groupname_mapper &&right) SRELL_NOEXCEPT
15180 : names_(std::move(right.names_)), keysize_classno_(std::move(right.keysize_classno_))
15181 {
15182 }
15183 #endif
15184
15185 groupname_mapper &operator=(const groupname_mapper &right)
15186 {
15187 if (this != &right)
15188 {
15189 names_ = right.names_;
15190 keysize_classno_ = right.keysize_classno_;
15191 }
15192 return *this;
15193 }
15194
15195 #if defined(SRELL_CPP11_MOVE_ENABLED)
15196 groupname_mapper &operator=(groupname_mapper &&right) SRELL_NOEXCEPT
15197 {
15198 if (this != &right)
15199 {
15200 names_ = std::move(right.names_);
15201 keysize_classno_ = std::move(right.keysize_classno_);
15202 }
15203 return *this;
15204 }
15205 #endif
15206
15207 void clear()
15208 {
15209 names_.clear();
15210 keysize_classno_.clear();
15211 }
15212
15213 const ui_l32 *operator[](const gname_string &gname) const
15214 {
15215 ui_l32 pos = 0;
15216 for (std::size_t i = 1; i < static_cast<std::size_t>(keysize_classno_.size());)
15217 {
15218 const ui_l32 keysize = keysize_classno_[i];
15219 const ui_l32 keynum = keysize_classno_[++i];
15220
15221 if (keysize == static_cast<ui_l32>(gname.size()) && sameseq_(pos, gname))
15222 return &keysize_classno_[i];
15223
15224 pos += keysize;
15225 i += keynum + 1;
15226 }
15227 return NULL;
15228 }
15229
15230 gname_string operator[](const ui_l32 indexno) const
15231 {
15232 ui_l32 pos = 0;
15233 for (std::size_t i = 1; i < static_cast<std::size_t>(keysize_classno_.size()); ++i)
15234 {
15235 const ui_l32 keysize = keysize_classno_[i];
15236
15237 for (ui_l32 keynum = keysize_classno_[++i]; keynum; --keynum)
15238 {
15239 if (keysize_classno_[++i] == indexno)
15240 return gname_string(names_, pos, keysize);
15241 }
15242 pos += keysize;
15243 }
15244 return gname_string();
15245 }
15246
15247 size_type size() const
15248 {
15249 return keysize_classno_.size() ? keysize_classno_[0] : 0;
15250 }
15251
15252 bool push_back(const gname_string &gname, const ui_l32 gno, const simple_array<ui_l32> &dupranges)
15253 {
15254 const ui_l32 *list = operator[](gname);
15255
15256 if (list == NULL)
15257 {
15258 names_.append(gname);
15259 if (keysize_classno_.size())
15260 ++keysize_classno_[0];
15261 else
15262 keysize_classno_.append(1, 1);
15263 keysize_classno_.append(1, static_cast<ui_l32>(gname.size()));
15264 keysize_classno_.append(1, 1);
15265 keysize_classno_.append(1, gno);
15266 return true;
15267 }
15268
15269 const size_type offset = list - keysize_classno_.data();
15270 const size_type keynum = list[0];
15271
15272 for (size_type i = 1; i <= keynum; ++i)
15273 {
15274 const ui_l32 no = list[i];
15275
15276 for (typename simple_array<ui_l32>::size_type j = 0;; ++j)
15277 {
15278 if (j >= dupranges.size())
15279 return false;
15280
15281 if (no < dupranges[j])
15282 {
15283 if (j & 1)
15284 break;
15285
15286 return false;
15287 }
15288 }
15289 }
15290
15291 const size_type newkeynum = ++keysize_classno_[offset];;
15292 keysize_classno_.insert(offset + newkeynum, gno);
15293
15294 return true;
15295 }
15296
15297 ui_l32 assign_number(const gname_string &gname, const ui_l32 gno)
15298 {
15299 const ui_l32 *list = operator[](gname);
15300
15301 if (list == NULL)
15302 {
15303 names_.append(gname);
15304 if (keysize_classno_.size())
15305 ++keysize_classno_[0];
15306 else
15307 keysize_classno_.append(1, 1);
15308 keysize_classno_.append(1, static_cast<ui_l32>(gname.size()));
15309 keysize_classno_.append(1, 1);
15310 keysize_classno_.append(1, gno);
15311 return gno;
15312 }
15313 return list[1];
15314 }
15315
15316 void swap(groupname_mapper &right)
15317 {
15318 this->names_.swap(right.names_);
15319 keysize_classno_.swap(right.keysize_classno_);
15320 }
15321
15322 private:
15323
15324 bool sameseq_(size_type pos, const gname_string &gname) const
15325 {
15326 for (size_type i = 0; i < gname.size(); ++i, ++pos)
15327 if (pos >= names_.size() || names_[pos] != gname[i])
15328 return false;
15329
15330 return true;
15331 }
15332
15333 gname_string names_;
15334 simple_array<ui_l32> keysize_classno_;
15335
15336 public: // For debug.
15337
15338 void print_mappings(const int) const;
15339 };
15340 template <typename charT>
15341 const ui_l32 groupname_mapper<charT>::notfound;
15342 // groupname_mapper
15343
15344 #endif // !defined(SRELL_NO_NAMEDCAPTURE)
15345
15346 } // namespace re_detail
15347
15348 // ... "rei_groupname_mapper.hpp"]
15349 // ["rei_state.hpp" ...
15350
15351 namespace re_detail
15352 {
15353
15354 struct re_quantifier
15355 {
15356 // atleast and atmost: for check_counter.
15357 // (Special case 1) in charcter_class, bol, eol, boundary, represents the offset and length
15358 // of the range in the array of character classes.
15359 // (Special case 2) in roundbracket_open and roundbracket_pop atleast and atmost represent
15360 // the minimum and maximum bracket numbers respectively inside the brackets itself.
15361 // (Special case 3) in repeat_in_push and repeat_in_pop atleast and atmost represent the
15362 // minimum and maximum bracket numbers respectively inside the repetition.
15363 // (Special case 4) in lookaround_open and lookaround_pop atleast and atmost represent the
15364 // minimum and maximum bracket numbers respectively inside the lookaround.
15365
15366 ui_l32 atleast;
15367
15368 ui_l32 atmost;
15369
15370 ui_l32 is_greedy;
15371 // (Special case 1: v1) in lookaround_open represents the number of characters to be rewound.
15372 // (Special case 2: v2) in lookaround_open represents: 0=lookaheads, 1=lookbehinds,
15373 // 2=matchpointrewinder, 3=rewinder+rerun.
15374
15375 void reset(const ui_l32 len = 1)
15376 {
15377 atleast = atmost = len;
15378 is_greedy = 1;
15379 }
15380
15381 void set(const ui_l32 min, const ui_l32 max)
15382 {
15383 atleast = min;
15384 atmost = max;
15385 }
15386
15387 void set(const ui_l32 min, const ui_l32 max, const ui_l32 greedy)
15388 {
15389 atleast = min;
15390 atmost = max;
15391 is_greedy = greedy;
15392 }
15393
15394 bool is_valid() const
15395 {
15396 return atleast <= atmost;
15397 }
15398
15399 void set_infinity()
15400 {
15401 atmost = constants::infinity;
15402 }
15403
15404 bool is_infinity() const
15405 {
15406 return atmost == constants::infinity;
15407 }
15408
15409 bool is_same() const
15410 {
15411 return atleast == atmost;
15412 }
15413
15414 bool is_default() const
15415 {
15416 return atleast == 1 && atmost == 1;
15417 }
15418
15419 bool is_asterisk() const
15420 {
15421 return atleast == 0 && atmost == constants::infinity;
15422 }
15423 bool is_plus() const
15424 {
15425 return atleast == 1 && atmost == constants::infinity;
15426 }
15427 bool is_asterisk_or_plus() const
15428 {
15429 return atleast <= 1 && atmost == constants::infinity;
15430 }
15431
15432 bool has_simple_equivalence() const
15433 {
15434 return (atleast <= 1 && atmost <= 3) || (atleast == 2 && atmost <= 4) || (atleast == atmost && atmost <= 6);
15435 }
15436
15437 void multiply(const re_quantifier &q)
15438 {
15439 if (atleast != constants::infinity)
15440 {
15441 if (q.atleast != constants::infinity)
15442 atleast *= q.atleast;
15443 else
15444 atleast = constants::infinity;
15445 }
15446
15447 if (atmost != constants::infinity)
15448 {
15449 if (q.atmost != constants::infinity)
15450 atmost *= q.atmost;
15451 else
15452 atmost = constants::infinity;
15453 }
15454 }
15455
15456 void add(const re_quantifier &q)
15457 {
15458 if (atleast != constants::infinity)
15459 {
15460 if (q.atleast != constants::infinity && (atleast + q.atleast) >= atleast)
15461 atleast += q.atleast;
15462 else
15463 atleast = constants::infinity;
15464 }
15465
15466 if (atmost != constants::infinity)
15467 {
15468 if (q.atmost != constants::infinity && (atmost + q.atmost) >= atmost)
15469 atmost += q.atmost;
15470 else
15471 atmost = constants::infinity;
15472 }
15473 }
15474 };
15475 // re_quantifier
15476
15477 struct re_state
15478 {
15479 ui_l32 char_num;
15480 // character: for character.
15481 // number: for character_class, brackets, counter, repeat, backreference.
15482 // (Special case) in [0] represents a code unit for finding an entry point if
15483 // the firstchar class consists of a single code unit; otherwise invalid_u32value.
15484
15485 re_state_type type;
15486
15487 union
15488 {
15489 std::ptrdiff_t next1;
15490 re_state *next_state1;
15491 // (Special case 1) in lookaround_open points to the next of lookaround_close.
15492 // (Special case 2) in lookaround_pop points to the content of brackets instead of lookaround_open.
15493 };
15494 union
15495 {
15496 std::ptrdiff_t next2;
15497 re_state *next_state2;
15498 // character and character_class: points to another possibility, non-backtracking.
15499 // epsilon: points to another possibility, backtracking.
15500 // save_and_reset_counter, roundbracket_open, and repeat_in_push: points to a
15501 // restore state, backtracking.
15502 // check_counter: complementary to next1 based on quantifier.is_greedy.
15503 // (Special case 1) roundbracket_close, check_0_width_repeat, and backreference:
15504 // points to the next state as an exit after 0 width match.
15505 // (Special case 2) in NFA_states[0] holds the entry point for match_continuous/regex_match.
15506 // (Special case 3) in lookaround_open points to the contents of brackets.
15507 };
15508
15509 re_quantifier quantifier; // For check_counter, roundbrackets, repeasts, (?<=...) and (?<!...),
15510 // and character_class.
15511
15512 ui_l32 flags;
15513 // Bit
15514 // 0: is_not; for \B, (?!...) and (?<!...).
15515 // icase; for [0], backreference.
15516 // multiline; for bol, eol.
15517 // (Only bit used across compiler and algorithm).
15518 // 1: backrefno_unresolved. Used only in compiler.
15519 // 2: hooking. Used only in compiler.
15520 // 3: hookedlast. Used only in compiler.
15521 // 4: byn2. Used only in compiler.
15522
15523 void reset(const re_state_type t = st_character, const ui_l32 c = char_ctrl::cc_nul)
15524 {
15525 type = t;
15526 char_num = c;
15527 next1 = 1;
15528 next2 = 0;
15529 flags = 0u;
15530 quantifier.reset();
15531 }
15532
15533 bool is_character_or_class() const
15534 {
15535 return type == st_character || type == st_character_class;
15536 }
15537
15538 bool has_quantifier() const
15539 {
15540 // 1. character: size == 1 && type == character,
15541 // 2. [...]: size == 1 && type == character_class,
15542 // 3. (...): size == ? && type == roundbracket_open,
15543 // 4. (?:...): size == ? && type == epsilon && character == ':',
15544 // 5. backref: size == ? && type == backreference,
15545 // -- assertions boundary --
15546 // 6. lookaround: size == ? && type == lookaround_open,
15547 // 7. assertion: size == 0 && type == one of assertions (^, $, \b and \B).
15548 #if !defined(SRELL_ENABLE_GT)
15549 return type < st_zero_width_boundary;
15550 #else
15551 // 5.5. independent: size == ? && type == lookaround && char_num == '>',
15552 return type < st_zero_width_boundary || (type == st_lookaround_open && char_num == meta_char::mc_gt);
15553 #endif
15554 }
15555
15556 bool is_noncapturinggroup() const
15557 {
15558 return type == st_epsilon && char_num == epsilon_type::et_ncgopen;
15559 }
15560
15561 bool is_noncapturinggroup_begin_or_end() const
15562 {
15563 return type == st_epsilon && next2 == 0 && (char_num == epsilon_type::et_ncgopen || char_num == epsilon_type::et_ncgclose);
15564 }
15565
15566 bool is_branch() const
15567 {
15568 return type == st_epsilon && next2 != 0 && char_num == epsilon_type::et_alt; // '|'
15569 }
15570
15571 bool is_question_or_asterisk_before_corcc() const
15572 {
15573 return type == st_epsilon && char_num == epsilon_type::et_ccastrsk;
15574 }
15575
15576 bool is_asterisk_or_plus_for_onelen_atom() const
15577 {
15578 return type == st_epsilon && ((next1 == 1 && next2 == 2) || (next1 == 2 && next2 == 1)) && quantifier.is_asterisk_or_plus();
15579 }
15580
15581 bool is_same_character_or_charclass(const re_state &right) const
15582 {
15583 return type == right.type && char_num == right.char_num
15584 && (type != st_character || !((flags ^ right.flags) & regex_constants::icase));
15585 }
15586
15587 std::ptrdiff_t nearnext() const
15588 {
15589 return quantifier.is_greedy ? next1 : next2;
15590 }
15591
15592 std::ptrdiff_t farnext() const
15593 {
15594 return quantifier.is_greedy ? next2 : next1;
15595 }
15596 };
15597 // re_state
15598
15599 template <typename charT>
15600 struct re_compiler_state
15601 {
15602 const ui_l32 *begin;
15603 regex_constants::syntax_option_type soflags;
15604
15605 #if !defined(SRELL_NO_NAMEDCAPTURE)
15606 groupname_mapper<charT> unresolved_gnames;
15607 simple_array<ui_l32> dupranges;
15608 #endif
15609
15610 #if !defined(SRELL_NO_UNICODE_PROPERTY)
15611 identifier_charclass idchecker;
15612 #endif
15613
15614 void reset(const regex_constants::syntax_option_type f, const ui_l32 *const b)
15615 {
15616 begin = b;
15617 soflags = f;
15618
15619 #if !defined(SRELL_NO_NAMEDCAPTURE)
15620 unresolved_gnames.clear();
15621 dupranges.clear();
15622 #endif
15623
15624 #if !defined(SRELL_NO_UNICODE_PROPERTY)
15625 // idchecker.clear(); // Keeps data once created.
15626 #endif
15627 }
15628
15629 bool is_back() const
15630 {
15631 return (soflags & regex_constants::back_) ? true : false;
15632 }
15633
15634 bool is_icase() const
15635 {
15636 return (soflags & regex_constants::icase) ? true : false;
15637 }
15638
15639 bool is_multiline() const
15640 {
15641 return (soflags & regex_constants::multiline) ? true : false;
15642 }
15643
15644 bool is_dotall() const
15645 {
15646 return (soflags & regex_constants::dotall) ? true : false;
15647 }
15648 };
15649 // re_compiler_state
15650
15651 } // namespace re_detail
15652
15653 // ... "rei_state.hpp"]
15654 // ["rei_search_state.hpp" ...
15655
15656 namespace re_detail
15657 {
15658
15659 template </* typename charT, */typename BidirectionalIterator>
15660 struct re_search_state_core
15661 {
15662 const re_state/* <charT> */ *state;
15663 BidirectionalIterator iter;
15664 };
15665
15666 template <typename BidirectionalIterator>
15667 struct re_submatch_core
15668 {
15669 BidirectionalIterator open_at;
15670 BidirectionalIterator close_at;
15671 };
15672
15673 template <typename BidirectionalIterator>
15674 struct re_submatch_type
15675 {
15676 re_submatch_core<BidirectionalIterator> core;
15677 union
15678 {
15679 ui_l32 counter;
15680 void *padding_;
15681 };
15682
15683 void init(const BidirectionalIterator b)
15684 {
15685 core.open_at = core.close_at = b;
15686 counter = 0u;
15687 }
15688 };
15689
15690 #if defined(SRELL_HAS_TYPE_TRAITS)
15691 template <typename BidirectionalIterator, const bool>
15692 #else
15693 template </*typename charT, */typename BidirectionalIterator>
15694 #endif
15695 struct re_search_state_types
15696 {
15697 typedef re_submatch_core<BidirectionalIterator> submatch_core;
15698 typedef re_submatch_type<BidirectionalIterator> submatch_type;
15699 typedef ui_l32 counter_type;
15700 typedef BidirectionalIterator position_type;
15701
15702 typedef std::vector<submatch_type> submatch_array;
15703
15704 typedef re_search_state_core</*charT, */BidirectionalIterator> search_state_core;
15705
15706 typedef std::vector<search_state_core> backtracking_array;
15707 typedef std::vector<submatch_core> capture_array;
15708 typedef simple_array<counter_type> counter_array;
15709 typedef std::vector<position_type> repeat_array;
15710
15711 typedef typename backtracking_array::size_type btstack_size_type;
15712
15713 private:
15714
15715 backtracking_array bt_stack;
15716 capture_array capture_stack;
15717 counter_array counter_stack;
15718 repeat_array repeat_stack;
15719
15720 public:
15721
15722 void clear_stacks()
15723 {
15724 bt_stack.clear();
15725 capture_stack.clear();
15726 repeat_stack.clear();
15727 counter_stack.clear();
15728 }
15729
15730 btstack_size_type bt_size() const
15731 {
15732 return bt_stack.size();
15733 }
15734 void bt_resize(const btstack_size_type s)
15735 {
15736 bt_stack.resize(s);
15737 }
15738
15739 void push_bt(const search_state_core &ssc)
15740 {
15741 bt_stack.push_back(ssc);
15742 }
15743 void push_sm(const submatch_core &smc)
15744 {
15745 capture_stack.push_back(smc);
15746 }
15747 void push_c(const counter_type c)
15748 {
15749 counter_stack.push_back(c);
15750 }
15751 void push_rp(const position_type p)
15752 {
15753 repeat_stack.push_back(p);
15754 }
15755
15756 void pop_bt(search_state_core &ssc)
15757 {
15758 ssc = bt_stack.back();
15759 bt_stack.pop_back();
15760 }
15761 void pop_sm(submatch_core &smc)
15762 {
15763 smc = capture_stack.back();
15764 capture_stack.pop_back();
15765 }
15766 void pop_c(counter_type &c)
15767 {
15768 c = counter_stack.back();
15769 counter_stack.pop_back();
15770 }
15771 void pop_rp(position_type &p)
15772 {
15773 p = repeat_stack.back();
15774 repeat_stack.pop_back();
15775 }
15776
15777 public:
15778
15779 struct bottom_state
15780 {
15781 btstack_size_type btstack_size;
15782 typename capture_array::size_type capturestack_size;
15783 typename counter_array::size_type counterstack_size;
15784 typename repeat_array::size_type repeatstack_size;
15785
15786 bottom_state(const btstack_size_type bt, const re_search_state_types &ss)
15787 : btstack_size(bt)
15788 , capturestack_size(ss.capture_stack.size())
15789 , counterstack_size(ss.counter_stack.size())
15790 , repeatstack_size(ss.repeat_stack.size())
15791 {
15792 }
15793 void restore(btstack_size_type &bt, re_search_state_types &ss) const
15794 {
15795 bt = btstack_size;
15796 ss.capture_stack.resize(capturestack_size);
15797 ss.counter_stack.resize(counterstack_size);
15798 ss.repeat_stack.resize(repeatstack_size);
15799 }
15800 };
15801 };
15802
15803 #if !defined(SRELL_NO_UNISTACK)
15804 #if defined(SRELL_HAS_TYPE_TRAITS)
15805 template <typename BidirectionalIterator>
15806 struct re_search_state_types<BidirectionalIterator, true>
15807 {
15808 #else
15809 template </*typename charT1, */typename charT2>
15810 struct re_search_state_types</*charT1, */const charT2 *>
15811 {
15812 typedef const charT2 * BidirectionalIterator;
15813 #endif
15814 typedef re_submatch_core<BidirectionalIterator> submatch_core;
15815 typedef re_submatch_type<BidirectionalIterator> submatch_type;
15816 typedef ui_l32 counter_type;
15817 typedef BidirectionalIterator position_type;
15818
15819 typedef simple_array<submatch_type> submatch_array;
15820
15821 typedef re_search_state_core</*charT, */BidirectionalIterator> search_state_core;
15822
15823 typedef simple_stack backtracking_array;
15824 typedef simple_array<counter_type> counter_array;
15825 typedef simple_array<position_type> repeat_array;
15826
15827 typedef typename backtracking_array::size_type btstack_size_type;
15828
15829 private:
15830
15831 backtracking_array bt_stack;
15832
15833 public:
15834
15835 void clear_stacks()
15836 {
15837 bt_stack.clear();
15838 }
15839 void bt_resize(const btstack_size_type s)
15840 {
15841 bt_stack.resize(s);
15842 }
15843
15844 btstack_size_type bt_size() const
15845 {
15846 return bt_stack.size();
15847 }
15848
15849 void push_bt(const search_state_core &ssc)
15850 {
15851 bt_stack.push_back_t<search_state_core>(ssc);
15852 }
15853 void push_sm(const submatch_core &smc)
15854 {
15855 bt_stack.push_back_t<submatch_core>(smc);
15856 }
15857 void push_c(const counter_type c)
15858 {
15859 bt_stack.push_back_t<counter_type>(c);
15860 }
15861 void push_rp(const position_type p)
15862 {
15863 bt_stack.push_back_t<position_type>(p);
15864 }
15865
15866 void pop_bt(search_state_core &ssc)
15867 {
15868 ssc = bt_stack.pop_back_t<search_state_core>();
15869 }
15870 void pop_sm(submatch_core &smc)
15871 {
15872 smc = bt_stack.pop_back_t<submatch_core>();
15873 }
15874 void pop_c(counter_type &c)
15875 {
15876 c = bt_stack.pop_back_t<counter_type>();
15877 }
15878 void pop_rp(position_type &p)
15879 {
15880 p = bt_stack.pop_back_t<position_type>();
15881 }
15882
15883 public:
15884
15885 struct bottom_state
15886 {
15887 btstack_size_type btstack_size;
15888
15889 bottom_state(const btstack_size_type bt, const re_search_state_types &)
15890 : btstack_size(bt)
15891 {
15892 }
15893 void restore(btstack_size_type &bt, re_search_state_types &) const
15894 {
15895 bt = btstack_size;
15896 }
15897 };
15898 };
15899 #endif // !defined(SRELL_NO_UNISTACK)
15900 // re_search_state_types
15901
15902 template </*typename charT, */typename BidirectionalIterator>
15903 #if defined(SRELL_HAS_TYPE_TRAITS)
15904 class re_search_state : public re_search_state_types<BidirectionalIterator, std::is_trivially_copyable<BidirectionalIterator>::value>
15905 {
15906 private:
15907 typedef re_search_state_types<BidirectionalIterator, std::is_trivially_copyable<BidirectionalIterator>::value> base_type;
15908 #else
15909 class re_search_state : public re_search_state_types</*charT, */BidirectionalIterator>
15910 {
15911 private:
15912 typedef re_search_state_types</*charT, */BidirectionalIterator> base_type;
15913 #endif
15914
15915 public:
15916
15917 typedef typename base_type::submatch_core submatchcore_type;
15918 typedef typename base_type::submatch_type submatch_type;
15919 typedef typename base_type::counter_type counter_type;
15920 typedef typename base_type::position_type position_type;
15921
15922 typedef typename base_type::submatch_array submatch_array;
15923
15924 typedef typename base_type::search_state_core search_state_core;
15925
15926 typedef typename base_type::backtracking_array backtracking_array;
15927 typedef typename base_type::counter_array counter_array;
15928 typedef typename base_type::repeat_array repeat_array;
15929
15930 typedef typename backtracking_array::size_type btstack_size_type;
15931
15932 typedef typename base_type::bottom_state bottom_state;
15933
15934 public:
15935
15936 search_state_core ssc;
15937
15938 submatch_array bracket;
15939 counter_array counter;
15940 repeat_array repeat;
15941
15942 btstack_size_type btstack_size;
15943
15944 #if !defined(SRELL_NO_LIMIT_COUNTER)
15945 std::size_t failure_counter;
15946 #endif
15947
15948 BidirectionalIterator reallblim;
15949 BidirectionalIterator srchbegin;
15950 BidirectionalIterator lblim;
15951 BidirectionalIterator nextpos;
15952 BidirectionalIterator srchend;
15953
15954 const re_state/* <charT> */ *entry_state;
15955 regex_constants::match_flag_type flags;
15956
15957 public:
15958
15959 void init
15960 (
15961 const BidirectionalIterator begin,
15962 const BidirectionalIterator end,
15963 const BidirectionalIterator lookbehindlimit,
15964 const regex_constants::match_flag_type f
15965 )
15966 {
15967 reallblim = lblim = lookbehindlimit;
15968 nextpos = srchbegin = begin;
15969 srchend = end;
15970 flags = f;
15971 }
15972
15973 void init_for_automaton
15974 (
15975 ui_l32 num_of_submatches,
15976 const ui_l32 num_of_counters,
15977 const ui_l32 num_of_repeats
15978 )
15979 {
15980
15981 bracket.resize(num_of_submatches);
15982 counter.resize(num_of_counters);
15983 repeat.resize(num_of_repeats);
15984
15985 while (num_of_submatches > 1)
15986 bracket[--num_of_submatches].init(this->srchend);
15987 // 15.10.2.9; AtomEscape:
15988 // If the regular expression has n or more capturing parentheses
15989 // but the nth one is undefined because it hasn't captured anything,
15990 // then the backreference always succeeds.
15991
15992 // C.f., table 27 and 28 on TR1, table 142 and 143 on C++11.
15993
15994 clear_stacks();
15995 }
15996
15997 #if defined(SRELL_NO_LIMIT_COUNTER)
15998 void reset(/* const BidirectionalIterator start */)
15999 #else
16000 void reset(/* const BidirectionalIterator start, */ const std::size_t limit)
16001 #endif
16002 {
16003 ssc.state = this->entry_state;
16004
16005 bracket[0].core.open_at = ssc.iter;
16006
16007 #if !defined(SRELL_NO_LIMIT_COUNTER)
16008 failure_counter = limit;
16009 #endif
16010 }
16011
16012 bool set_bracket0(const BidirectionalIterator begin, const BidirectionalIterator end)
16013 {
16014 ssc.iter = begin;
16015 nextpos = end;
16016 return true;
16017 }
16018
16019 void clear_stacks()
16020 {
16021 btstack_size = 0;
16022 base_type::clear_stacks();
16023 }
16024 };
16025 // re_search_state
16026
16027 } // namespace re_detail
16028
16029 // ... "rei_search_state.hpp"]
16030 // ["rei_bmh.hpp" ...
16031
16032 namespace re_detail
16033 {
16034
16035 #if !defined(SRELLDBG_NO_BMH)
16036
16037 template <typename charT, typename utf_traits>
16038 class re_bmh
16039 {
16040 public:
16041
16042 re_bmh()
16043 {
16044 }
16045
16046 re_bmh(const re_bmh &right)
16047 {
16048 operator=(right);
16049 }
16050
16051 #if defined(SRELL_CPP11_MOVE_ENABLED)
16052 re_bmh(re_bmh &&right) SRELL_NOEXCEPT
16053 {
16054 operator=(std::move(right));
16055 }
16056 #endif
16057
16058 re_bmh &operator=(const re_bmh &that)
16059 {
16060 if (this != &that)
16061 {
16062 this->u32string_ = that.u32string_;
16063
16064 this->bmtable_ = that.bmtable_;
16065 this->repseq_ = that.repseq_;
16066 }
16067 return *this;
16068 }
16069
16070 #if defined(SRELL_CPP11_MOVE_ENABLED)
16071 re_bmh &operator=(re_bmh &&that) SRELL_NOEXCEPT
16072 {
16073 if (this != &that)
16074 {
16075 this->u32string_ = std::move(that.u32string_);
16076
16077 this->bmtable_ = std::move(that.bmtable_);
16078 this->repseq_ = std::move(that.repseq_);
16079 }
16080 return *this;
16081 }
16082 #endif
16083
16084 void clear()
16085 {
16086 u32string_.clear();
16087
16088 bmtable_.clear();
16089 repseq_.clear();
16090 }
16091
16092 void setup(const simple_array<ui_l32> &u32s, const bool icase)
16093 {
16094 u32string_ = u32s;
16095 setup_();
16096
16097 if (!icase)
16098 setup_for_casesensitive();
16099 else
16100 setup_for_icase();
16101 }
16102
16103 template <typename RandomAccessIterator>
16104 bool do_casesensitivesearch(re_search_state<RandomAccessIterator> &sstate, const std::random_access_iterator_tag) const
16105 {
16106 RandomAccessIterator begin = sstate.srchbegin;
16107 const RandomAccessIterator end = sstate.srchend;
16108 std::size_t offset = static_cast<std::size_t>(repseq_.size() - 1);
16109 const charT *const relastchar = &repseq_[offset];
16110
16111 for (; static_cast<std::size_t>(end - begin) > offset;)
16112 {
16113 begin += offset;
16114
16115 if (*begin == *relastchar)
16116 {
16117 const charT *re = relastchar;
16118 RandomAccessIterator tail = begin;
16119
16120 for (; *--re == *--tail;)
16121 {
16122 if (re == repseq_.data())
16123 return sstate.set_bracket0(tail, ++begin);
16124 }
16125 }
16126 offset = bmtable_[*begin & 0xff];
16127 }
16128 return false;
16129 }
16130
16131 template <typename BidirectionalIterator>
16132 bool do_casesensitivesearch(re_search_state<BidirectionalIterator> &sstate, const std::bidirectional_iterator_tag) const
16133 {
16134 BidirectionalIterator begin = sstate.srchbegin;
16135 const BidirectionalIterator end = sstate.srchend;
16136 std::size_t offset = static_cast<std::size_t>(repseq_.size() - 1);
16137 const charT *const relastchar = &repseq_[offset];
16138
16139 for (;;)
16140 {
16141 for (; offset; --offset, ++begin)
16142 if (begin == end)
16143 return false;
16144
16145 if (*begin == *relastchar)
16146 {
16147 const charT *re = relastchar;
16148 BidirectionalIterator tail = begin;
16149
16150 for (; *--re == *--tail;)
16151 {
16152 if (re == repseq_.data())
16153 return sstate.set_bracket0(tail, ++begin);
16154 }
16155 }
16156 offset = bmtable_[*begin & 0xff];
16157 }
16158 }
16159
16160 template <typename RandomAccessIterator>
16161 bool do_icasesearch(re_search_state<RandomAccessIterator> &sstate, const std::random_access_iterator_tag) const
16162 {
16163 const RandomAccessIterator begin = sstate.srchbegin;
16164 const RandomAccessIterator end = sstate.srchend;
16165 std::size_t offset = bmtable_[256];
16166 const ui_l32 entrychar = u32string_[u32string_.size() - 1];
16167 const ui_l32 *const re2ndlastchar = &u32string_[u32string_.size() - 2];
16168 RandomAccessIterator curpos = begin;
16169
16170 for (; static_cast<std::size_t>(end - curpos) > offset;)
16171 {
16172 curpos += offset;
16173
16174 for (; utf_traits::is_trailing(*curpos);)
16175 if (++curpos == end)
16176 return false;
16177
16178 const ui_l32 txtlastchar = utf_traits::codepoint(curpos, end);
16179
16180 if (txtlastchar == entrychar || unicode_case_folding::do_casefolding(txtlastchar) == entrychar)
16181 {
16182 const ui_l32 *re = re2ndlastchar;
16183 RandomAccessIterator tail = curpos;
16184
16185 for (; *re == unicode_case_folding::do_casefolding(utf_traits::dec_codepoint(tail, begin)); --re)
16186 {
16187 if (re == u32string_.data())
16188 {
16189 utf_traits::codepoint_inc(curpos, end);
16190 return sstate.set_bracket0(tail, curpos);
16191 }
16192 if (tail == begin)
16193 break;
16194 }
16195 }
16196 offset = bmtable_[txtlastchar & 0xff];
16197 }
16198 return false;
16199 }
16200
16201 template <typename BidirectionalIterator>
16202 bool do_icasesearch(re_search_state<BidirectionalIterator> &sstate, const std::bidirectional_iterator_tag) const
16203 {
16204 const BidirectionalIterator begin = sstate.srchbegin;
16205 const BidirectionalIterator end = sstate.srchend;
16206
16207 if (begin != end)
16208 {
16209 std::size_t offset = bmtable_[256];
16210 const ui_l32 entrychar = u32string_[offset];
16211 const ui_l32 *const re2ndlastchar = &u32string_[offset - 1];
16212 BidirectionalIterator curpos = begin;
16213
16214 for (;;)
16215 {
16216 for (;;)
16217 {
16218 if (++curpos == end)
16219 return false;
16220 if (!utf_traits::is_trailing(*curpos))
16221 if (--offset == 0)
16222 break;
16223 }
16224 const ui_l32 txtlastchar = utf_traits::codepoint(curpos, end);
16225
16226 if (txtlastchar == entrychar || unicode_case_folding::do_casefolding(txtlastchar) == entrychar)
16227 {
16228 const ui_l32 *re = re2ndlastchar;
16229 BidirectionalIterator tail = curpos;
16230
16231 for (; *re == unicode_case_folding::do_casefolding(utf_traits::dec_codepoint(tail, begin)); --re)
16232 {
16233 if (re == u32string_.data())
16234 {
16235 utf_traits::codepoint_inc(curpos, end);
16236 return sstate.set_bracket0(tail, curpos);
16237 }
16238 if (tail == begin)
16239 break;
16240 }
16241 }
16242 offset = bmtable_[txtlastchar & 0xff];
16243 }
16244 }
16245 return false;
16246 }
16247
16248 private:
16249
16250 void setup_()
16251 {
16252 bmtable_.resize(257);
16253 }
16254
16255 void setup_for_casesensitive()
16256 {
16257 charT mbstr[utf_traits::maxseqlen];
16258 const std::size_t u32str_lastcharpos_ = static_cast<std::size_t>(u32string_.size() - 1);
16259
16260 repseq_.clear();
16261
16262 for (std::size_t i = 0; i <= u32str_lastcharpos_; ++i)
16263 {
16264 const ui_l32 seqlen = utf_traits::to_codeunits(mbstr, u32string_[i]);
16265
16266 for (ui_l32 j = 0; j < seqlen; ++j)
16267 repseq_.push_back(mbstr[j]);
16268 }
16269
16270 for (ui_l32 i = 0; i < 256; ++i)
16271 bmtable_[i] = static_cast<std::size_t>(repseq_.size());
16272
16273 const std::size_t repseq_lastcharpos_ = static_cast<std::size_t>(repseq_.size() - 1);
16274
16275 for (std::size_t i = 0; i < repseq_lastcharpos_; ++i)
16276 bmtable_[repseq_[i] & 0xff] = repseq_lastcharpos_ - i;
16277 }
16278
16279 void setup_for_icase()
16280 {
16281 charT mbstr[utf_traits::maxseqlen];
16282 ui_l32 u32table[ucf_constants::rev_maxset];
16283 const std::size_t u32str_lastcharpos = static_cast<std::size_t>(u32string_.size() - 1);
16284 simple_array<std::size_t> minlen(u32string_.size());
16285 std::size_t cu_repseq_lastcharpos = 0;
16286
16287 for (std::size_t i = 0; i <= u32str_lastcharpos; ++i)
16288 {
16289 const ui_l32 setnum = unicode_case_folding::do_caseunfolding(u32table, u32string_[i]);
16290 ui_l32 u32c = u32table[0];
16291
16292 for (ui_l32 j = 1; j < setnum; ++j)
16293 if (u32c > u32table[j])
16294 u32c = u32table[j];
16295
16296 if (i < u32str_lastcharpos)
16297 cu_repseq_lastcharpos += minlen[i] = utf_traits::to_codeunits(mbstr, u32c);
16298 }
16299
16300 ++cu_repseq_lastcharpos;
16301
16302 for (std::size_t i = 0; i < 256; ++i)
16303 bmtable_[i] = cu_repseq_lastcharpos;
16304
16305 bmtable_[256] = --cu_repseq_lastcharpos;
16306
16307 for (std::size_t i = 0; i < u32str_lastcharpos; ++i)
16308 {
16309 const ui_l32 setnum = unicode_case_folding::do_caseunfolding(u32table, u32string_[i]);
16310
16311 for (ui_l32 j = 0; j < setnum; ++j)
16312 bmtable_[u32table[j] & 0xff] = cu_repseq_lastcharpos;
16313
16314 cu_repseq_lastcharpos -= minlen[i];
16315 }
16316 }
16317
16318 public: // For debug.
16319
16320 void print_table() const;
16321 void print_seq() const;
16322
16323 private:
16324
16325 simple_array<ui_l32> u32string_;
16326 // std::size_t bmtable_[256];
16327 simple_array<std::size_t> bmtable_;
16328 simple_array<charT> repseq_;
16329 };
16330 // re_bmh
16331
16332 #endif // !defined(SRELLDBG_NO_BMH)
16333 } // namespace re_detail
16334
16335 // ... "rei_bmh.hpp"]
16336 // ["rei_upos.hpp" ...
16337
16338 namespace re_detail
16339 {
16340
16341 struct posdata_holder
16342 {
16343 simple_array<ui_l32> indices;
16344 simple_array<ui_l32> seqs;
16345 range_pairs ranges;
16346 range_pair length;
16347
16348 void clear()
16349 {
16350 indices.clear();
16351 seqs.clear();
16352 ranges.clear();
16353 length.set(1);
16354 }
16355
16356 bool has_empty() const
16357 {
16358 return (indices.size() >= 2 && indices[0] != indices[1]) ? true : false;
16359 }
16360
16361 bool has_data() const
16362 {
16363 return ranges.size() > 0 || indices.size() > 0;
16364 }
16365
16366 bool may_contain_strings() const
16367 {
16368 return indices.size() > 0; // >= 2;
16369 }
16370
16371 void swap(posdata_holder &right)
16372 {
16373 indices.swap(right.indices);
16374 seqs.swap(right.seqs);
16375 ranges.swap(right.ranges);
16376 length.swap(right.length);
16377 }
16378
16379 void do_union(const posdata_holder &right)
16380 {
16381 simple_array<ui_l32> curseq;
16382
16383 ranges.merge(right.ranges);
16384
16385 if (right.has_empty() && !has_empty())
16386 register_emptystring();
16387
16388 for (ui_l32 seqlen = 2; seqlen < static_cast<ui_l32>(right.indices.size()); ++seqlen)
16389 {
16390 const ui_l32 end = right.indices[seqlen - 1];
16391 ui_l32 begin = right.indices[seqlen];
16392
16393 if (begin != end)
16394 {
16395 const std::size_t complen = seqlen * sizeof (ui_l32);
16396
16397 ensure_length(seqlen);
16398 curseq.resize(seqlen);
16399
16400 for (; begin < end;)
16401 {
16402 const ui_l32 inspos = find_seq(&right.seqs[begin], seqlen, complen);
16403
16404 if (inspos == indices[seqlen - 1])
16405 {
16406 for (ui_l32 i = 0; i < seqlen; ++i, ++begin)
16407 curseq[i] = right.seqs[begin];
16408
16409 seqs.insert(inspos, curseq);
16410 for (ui_l32 i = 0; i < seqlen; ++i)
16411 indices[i] += seqlen;
16412 }
16413 else
16414 begin += seqlen;
16415 }
16416 }
16417 }
16418 check_lengths();
16419 }
16420
16421 void do_subtract(const posdata_holder &right)
16422 {
16423 const ui_l32 maxlen = static_cast<ui_l32>(indices.size() <= right.indices.size() ? indices.size() : right.indices.size());
16424
16425 {
16426 range_pairs kept;
16427 range_pairs removed;
16428
16429 ranges.split_ranges(kept, removed, right.ranges);
16430 ranges.swap(kept);
16431 }
16432
16433 if (right.has_empty() && has_empty())
16434 unregister_emptystring();
16435
16436 for (ui_l32 seqlen = 2; seqlen < maxlen; ++seqlen)
16437 {
16438 const ui_l32 end = right.indices[seqlen - 1];
16439 ui_l32 begin = right.indices[seqlen];
16440
16441 if (begin != end)
16442 {
16443 const std::size_t complen = seqlen * sizeof (ui_l32);
16444
16445 for (; begin < end;)
16446 {
16447 const ui_l32 delpos = find_seq(&right.seqs[begin], seqlen, complen);
16448
16449 if (delpos < indices[seqlen - 1])
16450 {
16451 seqs.erase(delpos, seqlen);
16452
16453 for (ui_l32 i = 0; i < seqlen; ++i)
16454 indices[i] -= seqlen;
16455 }
16456 else
16457 begin += seqlen;
16458 }
16459 }
16460 }
16461 check_lengths();
16462 }
16463
16464 void do_and(const posdata_holder &right)
16465 {
16466 const ui_l32 maxlen = static_cast<ui_l32>(indices.size() <= right.indices.size() ? indices.size() : right.indices.size());
16467 posdata_holder newpos;
16468 simple_array<ui_l32> curseq;
16469
16470 {
16471 range_pairs kept;
16472
16473 ranges.split_ranges(kept, newpos.ranges, right.ranges);
16474 ranges.swap(newpos.ranges);
16475 }
16476
16477 if (has_empty() && right.has_empty())
16478 newpos.register_emptystring();
16479 else if (may_contain_strings() || right.may_contain_strings())
16480 ensure_length(1);
16481
16482 for (ui_l32 seqlen = 2; seqlen < maxlen; ++seqlen)
16483 {
16484 const ui_l32 end = right.indices[seqlen - 1];
16485 ui_l32 begin = right.indices[seqlen];
16486
16487 if (begin != end)
16488 {
16489 const std::size_t complen = seqlen * sizeof (ui_l32);
16490 const ui_l32 myend = indices[seqlen - 1];
16491
16492 curseq.resize(seqlen);
16493
16494 for (; begin < end; begin += seqlen)
16495 {
16496 const ui_l32 srcpos = find_seq(&right.seqs[begin], seqlen, complen);
16497
16498 if (srcpos < myend)
16499 {
16500 newpos.ensure_length(seqlen);
16501
16502 const ui_l32 inspos = newpos.find_seq(&right.seqs[begin], seqlen, complen);
16503
16504 if (inspos == newpos.indices[seqlen - 1])
16505 {
16506 for (ui_l32 i = 0; i < seqlen; ++i)
16507 curseq[i] = right.seqs[begin + i];
16508
16509 newpos.seqs.insert(inspos, curseq);
16510 for (ui_l32 i = 0; i < seqlen; ++i)
16511 newpos.indices[i] += seqlen;
16512 }
16513 }
16514 }
16515 }
16516 }
16517 this->indices.swap(newpos.indices);
16518 this->seqs.swap(newpos.seqs);
16519 check_lengths();
16520 }
16521
16522 void split_seqs_and_ranges(const simple_array<ui_l32> &inseqs, const bool icase, const bool back)
16523 {
16524 const ui_l32 max = static_cast<ui_l32>(inseqs.size());
16525 simple_array<ui_l32> curseq;
16526
16527 clear();
16528
16529 for (ui_l32 indx = 0; indx < max;)
16530 {
16531 const ui_l32 elen = inseqs[indx++];
16532
16533 if (elen == 1) // Range.
16534 {
16535 ranges.join(range_pair_helper(inseqs[indx], inseqs[indx + 1]));
16536 indx += 2;
16537 }
16538 else if (elen == 2)
16539 {
16540 const ui_l32 ucpval = inseqs[indx++];
16541
16542 if (ucpval != constants::ccstr_empty)
16543 ranges.join(range_pair_helper(ucpval));
16544 else
16545 register_emptystring();
16546 }
16547 else if (elen >= 3)
16548 {
16549 const ui_l32 seqlen = elen - 1;
16550
16551 ensure_length(seqlen);
16552
16553 const ui_l32 inspos = indices[seqlen - 1];
16554
16555 curseq.resize(seqlen);
16556 if (!back)
16557 {
16558 for (ui_l32 j = 0; j < seqlen; ++j, ++indx)
16559 curseq[j] = inseqs[indx];
16560 }
16561 else
16562 {
16563 for (ui_l32 j = seqlen; j; ++indx)
16564 curseq[--j] = inseqs[indx];
16565 }
16566
16567 if (icase)
16568 {
16569 for (simple_array<ui_l32>::size_type i = 0; i < curseq.size(); ++i)
16570 {
16571 const ui_l32 cf = unicode_case_folding::try_casefolding(curseq[i]);
16572
16573 if (cf != constants::invalid_u32value)
16574 curseq[i] = cf | masks::pos_cf;
16575 }
16576 }
16577
16578 const std::size_t complen = seqlen * sizeof (ui_l32);
16579
16580 for (ui_l32 i = indices[seqlen];; i += seqlen)
16581 {
16582 if (i == inspos)
16583 {
16584 seqs.insert(inspos, curseq);
16585 for (ui_l32 j = 0; j < seqlen; ++j)
16586 indices[j] += seqlen;
16587 break;
16588 }
16589
16590 if (std::memcmp(&seqs[i], curseq.data(), complen) == 0)
16591 break;
16592 }
16593
16594 }
16595 //elen == 0: Padding.
16596 }
16597
16598 // if (this->is_icase())
16599 if (icase)
16600 ranges.make_caseunfoldedcharset();
16601
16602 check_lengths();
16603
16604 }
16605
16606 private:
16607
16608 void register_emptystring()
16609 {
16610 if (indices.size() < 2)
16611 {
16612 indices.resize(2);
16613 indices[1] = 0;
16614 indices[0] = 1;
16615 }
16616 else if (indices[0] == indices[1])
16617 {
16618 ++indices[0];
16619 }
16620 length.first = 0;
16621 }
16622
16623 void unregister_emptystring()
16624 {
16625 if (indices.size() >= 2 && indices[0] != indices[1])
16626 indices[0] = indices[1];
16627 }
16628
16629 void ensure_length(const ui_l32 seqlen)
16630 {
16631 ui_l32 curlen = static_cast<ui_l32>(indices.size());
16632
16633 if (seqlen >= curlen)
16634 {
16635 indices.resize(seqlen + 1);
16636 for (; curlen <= seqlen; ++curlen)
16637 indices[curlen] = 0;
16638 }
16639 }
16640
16641 ui_l32 find_seq(const ui_l32 *const seqbegin, const ui_l32 seqlen, const std::size_t complen) const
16642 {
16643 const ui_l32 end = indices[seqlen - 1];
16644
16645 for (ui_l32 begin = indices[seqlen]; begin < end; begin += seqlen)
16646 {
16647 if (std::memcmp(seqbegin, &seqs[begin], complen) == 0)
16648 return begin;
16649 }
16650 return end;
16651 }
16652
16653 void check_lengths()
16654 {
16655 length.set(constants::max_u32value, 0);
16656
16657 for (ui_l32 i = 2; i < static_cast<ui_l32>(indices.size()); ++i)
16658 {
16659 if (indices[i] != indices[i - 1])
16660 {
16661 if (length.first > i)
16662 length.first = i;
16663 if (length.second < i)
16664 length.second = i;
16665 }
16666 }
16667
16668 if (ranges.size())
16669 {
16670 if (length.first > 1)
16671 length.first = 1;
16672 if (length.second < 1)
16673 length.second = 1;
16674 }
16675
16676 if (has_empty())
16677 length.first = 0;
16678
16679 if (length.second == 0)
16680 length.first = 0;
16681 }
16682 };
16683 // posdata_holder
16684
16685 } // namespace re_detail
16686
16687 // ... "rei_upos.hpp"]
16688 // ["rei_compiler.hpp" ...
16689
16690 namespace re_detail
16691 {
16692
16693 template <typename charT, typename traits>
16694 struct re_object_core
16695 {
16696 protected:
16697
16698 typedef re_state/*<charT>*/ state_type;
16699 typedef simple_array<state_type> state_array;
16700
16701 state_array NFA_states;
16702 re_character_class character_class;
16703
16704 #if !defined(SRELLDBG_NO_1STCHRCLS)
16705 #if !defined(SRELLDBG_NO_BITSET)
16706 bitset<traits::utf_traits::bitsetsize> firstchar_class_bs;
16707 #else
16708 range_pairs firstchar_class;
16709 #endif
16710 #endif
16711
16712 #if !defined(SRELL_NO_LIMIT_COUNTER)
16713 public:
16714
16715 std::size_t limit_counter;
16716
16717 protected:
16718 #endif
16719
16720 typedef typename traits::utf_traits utf_traits;
16721
16722 ui_l32 number_of_brackets;
16723 ui_l32 number_of_counters;
16724 ui_l32 number_of_repeats;
16725 regex_constants::syntax_option_type soflags;
16726
16727 #if !defined(SRELL_NO_NAMEDCAPTURE)
16728 groupname_mapper<charT> namedcaptures;
16729 typedef typename groupname_mapper<charT>::gname_string gname_string;
16730 #endif
16731
16732 #if !defined(SRELLDBG_NO_BMH)
16733 re_bmh<charT, utf_traits> *bmdata;
16734 #endif
16735
16736 #if !defined(SRELL_NO_LIMIT_COUNTER)
16737 private:
16738
16739 static const std::size_t lcounter_defnum_ = 16777216;
16740
16741 #endif
16742
16743 protected:
16744
16745 re_object_core() :
16746 #if !defined(SRELL_NO_LIMIT_COUNTER)
16747 limit_counter(lcounter_defnum_),
16748 #endif
16749 number_of_repeats(0u)
16750 #if !defined(SRELLDBG_NO_BMH)
16751 , bmdata(NULL)
16752 #endif
16753 {
16754 }
16755
16756 re_object_core(const re_object_core &right)
16757 #if !defined(SRELLDBG_NO_BMH)
16758 : bmdata(NULL)
16759 #endif
16760 {
16761 operator=(right);
16762 }
16763
16764 #if defined(SRELL_CPP11_MOVE_ENABLED)
16765 re_object_core(re_object_core &&right) SRELL_NOEXCEPT
16766 #if !defined(SRELLDBG_NO_BMH)
16767 : bmdata(NULL)
16768 #endif
16769 {
16770 operator=(std::move(right));
16771 }
16772 #endif
16773
16774 #if !defined(SRELLDBG_NO_BMH)
16775 ~re_object_core()
16776 {
16777 if (bmdata)
16778 delete bmdata;
16779 }
16780 #endif
16781
16782 void reset(const regex_constants::syntax_option_type flags)
16783 {
16784 NFA_states.clear();
16785 character_class.clear();
16786
16787 #if !defined(SRELLDBG_NO_1STCHRCLS)
16788 #if !defined(SRELLDBG_NO_BITSET)
16789 firstchar_class_bs.reset();
16790 #else
16791 firstchar_class.clear();
16792 #endif
16793 #endif
16794
16795 #if !defined(SRELL_NO_LIMIT_COUNTER)
16796 limit_counter = lcounter_defnum_;
16797 #endif
16798
16799 number_of_brackets = 1;
16800 number_of_counters = 0;
16801 number_of_repeats = 0;
16802 soflags = flags; // regex_constants::ECMAScript;
16803
16804 #if !defined(SRELL_NO_NAMEDCAPTURE)
16805 namedcaptures.clear();
16806 #endif
16807
16808 #if !defined(SRELLDBG_NO_BMH)
16809 if (bmdata)
16810 delete bmdata;
16811 bmdata = NULL;
16812 #endif
16813 }
16814
16815 re_object_core &operator=(const re_object_core &that)
16816 {
16817 if (this != &that)
16818 {
16819 this->NFA_states = that.NFA_states;
16820 this->character_class = that.character_class;
16821
16822 #if !defined(SRELLDBG_NO_1STCHRCLS)
16823 #if !defined(SRELLDBG_NO_BITSET)
16824 this->firstchar_class_bs = that.firstchar_class_bs;
16825 #else
16826 this->firstchar_class = that.firstchar_class;
16827 #endif
16828 #endif
16829
16830 #if !defined(SRELL_NO_LIMIT_COUNTER)
16831 this->limit_counter = that.limit_counter;
16832 #endif
16833
16834 this->number_of_brackets = that.number_of_brackets;
16835 this->number_of_counters = that.number_of_counters;
16836 this->number_of_repeats = that.number_of_repeats;
16837 this->soflags = that.soflags;
16838
16839 #if !defined(SRELL_NO_NAMEDCAPTURE)
16840 this->namedcaptures = that.namedcaptures;
16841 #endif
16842
16843 #if !defined(SRELLDBG_NO_BMH)
16844 if (that.bmdata)
16845 {
16846 if (this->bmdata)
16847 *this->bmdata = *that.bmdata;
16848 else
16849 this->bmdata = new re_bmh<charT, utf_traits>(*that.bmdata);
16850 }
16851 else if (this->bmdata)
16852 {
16853 delete this->bmdata;
16854 this->bmdata = NULL;
16855 }
16856 #endif
16857
16858 if (that.NFA_states.size())
16859 repair_nextstates(&that.NFA_states[0]);
16860 }
16861 return *this;
16862 }
16863
16864 #if defined(SRELL_CPP11_MOVE_ENABLED)
16865 re_object_core &operator=(re_object_core &&that) SRELL_NOEXCEPT
16866 {
16867 if (this != &that)
16868 {
16869 this->NFA_states = std::move(that.NFA_states);
16870 this->character_class = std::move(that.character_class);
16871
16872 #if !defined(SRELLDBG_NO_1STCHRCLS)
16873 #if !defined(SRELLDBG_NO_BITSET)
16874 this->firstchar_class_bs = std::move(that.firstchar_class_bs);
16875 #else
16876 this->firstchar_class = std::move(that.firstchar_class);
16877 #endif
16878 #endif
16879
16880 #if !defined(SRELL_NO_LIMIT_COUNTER)
16881 this->limit_counter = that.limit_counter;
16882 #endif
16883
16884 this->number_of_brackets = that.number_of_brackets;
16885 this->number_of_counters = that.number_of_counters;
16886 this->number_of_repeats = that.number_of_repeats;
16887 this->soflags = that.soflags;
16888
16889 #if !defined(SRELL_NO_NAMEDCAPTURE)
16890 this->namedcaptures = std::move(that.namedcaptures);
16891 #endif
16892
16893 #if !defined(SRELLDBG_NO_BMH)
16894 if (this->bmdata)
16895 delete this->bmdata;
16896 this->bmdata = that.bmdata;
16897 that.bmdata = NULL;
16898 #endif
16899 }
16900 return *this;
16901 }
16902 #endif // defined(SRELL_CPP11_MOVE_ENABLED)
16903
16904 void swap(re_object_core &right)
16905 {
16906 if (this != &right)
16907 {
16908 this->NFA_states.swap(right.NFA_states);
16909 this->character_class.swap(right.character_class);
16910
16911 #if !defined(SRELLDBG_NO_1STCHRCLS)
16912 #if !defined(SRELLDBG_NO_BITSET)
16913 this->firstchar_class_bs.swap(right.firstchar_class_bs);
16914 #else
16915 this->firstchar_class.swap(right.firstchar_class);
16916 #endif
16917 #endif
16918
16919 #if !defined(SRELL_NO_LIMIT_COUNTER)
16920 {
16921 const std::size_t tmp_limit_counter = this->limit_counter;
16922 this->limit_counter = right.limit_counter;
16923 right.limit_counter = tmp_limit_counter;
16924 }
16925 #endif
16926
16927 {
16928 const ui_l32 tmp_numof_brackets = this->number_of_brackets;
16929 this->number_of_brackets = right.number_of_brackets;
16930 right.number_of_brackets = tmp_numof_brackets;
16931 }
16932 {
16933 const ui_l32 tmp_numof_counters = this->number_of_counters;
16934 this->number_of_counters = right.number_of_counters;
16935 right.number_of_counters = tmp_numof_counters;
16936 }
16937 {
16938 const ui_l32 tmp_numof_repeats = this->number_of_repeats;
16939 this->number_of_repeats = right.number_of_repeats;
16940 right.number_of_repeats = tmp_numof_repeats;
16941 }
16942 {
16943 const regex_constants::syntax_option_type tmp_soflags = this->soflags;
16944 this->soflags = right.soflags;
16945 right.soflags = tmp_soflags;
16946 }
16947
16948 #if !defined(SRELL_NO_NAMEDCAPTURE)
16949 this->namedcaptures.swap(right.namedcaptures);
16950 #endif
16951
16952 #if !defined(SRELLDBG_NO_BMH)
16953 {
16954 re_bmh<charT, utf_traits> *const tmp_bmdata = this->bmdata;
16955 this->bmdata = right.bmdata;
16956 right.bmdata = tmp_bmdata;
16957 }
16958 #endif
16959 }
16960 }
16961
16962 bool set_error(const regex_constants::error_type e)
16963 {
16964 // reset();
16965 NFA_states.clear();
16966 number_of_repeats = static_cast<ui_l32>(e);
16967 return false;
16968 }
16969
16970 regex_constants::error_type ecode() const
16971 {
16972 return NFA_states.size() ? 0 : static_cast<regex_constants::error_type>(number_of_repeats);
16973 }
16974
16975 private:
16976
16977 void repair_nextstates(const state_type *const oldbase)
16978 {
16979 state_type *const newbase = &this->NFA_states[0];
16980
16981 for (typename state_array::size_type i = 0; i < this->NFA_states.size(); ++i)
16982 {
16983 state_type &state = this->NFA_states[i];
16984
16985 if (state.next_state1)
16986 state.next_state1 = state.next_state1 - oldbase + newbase;
16987
16988 if (state.next_state2)
16989 state.next_state2 = state.next_state2 - oldbase + newbase;
16990 }
16991 }
16992 };
16993 // re_object_core
16994
16995 template <typename charT, typename traits>
16996 class re_compiler : public re_object_core<charT, traits>
16997 {
16998 protected:
16999
17000 template <typename ForwardIterator>
17001 bool compile(ForwardIterator begin, const ForwardIterator end, const regex_constants::syntax_option_type flags /* = regex_constants::ECMAScript */)
17002 {
17003 simple_array<ui_l32> u32;
17004
17005 while (begin != end)
17006 {
17007 const ui_l32 u32c = utf_traits::codepoint_inc(begin, end);
17008
17009 if (u32c > constants::unicode_max_codepoint)
17010 {
17011 this->set_error(regex_constants::error_utf8);
17012 goto COMPILING_FAILURE;
17013 }
17014 u32.push_backncr(u32c);
17015 }
17016
17017 if (!compile_core(u32.data(), u32.data() + u32.size(), flags & regex_constants::pflagsmask_))
17018 {
17019 COMPILING_FAILURE:
17020 #if !defined(SRELLDBG_NO_BMH)
17021 if (this->bmdata)
17022 delete this->bmdata;
17023 this->bmdata = NULL;
17024 #endif
17025 #if !defined(SRELL_NO_THROW)
17026 throw regex_error(this->number_of_repeats);
17027 #else
17028 return false;
17029 #endif
17030 }
17031 return true;
17032 }
17033
17034 bool is_ricase() const
17035 {
17036 #if !defined(SRELL_NO_ICASE)
17037 return /* this->NFA_states.size() && */ this->NFA_states[0].flags ? true : false; // icase.
17038 #else
17039 return false;
17040 #endif
17041 }
17042
17043 bool is_vmode() const
17044 {
17045 #if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
17046 return (this->soflags & regex_constants::unicodesets) ? true : false;
17047 #else
17048 return false;
17049 #endif
17050
17051 }
17052
17053 bool is_optimize() const
17054 {
17055 return (this->soflags & regex_constants::optimize) ? true : false;
17056 }
17057
17058 private:
17059
17060 typedef re_object_core<charT, traits> base_type;
17061 typedef typename base_type::utf_traits utf_traits;
17062 typedef typename base_type::state_type state_type;
17063 typedef typename base_type::state_array state_array;
17064 #if !defined(SRELL_NO_NAMEDCAPTURE)
17065 typedef typename base_type::gname_string gname_string;
17066 #endif
17067 #if !defined(SRELL_NO_UNICODE_PROPERTY)
17068 typedef typename re_character_class::pstring pstring;
17069 #endif
17070 typedef typename state_array::size_type state_size_type;
17071
17072 typedef simple_array<ui_l32> u32array;
17073 typedef typename u32array::size_type u32array_size_type;
17074
17075 typedef re_compiler_state<charT> cvars_type;
17076
17077 bool compile_core(const ui_l32 *begin, const ui_l32 *const end, const regex_constants::syntax_option_type flags)
17078 {
17079 re_quantifier piecesize;
17080 cvars_type cvars;
17081 state_type flstate;
17082
17083 this->reset(flags);
17084 // this->soflags = flags;
17085 cvars.reset(flags, begin);
17086
17087 flstate.reset(st_epsilon);
17088 flstate.next2 = 1;
17089 this->NFA_states.push_back(flstate);
17090
17091 if (!make_nfa_states(this->NFA_states, piecesize, begin, end, cvars))
17092 {
17093 return false;
17094 }
17095
17096 this->NFA_states[0].quantifier = piecesize;
17097
17098 if (begin != end)
17099 return this->set_error(regex_constants::error_paren); // ')'s are too many.
17100
17101 #if !defined(SRELLDBG_NO_BMH)
17102 setup_bmhdata();
17103 #endif
17104
17105 flstate.type = st_success;
17106 flstate.next1 = 0;
17107 flstate.next2 = 0;
17108 this->NFA_states.push_back(flstate);
17109
17110 if (!check_backreferences(cvars))
17111 return this->set_error(regex_constants::error_backref);
17112
17113 optimise();
17114 relativejump_to_absolutejump();
17115
17116 return true;
17117 }
17118
17119 bool make_nfa_states(state_array &piece, re_quantifier &piecesize, const ui_l32 *&curpos, const ui_l32 *const end, cvars_type &cvars)
17120 {
17121 #if !defined(SRELL_NO_NAMEDCAPTURE)
17122 const ui_l32 gno_at_groupbegin = this->number_of_brackets;
17123 bool already_pushed = false;
17124 #endif
17125 state_size_type prevbranch_end = 0;
17126 state_type bstate;
17127 state_array branch;
17128 re_quantifier branchsize;
17129
17130 piecesize.set(constants::infinity, 0u);
17131
17132 bstate.reset(st_epsilon, epsilon_type::et_alt);
17133
17134 for (;;)
17135 {
17136 branch.clear();
17137
17138 if (!make_branch(branch, branchsize, curpos, end, cvars))
17139 return false;
17140
17141 if (!piecesize.is_valid() || piecesize.atleast > branchsize.atleast)
17142 piecesize.atleast = branchsize.atleast;
17143
17144 if (piecesize.atmost < branchsize.atmost)
17145 piecesize.atmost = branchsize.atmost;
17146
17147 if (curpos != end && *curpos == meta_char::mc_bar)
17148 {
17149 bstate.next2 = static_cast<std::ptrdiff_t>(branch.size()) + 2;
17150 branch.insert(0, bstate);
17151
17152 #if !defined(SRELL_NO_NAMEDCAPTURE)
17153 if (gno_at_groupbegin != this->number_of_brackets)
17154 {
17155 if (!already_pushed)
17156 {
17157 cvars.dupranges.push_back(gno_at_groupbegin);
17158 cvars.dupranges.push_back(this->number_of_brackets);
17159 already_pushed = true;
17160 }
17161 else
17162 cvars.dupranges.back() = this->number_of_brackets;
17163 }
17164 #endif
17165 }
17166
17167 if (prevbranch_end)
17168 {
17169 state_type &pbend = piece[prevbranch_end];
17170
17171 pbend.next1 = static_cast<std::ptrdiff_t>(branch.size()) + 1;
17172 pbend.char_num = epsilon_type::et_brnchend; // '/'
17173 }
17174
17175 piece += branch;
17176
17177 if (curpos == end || *curpos == meta_char::mc_rbracl)
17178 break;
17179
17180 // *curpos == '|'
17181
17182 prevbranch_end = piece.size();
17183 bstate.next2 = 0;
17184 piece.push_back(bstate);
17185
17186 ++curpos;
17187 }
17188 return true;
17189 }
17190
17191 bool make_branch(state_array &branch, re_quantifier &branchsize, const ui_l32 *&curpos, const ui_l32 *const end, cvars_type &cvars)
17192 {
17193 state_array piece;
17194 state_array piece_with_quantifier;
17195 re_quantifier quantifier;
17196 re_quantifier piecesize;
17197 range_pairs tmpcc;
17198 state_type astate;
17199 #if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
17200 posdata_holder pos;
17201 #endif
17202
17203 branchsize.reset(0);
17204
17205 for (;;)
17206 {
17207 if (curpos == end || *curpos == meta_char::mc_bar || *curpos == meta_char::mc_rbracl /* || *curpos == char_ctrl::cc_nul */) // '|', ')', '\0'.
17208 return true;
17209
17210 piece.clear();
17211 piece_with_quantifier.clear();
17212
17213 astate.reset(st_character, *curpos++);
17214
17215 switch (astate.char_num)
17216 {
17217 case meta_char::mc_rbraop: // '(':
17218 if (!parse_group(piece, piecesize, curpos, end, cvars))
17219 return false;
17220 goto AFTER_PIECE_SET;
17221
17222 case meta_char::mc_sbraop: // '[':
17223 #if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
17224 if (this->is_vmode())
17225 {
17226 pos.clear();
17227
17228 if (!parse_unicharset(pos, curpos, end, cvars))
17229 return false;
17230
17231 if (pos.may_contain_strings())
17232 {
17233 transform_seqdata(piece, pos, cvars);
17234 piecesize.set(pos.length.first, pos.length.second);
17235 goto AFTER_PIECE_SET;
17236 }
17237 tmpcc.swap(pos.ranges);
17238 }
17239 else // U-mode.
17240 #endif
17241 if (!register_character_class(tmpcc, astate, curpos, end, cvars))
17242 return false;
17243
17244 astate.char_num = tmpcc.consists_of_one_character((regex_constants::icase & this->soflags & cvars.soflags) ? true : false);
17245
17246 if (astate.char_num != constants::invalid_u32value)
17247 {
17248 const ui_l32 cf = unicode_case_folding::try_casefolding(astate.char_num);
17249
17250 if ((this->soflags ^ cvars.soflags) & regex_constants::icase)
17251 {
17252 if (cf != constants::invalid_u32value)
17253 goto REGISTER_CC;
17254 }
17255 else if (cvars.is_icase() && cf != constants::invalid_u32value)
17256 this->NFA_states[0].flags |= astate.flags = sflags::icase;
17257 }
17258 else
17259 {
17260 REGISTER_CC:
17261 astate.type = st_character_class;
17262 astate.char_num = this->character_class.register_newclass(tmpcc);
17263 }
17264
17265 goto SKIP_ICASE_CHECK_FOR_CHAR;
17266
17267 case meta_char::mc_escape: // '\\':
17268 if (curpos == end)
17269 return this->set_error(regex_constants::error_escape);
17270
17271 astate.char_num = *curpos;
17272
17273 #if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
17274 if (this->is_vmode() && ((astate.char_num | masks::asc_icase) == char_alnum::ch_p))
17275 {
17276 pos.clear();
17277
17278 if (!parse_escape_p_vmode(pos, astate, ++curpos, end, cvars))
17279 return false;
17280
17281 if (astate.type != st_character_class)
17282 {
17283 transform_seqdata(piece, pos, cvars);
17284 piecesize.set(astate.quantifier.atleast, astate.quantifier.atmost);
17285 goto AFTER_PIECE_SET;
17286 }
17287
17288 astate.char_num = this->character_class.register_newclass(pos.ranges);
17289 break;
17290 }
17291 #endif
17292
17293 switch (astate.char_num)
17294 {
17295 case char_alnum::ch_B: // 'B':
17296 astate.flags = sflags::is_not;
17297 //@fallthrough@
17298
17299 case char_alnum::ch_b: // 'b':
17300 astate.type = st_boundary; // \b, \B.
17301 astate.quantifier.reset(0);
17302 if (cvars.is_icase())
17303 {
17304 this->character_class.setup_icase_word();
17305 astate.char_num = static_cast<ui_l32>(re_character_class::icase_word);
17306 }
17307 else
17308 astate.char_num = static_cast<ui_l32>(re_character_class::word); // \w, \W.
17309 break;
17310
17311 // case char_alnum::ch_A: // 'A':
17312 // astate.type = st_bol; // '\A'
17313 // case char_alnum::ch_Z: // 'Z':
17314 // astate.type = st_eol; // '\Z'
17315 // case char_alnum::ch_z: // 'z':
17316 // astate.type = st_eol; // '\z'
17317 // case char_alnum::ch_R: // 'R':
17318 // (?>\r\n?|[\x0A-\x0C\x85\u{2028}\u{2029}])
17319
17320 // Backreferences.
17321
17322 #if !defined(SRELL_NO_NAMEDCAPTURE)
17323 // Prepared for named captures.
17324 case char_alnum::ch_k: // 'k':
17325 if (++curpos == end || *curpos != meta_char::mc_lt)
17326 return this->set_error(regex_constants::error_escape);
17327 else
17328 {
17329 const gname_string groupname = get_groupname(++curpos, end, cvars);
17330
17331 if (groupname.size() == 0)
17332 return this->set_error(regex_constants::error_escape);
17333 {
17334 astate.flags = sflags::backrefno_unresolved;
17335 astate.char_num = static_cast<ui_l32>(cvars.unresolved_gnames.size() + 1);
17336 astate.char_num = cvars.unresolved_gnames.assign_number(groupname, astate.char_num);
17337 }
17338 goto BACKREF_POSTPROCESS;
17339 }
17340 #endif
17341 default:
17342
17343 if (astate.char_num >= char_alnum::ch_1 && astate.char_num <= char_alnum::ch_9) // \1, \9.
17344 {
17345 astate.char_num = translate_numbers(curpos, end, 10, 0, 0, 0xfffffffe);
17346 // 22.2.1.1 Static Semantics: Early Errors:
17347 // It is a Syntax Error if NcapturingParens >= 23^2 - 1.
17348
17349 if (astate.char_num == constants::invalid_u32value)
17350 return this->set_error(regex_constants::error_escape);
17351
17352 astate.flags = 0u;
17353
17354 #if !defined(SRELL_NO_NAMEDCAPTURE)
17355 BACKREF_POSTPROCESS:
17356 #endif
17357 astate.next2 = 1;
17358 astate.type = st_backreference;
17359 astate.quantifier.atleast = 0;
17360
17361 if (cvars.is_icase())
17362 astate.flags |= sflags::icase;
17363
17364 goto AFTER_INCREMENT;
17365 }
17366
17367 ++curpos;
17368 if (!translate_escape(NULL, astate, curpos, end, false, false, cvars))
17369 return false;
17370 goto AFTER_INCREMENT;
17371 }
17372
17373 ++curpos;
17374 AFTER_INCREMENT:
17375
17376 break;
17377
17378 case meta_char::mc_period: // '.':
17379 astate.type = st_character_class;
17380 #if !defined(SRELL_NO_SINGLELINE)
17381 if (cvars.is_dotall())
17382 {
17383 astate.char_num = static_cast<ui_l32>(re_character_class::dotall);
17384 }
17385 else
17386 #endif
17387 {
17388 tmpcc = this->character_class[static_cast<ui_l32>(re_character_class::newline)];
17389
17390 tmpcc.negation();
17391 astate.char_num = this->character_class.register_newclass(tmpcc);
17392 }
17393 break;
17394
17395 case meta_char::mc_caret: // '^':
17396 astate.type = st_bol;
17397 astate.char_num = static_cast<ui_l32>(re_character_class::newline);
17398 astate.quantifier.reset(0);
17399 // if (current_flags.m)
17400 if (cvars.is_multiline())
17401 astate.flags = sflags::multiline;
17402 break;
17403
17404 case meta_char::mc_dollar: // '$':
17405 astate.type = st_eol;
17406 astate.char_num = static_cast<ui_l32>(re_character_class::newline);
17407 astate.quantifier.reset(0);
17408 // if (current_flags.m)
17409 if (cvars.is_multiline())
17410 astate.flags = sflags::multiline;
17411 break;
17412
17413 case meta_char::mc_astrsk: // '*':
17414 case meta_char::mc_plus: // '+':
17415 case meta_char::mc_query: // '?':
17416 case meta_char::mc_cbraop: // '{'
17417 return this->set_error(regex_constants::error_badrepeat);
17418
17419 default:;
17420 }
17421
17422 if (astate.type == st_character && ((this->soflags | cvars.soflags) & regex_constants::icase))
17423 {
17424 const ui_l32 cf = unicode_case_folding::try_casefolding(astate.char_num);
17425
17426 if (cf != constants::invalid_u32value)
17427 {
17428 if ((this->soflags ^ cvars.soflags) & regex_constants::icase)
17429 {
17430 tmpcc.set_solerange(range_pair_helper(astate.char_num));
17431 if (cvars.is_icase())
17432 tmpcc.make_caseunfoldedcharset();
17433 astate.char_num = this->character_class.register_newclass(tmpcc);
17434 astate.type = st_character_class;
17435 }
17436 else
17437 {
17438 astate.char_num = cf;
17439 this->NFA_states[0].flags |= astate.flags = sflags::icase;
17440 }
17441 }
17442 }
17443 SKIP_ICASE_CHECK_FOR_CHAR:
17444
17445 piece.push_back(astate);
17446 piecesize = astate.quantifier;
17447 AFTER_PIECE_SET:
17448
17449 if (piece.size())
17450 {
17451 const state_type &firststate = piece[0];
17452
17453 quantifier.reset(); // quantifier.atleast = quantifier.atmost = 1;
17454
17455 if (firststate.has_quantifier() && curpos != end)
17456 {
17457 switch (*curpos)
17458 {
17459 case meta_char::mc_astrsk: // '*':
17460 --quantifier.atleast;
17461 //@fallthrough@
17462
17463 case meta_char::mc_plus: // '+':
17464 quantifier.set_infinity();
17465 break;
17466
17467 case meta_char::mc_query: // '?':
17468 --quantifier.atleast;
17469 break;
17470
17471 case meta_char::mc_cbraop: // '{':
17472 ++curpos;
17473 quantifier.atleast = translate_numbers(curpos, end, 10, 1, 0, constants::max_u32value);
17474
17475 if (quantifier.atleast == constants::invalid_u32value)
17476 return this->set_error(regex_constants::error_brace);
17477
17478 if (curpos == end)
17479 return this->set_error(regex_constants::error_brace);
17480
17481 if (*curpos == meta_char::mc_comma) // ','
17482 {
17483 ++curpos;
17484 quantifier.atmost = translate_numbers(curpos, end, 10, 1, 0, constants::max_u32value);
17485
17486 if (quantifier.atmost == constants::invalid_u32value)
17487 quantifier.set_infinity();
17488
17489 if (!quantifier.is_valid())
17490 return this->set_error(regex_constants::error_badbrace);
17491 }
17492 else
17493 quantifier.atmost = quantifier.atleast;
17494
17495 if (curpos == end || *curpos != meta_char::mc_cbracl) // '}'
17496 return this->set_error(regex_constants::error_brace);
17497
17498 // *curpos == '}'
17499 break;
17500
17501 default:
17502 goto AFTER_GREEDINESS_CHECK;
17503 }
17504
17505 if (++curpos != end && *curpos == meta_char::mc_query) // '?'
17506 {
17507 quantifier.is_greedy = 0u;
17508 ++curpos;
17509 }
17510 AFTER_GREEDINESS_CHECK:;
17511 }
17512
17513 if (piece.size() == 2 && firststate.is_noncapturinggroup())
17514 {
17515 // (?:) alone or followed by a quantifier.
17516 // piece_with_quantifier += piece;
17517 ; // Does nothing.
17518 }
17519 else
17520 combine_piece_with_quantifier(piece_with_quantifier, piece, quantifier, piecesize);
17521
17522 piecesize.multiply(quantifier);
17523 branchsize.add(piecesize);
17524
17525 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
17526
17527 if (!cvars.is_back())
17528 branch += piece_with_quantifier;
17529 else
17530 branch.insert(0, piece_with_quantifier);
17531 #else
17532 branch += piece_with_quantifier;
17533 #endif
17534 }
17535 }
17536 }
17537
17538 // '('.
17539
17540 bool parse_group(state_array &piece, re_quantifier &piecesize, const ui_l32 *&curpos, const ui_l32 *const end, cvars_type &cvars)
17541 {
17542 const regex_constants::syntax_option_type originalflags(cvars.soflags);
17543 state_type rbstate;
17544
17545 if (curpos == end)
17546 return this->set_error(regex_constants::error_paren);
17547
17548 rbstate.reset(st_roundbracket_open);
17549
17550 if (*curpos == meta_char::mc_query) // '?'
17551 {
17552 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
17553 bool lookbehind = false;
17554 #endif
17555
17556 if (++curpos == end)
17557 return this->set_error(regex_constants::error_paren);
17558
17559 rbstate.char_num = *curpos;
17560
17561 if (rbstate.char_num == meta_char::mc_lt) // '<'
17562 {
17563 if (++curpos == end)
17564 return this->set_error(regex_constants::error_paren);
17565
17566 rbstate.char_num = *curpos;
17567
17568 if (rbstate.char_num != meta_char::mc_eq && rbstate.char_num != meta_char::mc_exclam)
17569 {
17570 #if !defined(SRELL_NO_NAMEDCAPTURE)
17571 const gname_string groupname = get_groupname(curpos, end, cvars);
17572
17573 if (groupname.size() == 0)
17574 return this->set_error(regex_constants::error_escape);
17575
17576 if (!this->namedcaptures.push_back(groupname, this->number_of_brackets, cvars.dupranges))
17577 return this->set_error(regex_constants::error_backref);
17578
17579 goto AFTER_EXTRB;
17580 #else
17581 return this->set_error(regex_constants::error_paren);
17582 #endif // !defined(SRELL_NO_NAMEDCAPTURE)
17583 }
17584 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
17585 lookbehind = true;
17586 #endif
17587 }
17588 else
17589 rbstate.quantifier.is_greedy = 0;
17590 // Sets .is_greedy to 0 for other assertions than lookbehinds. The automaton
17591 // checks .is_greedy to know whether lookbehinds or other assertions.
17592
17593 switch (rbstate.char_num)
17594 {
17595 case meta_char::mc_exclam: // '!':
17596 rbstate.flags = sflags::is_not;
17597 //@fallthrough@
17598
17599 case meta_char::mc_eq: // '=':
17600 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
17601 cvars.soflags = lookbehind ? (cvars.soflags | regex_constants::back_) : (cvars.soflags & ~regex_constants::back_);
17602 #else
17603 // rbstate.reverse = lookbehind;
17604 #endif
17605
17606 #if defined(SRELL_ENABLE_GT)
17607 //@fallthrough@
17608 case meta_char::mc_gt:
17609 #endif
17610 rbstate.type = st_lookaround_open;
17611 rbstate.next2 = 1;
17612 rbstate.quantifier.atleast = this->number_of_brackets;
17613 piece.push_back(rbstate);
17614 rbstate.next1 = 1;
17615 rbstate.next2 = 0;
17616 rbstate.type = st_lookaround_pop;
17617 break;
17618
17619 default:
17620 {
17621 const u32array_size_type boffset = curpos - cvars.begin;
17622 regex_constants::syntax_option_type modified = regex_constants::ECMAScript;
17623 regex_constants::syntax_option_type localflags = this->soflags;
17624 bool negate = false;
17625 bool flagerror = false;
17626
17627 for (;;)
17628 {
17629 switch (rbstate.char_num)
17630 {
17631 #if defined(SRELL_ENABLE_MODIFIERS)
17632 case meta_char::mc_colon: // ':':
17633 // (?ims-ims:...)
17634 if (modified != regex_constants::ECMAScript)
17635 goto COLON_FOUND;
17636
17637 flagerror = true;
17638 break;
17639 #endif
17640 #if !defined(SRELL_NO_UBMOD)
17641 case meta_char::mc_rbracl: // ')':
17642 if (boffset == 2 && modified != regex_constants::ECMAScript)
17643 {
17644 this->soflags = cvars.soflags = localflags;
17645 rbstate.type = st_roundbracket_close;
17646 ++curpos;
17647 return true;
17648 }
17649 flagerror = true; // "(?)" or "(?-)"
17650 break;
17651 #endif
17652 case meta_char::mc_minus: // '-':
17653 (negate ? flagerror : negate) = true;
17654 break;
17655
17656 case char_alnum::ch_i: // 'i':
17657 if (modified & regex_constants::icase)
17658 flagerror = true;
17659 modified |= regex_constants::icase;
17660 if (!negate)
17661 localflags |= regex_constants::icase;
17662 else
17663 localflags &= ~regex_constants::icase;
17664 break;
17665
17666 case char_alnum::ch_m: // 'm':
17667 if (modified & regex_constants::multiline)
17668 flagerror = true;
17669 modified |= regex_constants::multiline;
17670 if (!negate)
17671 localflags |= regex_constants::multiline;
17672 else
17673 localflags &= ~regex_constants::multiline;
17674 break;
17675
17676 case char_alnum::ch_s: // 's':
17677 if (modified & regex_constants::dotall)
17678 flagerror = true;
17679 modified |= regex_constants::dotall;
17680 if (!negate)
17681 localflags |= regex_constants::dotall;
17682 else
17683 localflags &= ~regex_constants::dotall;
17684 break;
17685
17686 #if 0
17687 // Although ECMAScript does not support v-flag modification, SRELL can.
17688 #if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
17689
17690 case char_alnum::ch_v: // 'v':
17691 if (modified & regex_constants::unicodesets)
17692 flagerror = true;
17693 modified |= regex_constants::unicodesets;
17694 if (!negate)
17695 localflags |= regex_constants::unicodesets;
17696 else
17697 localflags &= ~regex_constants::unicodesets;
17698 break;
17699 #endif
17700 #endif
17701 default:
17702 return this->set_error(regex_constants::error_paren);
17703 }
17704
17705 if (flagerror)
17706 return this->set_error(regex_constants::error_modifier);
17707
17708 if (++curpos == end)
17709 return this->set_error(regex_constants::error_paren);
17710
17711 rbstate.char_num = *curpos;
17712 }
17713 #if defined(SRELL_ENABLE_MODIFIERS)
17714 COLON_FOUND:;
17715 cvars.soflags = localflags;
17716 #endif
17717 }
17718 //@fallthrough@
17719
17720 case meta_char::mc_colon:
17721 rbstate.type = st_epsilon;
17722 rbstate.char_num = epsilon_type::et_ncgopen;
17723 rbstate.quantifier.atleast = this->number_of_brackets;
17724 }
17725
17726 ++curpos;
17727 piece.push_back(rbstate);
17728 }
17729 #if !defined(SRELL_NO_NAMEDCAPTURE)
17730 AFTER_EXTRB:
17731 #endif
17732
17733 if (rbstate.type == st_roundbracket_open)
17734 {
17735 rbstate.char_num = this->number_of_brackets;
17736 rbstate.next1 = 2;
17737 rbstate.next2 = 1;
17738 piece.push_back(rbstate);
17739 ++this->number_of_brackets;
17740
17741 rbstate.type = st_roundbracket_pop;
17742 rbstate.next1 = 0;
17743 rbstate.next2 = 0;
17744 piece.push_back(rbstate);
17745 }
17746
17747 #if !defined(SRELL_NO_NAMEDCAPTURE)
17748 const typename simple_array<ui_l32>::size_type dzsize = cvars.dupranges.size();
17749 #endif
17750
17751 if (!make_nfa_states(piece, piecesize, curpos, end, cvars))
17752 return false;
17753
17754 // end or ')'?
17755 if (curpos == end)
17756 return this->set_error(regex_constants::error_paren);
17757
17758 ++curpos;
17759
17760 #if !defined(SRELL_NO_NAMEDCAPTURE)
17761 cvars.dupranges.resize(dzsize);
17762 #endif
17763 cvars.soflags = originalflags;
17764
17765 state_type &firststate = piece[0];
17766
17767 firststate.quantifier.atmost = this->number_of_brackets - 1;
17768
17769 switch (rbstate.type)
17770 {
17771 case st_epsilon:
17772 if (piece.size() == 2) // ':' + something.
17773 {
17774 piece.erase(0);
17775 return true;
17776 }
17777
17778 firststate.quantifier.is_greedy = piecesize.atleast != 0u;
17779 rbstate.char_num = epsilon_type::et_ncgclose;
17780 break;
17781
17782 case st_lookaround_pop:
17783 #if defined(SRELL_FIXEDWIDTHLOOKBEHIND)
17784 if (firststate.quantifier.is_greedy) // > 0 means lookbehind.
17785 {
17786 if (!piecesize.is_same() || piecesize.is_infinity())
17787 return this->set_error(regex_constants::error_lookbehind);
17788
17789 firststate.quantifier.is_greedy = piecesize.atleast;
17790 }
17791 #endif
17792
17793 #if defined(SRELL_ENABLE_GT)
17794 if (firststate.char_num != meta_char::mc_gt)
17795 #endif
17796 piecesize.reset(0);
17797
17798 firststate.next1 = static_cast<std::ptrdiff_t>(piece.size()) + 1;
17799 piece[1].quantifier.atmost = firststate.quantifier.atmost;
17800
17801 rbstate.type = st_lookaround_close;
17802 rbstate.next1 = 0;
17803 break;
17804
17805 default:
17806 rbstate.type = st_roundbracket_close;
17807 rbstate.next1 = 1;
17808 rbstate.next2 = 1;
17809
17810 {
17811 re_quantifier &rb_pop = piece[1].quantifier;
17812
17813 rb_pop.atleast = firststate.quantifier.atleast = rbstate.char_num + 1;
17814 rb_pop.atmost = firststate.quantifier.atmost;
17815 }
17816 firststate.quantifier.is_greedy = piecesize.atleast != 0u;
17817 }
17818
17819 piece.push_back(rbstate);
17820 return true;
17821 }
17822
17823 void combine_piece_with_quantifier(state_array &piece_with_quantifier, state_array &piece, const re_quantifier &quantifier, const re_quantifier &piecesize)
17824 {
17825 if (quantifier.atmost == 0)
17826 return;
17827
17828 state_type &firststate = piece[0];
17829 state_type qstate;
17830
17831 qstate.reset(st_epsilon, firststate.is_character_or_class()
17832 ? epsilon_type::et_ccastrsk
17833 : epsilon_type::et_dfastrsk);
17834 qstate.quantifier = quantifier;
17835
17836 if (quantifier.atmost == 1)
17837 {
17838 if (quantifier.atleast == 0)
17839 {
17840 qstate.next2 = static_cast<std::ptrdiff_t>(piece.size()) + 1;
17841 if (!quantifier.is_greedy)
17842 {
17843 qstate.next1 = qstate.next2;
17844 qstate.next2 = 1;
17845 }
17846
17847 piece[piece.size() - 1].quantifier = quantifier;
17848 piece_with_quantifier.push_back(qstate);
17849 }
17850
17851 if (firststate.type == st_roundbracket_open)
17852 firststate.quantifier.atmost = piece[1].quantifier.atmost = 0;
17853
17854 piece_with_quantifier += piece;
17855 return;
17856 }
17857
17858 // atmost >= 2
17859
17860 #if !defined(SRELLDBG_NO_SIMPLEEQUIV)
17861
17862 // A counter requires at least 6 states: save, restore, check, inc, dec, ATOM(s).
17863 // A character or charclass quantified by one of these has a simple equivalent representation:
17864 // a{0,2} 1.epsilon(2|5), 2.CHorCL(3), 3.epsilon(4|5), 4.CHorCL(5), [5].
17865 // a{0,3} 1.epsilon(2|7), 2.CHorCL(3), 3.epsilon(4|7), 4.CHorCL(5), 5.epsilon(6|7), 6.CHorCL(7), [7].
17866 // a{1,2} 1.CHorCL(2), 2.epsilon(3|4), 3.CHorCL(4), [4].
17867 // a{1,3} 1.CHorCL(2), 2.epsilon(3|6), 3.CHorCL(4), 4.epsilon(5|6), 5.CHorCL(6), [6].
17868 // a{2,3} 1.CHorCL(2), 2.CHorCL(3), 3.epsilon(4|5), 4.CHorCL(5), [5].
17869 // a{2,4} 1.CHorCL(2), 2.CHorCL(3), 3.epsilon(4|7), 4.CHorCL(5), 5.epsilon(6|7), 6.CHorCL(7), [7].
17870 if (qstate.char_num == epsilon_type::et_ccastrsk && quantifier.has_simple_equivalence())
17871 {
17872 const state_size_type branchsize = piece.size() + 1;
17873
17874 for (ui_l32 i = 0; i < quantifier.atleast; ++i)
17875 piece_with_quantifier += piece;
17876
17877 firststate.quantifier.set(0, 1, quantifier.is_greedy);
17878
17879 qstate.next2 = (quantifier.atmost - quantifier.atleast) * branchsize;
17880 if (!quantifier.is_greedy)
17881 {
17882 qstate.next1 = qstate.next2;
17883 qstate.next2 = 1;
17884 }
17885
17886 for (ui_l32 i = quantifier.atleast; i < quantifier.atmost; ++i)
17887 {
17888 piece_with_quantifier.push_back(qstate);
17889 piece_with_quantifier += piece;
17890 quantifier.is_greedy ? (qstate.next2 -= branchsize) : (qstate.next1 -= branchsize);
17891 }
17892 return;
17893 }
17894 #endif // !defined(SRELLDBG_NO_SIMPLEEQUIV)
17895
17896 if (firststate.type == st_backreference && (firststate.flags & sflags::backrefno_unresolved))
17897 {
17898 firststate.quantifier = quantifier;
17899 qstate.quantifier.set(1, 0);
17900 goto ADD_CHECKER;
17901 }
17902 else if (firststate.is_noncapturinggroup() && (piecesize.atleast == 0 || firststate.quantifier.is_valid()))
17903 {
17904 qstate.quantifier = firststate.quantifier;
17905 ADD_CHECKER:
17906 qstate.char_num = this->number_of_repeats++;
17907
17908 qstate.type = st_repeat_in_pop;
17909 qstate.next1 = 0;
17910 qstate.next2 = 0;
17911 piece.insert(0, qstate);
17912
17913 qstate.type = st_repeat_in_push;
17914 qstate.next1 = 2;
17915 qstate.next2 = 1;
17916 piece.insert(0, qstate);
17917
17918 qstate.quantifier = quantifier;
17919 qstate.type = st_check_0_width_repeat;
17920 qstate.next2 = 1;
17921 piece.push_back(qstate);
17922
17923 if (piecesize.atleast == 0 && piece[2].type != st_backreference)
17924 goto USE_COUNTER;
17925
17926 qstate.char_num = epsilon_type::et_dfastrsk;
17927 }
17928
17929 qstate.type = st_epsilon;
17930
17931 if (quantifier.is_asterisk()) // {0,}
17932 {
17933 // greedy: 1.epsilon(2|4), 2.piece, 3.LAorC0WR(1|0), 4.OutOfLoop.
17934 // !greedy: 1.epsilon(4|2), 2.piece, 3.LAorC0WR(1|0), 4.OutOfLoop.
17935 // LAorC0WR: LastAtomOfPiece or Check0WidthRepeat.
17936 }
17937 else if (quantifier.is_plus()) // {1,}
17938 {
17939 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
17940
17941 if (qstate.char_num == epsilon_type::et_ccastrsk)
17942 {
17943 piece_with_quantifier += piece;
17944 --qstate.quantifier.atleast; // /.+/ -> /..*/.
17945 }
17946 else
17947 #endif
17948 {
17949 const ui_l32 backup = qstate.char_num;
17950
17951 qstate.next1 = 2;
17952 qstate.next2 = 0;
17953 qstate.char_num = epsilon_type::et_jmpinlp;
17954 piece_with_quantifier.push_back(qstate);
17955 qstate.char_num = backup;
17956 // greedy: 1.epsilon(3), 2.epsilon(3|5), 3.piece, 4.LAorC0WR(2|0), 5.OutOfLoop.
17957 // !greedy: 1.epsilon(3), 2.epsilon(5|3), 3.piece, 4.LAorC0WR(2|0), 5.OutOfLoop.
17958 }
17959 }
17960 else
17961 {
17962 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
17963 if (qstate.char_num == epsilon_type::et_ccastrsk && quantifier.is_infinity())
17964 {
17965 if (quantifier.atleast <= 6)
17966 {
17967 for (ui_l32 i = 0; i < quantifier.atleast; ++i)
17968 piece_with_quantifier += piece;
17969 qstate.quantifier.atleast = 0;
17970 goto APPEND_ATOM;
17971 }
17972 qstate.quantifier.atmost = qstate.quantifier.atleast;
17973 }
17974 #endif // !defined(SRELLDBG_NO_ASTERISK_OPT)
17975
17976 USE_COUNTER:
17977
17978 qstate.char_num = this->number_of_counters++;
17979
17980 qstate.type = st_save_and_reset_counter;
17981 qstate.next1 = 2;
17982 qstate.next2 = 1;
17983 piece_with_quantifier.push_back(qstate);
17984
17985 qstate.type = st_restore_counter;
17986 qstate.next1 = 0;
17987 qstate.next2 = 0;
17988 piece_with_quantifier.push_back(qstate);
17989 // 1.save_and_reset_counter(3|2), 2.restore_counter(0|0),
17990
17991 qstate.next1 = 0;
17992 qstate.next2 = 0;
17993 qstate.type = st_decrement_counter;
17994 piece.insert(0, qstate);
17995
17996 qstate.next1 = 2;
17997 qstate.next2 = piece[1].is_character_or_class() ? 0 : 1;
17998 qstate.type = st_increment_counter;
17999 piece.insert(0, qstate);
18000
18001 qstate.type = st_check_counter;
18002 // greedy: 3.check_counter(4|6), 4.piece, 5.LAorC0WR(3|0), 6.OutOfLoop.
18003 // !greedy: 3.check_counter(6|4), 4.piece, 5.LAorC0WR(3|0), 6.OutOfLoop.
18004 // 4.piece = { 4a.increment_counter(4c|4b), 4b.decrement_counter(0|0), 4c.OriginalPiece }.
18005 }
18006
18007 APPEND_ATOM:
18008
18009 const std::ptrdiff_t piece_size = static_cast<std::ptrdiff_t>(piece.size());
18010 state_type &laststate = piece[piece_size - 1];
18011
18012 laststate.quantifier = qstate.quantifier;
18013 laststate.next1 = 0 - piece_size;
18014
18015 qstate.next1 = 1;
18016 qstate.next2 = piece_size + 1;
18017 if (!quantifier.is_greedy)
18018 {
18019 qstate.next1 = qstate.next2;
18020 qstate.next2 = 1;
18021 }
18022 piece_with_quantifier.push_back(qstate);
18023 piece_with_quantifier += piece;
18024
18025 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
18026
18027 if (qstate.quantifier.atmost != quantifier.atmost)
18028 {
18029 qstate.type = st_epsilon;
18030 qstate.char_num = epsilon_type::et_ccastrsk;
18031 qstate.quantifier.atleast = 0;
18032 qstate.quantifier.atmost = quantifier.atmost;
18033 piece.erase(0, piece_size - 1);
18034 goto APPEND_ATOM;
18035 }
18036 #endif // !defined(SRELLDBG_NO_ASTERISK_OPT)
18037 }
18038
18039 // '['.
18040
18041 bool register_character_class(range_pairs &ranges, state_type &castate, const ui_l32 *&curpos, const ui_l32 *const end, const cvars_type &cvars)
18042 {
18043 range_pair code_range;
18044 state_type rstate;
18045 range_pairs curranges;
18046
18047 if (curpos == end)
18048 return this->set_error(regex_constants::error_brack);
18049
18050 ranges.clear();
18051
18052 if (*curpos == meta_char::mc_caret) // '^'
18053 {
18054 castate.flags = sflags::is_not;
18055 ++curpos;
18056 }
18057
18058 for (;;)
18059 {
18060 if (curpos == end)
18061 return this->set_error(regex_constants::error_brack);
18062
18063 if (*curpos == meta_char::mc_sbracl) // ']'
18064 break;
18065
18066 rstate.reset();
18067
18068 if (!get_character_in_class(curranges, rstate, curpos, end, cvars))
18069 return false;
18070
18071 if (rstate.type == st_character_class)
18072 {
18073 ranges.merge(curranges);
18074
18075 if (curpos != end && *curpos == meta_char::mc_minus) // '-'
18076 {
18077 if (++curpos == end)
18078 return this->set_error(regex_constants::error_brack);
18079
18080 if (*curpos == meta_char::mc_sbracl)
18081 break; // OK.
18082
18083 return this->set_error(regex_constants::error_brack);
18084 }
18085 continue;
18086 }
18087
18088 code_range.first = code_range.second = rstate.char_num;
18089
18090 if (curpos == end)
18091 return this->set_error(regex_constants::error_brack);
18092
18093 if (*curpos == meta_char::mc_minus) // '-'
18094 {
18095 ++curpos;
18096
18097 if (curpos == end)
18098 return this->set_error(regex_constants::error_brack);
18099
18100 if (*curpos == meta_char::mc_sbracl)
18101 {
18102 PUSH_SEPARATELY:
18103 ranges.join(code_range);
18104 code_range.first = code_range.second = meta_char::mc_minus;
18105 }
18106 else
18107 {
18108 if (!get_character_in_class(curranges, rstate, curpos, end, cvars))
18109 return false;
18110
18111 if (rstate.type == st_character_class)
18112 {
18113 ranges.merge(curranges);
18114 goto PUSH_SEPARATELY;
18115 }
18116
18117 code_range.second = rstate.char_num;
18118
18119 if (!code_range.is_range_valid())
18120 return this->set_error(regex_constants::error_range);
18121 }
18122 }
18123 ranges.join(code_range);
18124 }
18125
18126 // *curpos == ']'
18127 ++curpos;
18128 if (cvars.is_icase())
18129 ranges.make_caseunfoldedcharset();
18130
18131 if (castate.flags) // is_not.
18132 {
18133 ranges.negation();
18134 castate.flags = 0u;
18135 }
18136
18137 return true;
18138 }
18139
18140 bool get_character_in_class(range_pairs &rp, state_type &rstate, const ui_l32 *&curpos, const ui_l32 *const end, const cvars_type &cvars)
18141 {
18142 rstate.char_num = *curpos++;
18143
18144 if (rstate.char_num != meta_char::mc_escape) // '\\'
18145 return true;
18146
18147 rp.clear();
18148
18149 if (curpos == end)
18150 return this->set_error(regex_constants::error_escape);
18151
18152 rstate.char_num = *curpos++;
18153
18154 return translate_escape(&rp, rstate, curpos, end, true, false, cvars);
18155 }
18156
18157 void add_predefclass_to_charclass(range_pairs &cls, const state_type &castate)
18158 {
18159 range_pairs predefclass = this->character_class[castate.char_num];
18160
18161 if (castate.flags) // is_not.
18162 predefclass.negation();
18163
18164 cls.merge(predefclass);
18165 }
18166
18167 #if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
18168
18169 bool parse_unicharset(posdata_holder &basepos, const ui_l32 *&curpos, const ui_l32 *const end, const cvars_type &cvars)
18170 {
18171 if (curpos == end)
18172 return this->set_error(regex_constants::error_brack);
18173
18174 const bool invert = (*curpos == meta_char::mc_caret) ? (++curpos, true) : false; // '^'
18175 enum operation_type
18176 {
18177 op_init, op_firstcc, op_union, op_intersection, op_subtraction
18178 };
18179 operation_type otype = op_init;
18180 posdata_holder newpos;
18181 range_pair code_range;
18182 state_type castate;
18183
18184 // ClassSetCharacter ::
18185 // \ CharacterEscape[+UnicodeMode]
18186 // \ ClassSetReservedPunctuator
18187 // \ b
18188
18189 for (;;)
18190 {
18191 if (curpos == end)
18192 goto ERROR_NOT_CLOSED;
18193
18194 if (*curpos == meta_char::mc_sbracl) // ']'
18195 break;
18196
18197 ui_l32 next2chars = constants::invalid_u32value;
18198
18199 if (curpos + 1 != end && *curpos == curpos[1])
18200 {
18201 switch (*curpos)
18202 {
18203 // ClassSetReservedDoublePunctuator :: one of
18204 // && !! ## $$ %% ** ++ ,, .. :: ;; << == >> ?? @@ ^^ `` ~~
18205 case char_other::co_amp: // '&'
18206 case meta_char::mc_exclam: // '!'
18207 case meta_char::mc_sharp: // '#'
18208 case meta_char::mc_dollar: // '$'
18209 case char_other::co_perc: // '%'
18210 case meta_char::mc_astrsk: // '*'
18211 case meta_char::mc_plus: // '+'
18212 case meta_char::mc_comma: // ','
18213 case meta_char::mc_period: // '.'
18214 case meta_char::mc_colon: // ':'
18215 case char_other::co_smcln: // ';'
18216 case meta_char::mc_lt: // '<'
18217 case meta_char::mc_eq: // '='
18218 case meta_char::mc_gt: // '>'
18219 case meta_char::mc_query: // '?'
18220 case char_other::co_atmrk: // '@'
18221 case meta_char::mc_caret: // '^'
18222 case char_other::co_grav: // '`'
18223 case char_other::co_tilde: // '~'
18224 case meta_char::mc_minus: // '-'
18225 next2chars = *curpos;
18226 //@fallthrough@
18227 default:;
18228 }
18229 }
18230
18231 switch (otype)
18232 {
18233 case op_intersection:
18234 if (next2chars != char_other::co_amp)
18235 goto ERROR_DOUBLE_PUNCT;
18236 curpos += 2;
18237 break;
18238
18239 case op_subtraction:
18240 if (next2chars != meta_char::mc_minus)
18241 goto ERROR_DOUBLE_PUNCT;
18242 curpos += 2;
18243 break;
18244
18245 case op_firstcc:
18246 if (next2chars == char_other::co_amp)
18247 otype = op_intersection;
18248 else if (next2chars == meta_char::mc_minus)
18249 otype = op_subtraction;
18250 else if (next2chars == constants::invalid_u32value)
18251 break;
18252 else
18253 goto ERROR_DOUBLE_PUNCT;
18254
18255 curpos += 2;
18256 break;
18257
18258 // case op_union:
18259 // case op_init:
18260 default:
18261 if (next2chars != constants::invalid_u32value)
18262 goto ERROR_DOUBLE_PUNCT;
18263 }
18264
18265 AFTER_OPERATOR:
18266
18267 if (curpos == end)
18268 goto ERROR_NOT_CLOSED;
18269
18270 castate.reset();
18271
18272 if (*curpos == meta_char::mc_sbraop) // '['
18273 {
18274 ++curpos;
18275 if (!parse_unicharset(newpos, curpos, end, cvars))
18276 return false;
18277 }
18278 else if (!get_character_in_class_vmode(newpos, castate, curpos, end, cvars, false))
18279 return false;
18280
18281 if (curpos == end)
18282 goto ERROR_NOT_CLOSED;
18283
18284 if (otype == op_init)
18285 otype = op_firstcc;
18286 else if (otype == op_firstcc)
18287 otype = op_union;
18288
18289 if (castate.type == st_character)
18290 {
18291 if (!newpos.has_data())
18292 {
18293 code_range.set(castate.char_num);
18294
18295 if (otype <= op_union)
18296 {
18297 if (*curpos == meta_char::mc_minus) // '-'
18298 {
18299 ++curpos;
18300
18301 if (curpos == end)
18302 goto ERROR_BROKEN_RANGE;
18303
18304 if (otype < op_union && *curpos == meta_char::mc_minus) // '-'
18305 {
18306 otype = op_subtraction;
18307 ++curpos;
18308 basepos.ranges.join(code_range);
18309 goto AFTER_OPERATOR;
18310 }
18311
18312 if (!get_character_in_class_vmode(newpos, castate, curpos, end, cvars, true))
18313 return false;
18314
18315 otype = op_union;
18316 code_range.second = castate.char_num;
18317 if (!code_range.is_range_valid())
18318 goto ERROR_BROKEN_RANGE;
18319 }
18320 }
18321
18322 newpos.ranges.join(code_range);
18323 if (cvars.is_icase())
18324 newpos.ranges.make_caseunfoldedcharset();
18325 }
18326 }
18327
18328 switch (otype)
18329 {
18330 case op_union:
18331 basepos.do_union(newpos);
18332 break;
18333
18334 case op_intersection:
18335 basepos.do_and(newpos);
18336 break;
18337
18338 case op_subtraction:
18339 basepos.do_subtract(newpos);
18340 break;
18341
18342 // case op_firstcc:
18343 default:
18344 basepos.swap(newpos);
18345 }
18346 }
18347
18348 // *curpos == ']'
18349 ++curpos;
18350
18351 if (invert)
18352 {
18353 if (basepos.may_contain_strings())
18354 return this->set_error(regex_constants::error_complement);
18355
18356 basepos.ranges.negation();
18357 }
18358
18359 return true;
18360
18361 ERROR_NOT_CLOSED:
18362 return this->set_error(regex_constants::error_brack);
18363
18364 ERROR_BROKEN_RANGE:
18365 return this->set_error(regex_constants::error_range);
18366
18367 ERROR_DOUBLE_PUNCT:
18368 return this->set_error(regex_constants::error_operator);
18369 }
18370
18371 bool get_character_in_class_vmode(
18372 posdata_holder &pos,
18373 state_type &castate,
18374 const ui_l32 *&curpos,
18375 const ui_l32 *const end,
18376 const cvars_type &cvars,
18377 const bool no_ccesc
18378 )
18379 {
18380 pos.clear();
18381
18382 castate.char_num = *curpos++;
18383
18384 switch (castate.char_num)
18385 {
18386 // ClassSetSyntaxCharacter :: one of
18387 // ( ) [ ] { } / - \ |
18388 case meta_char::mc_rbraop: // '('
18389 case meta_char::mc_rbracl: // ')'
18390 case meta_char::mc_sbraop: // '['
18391 case meta_char::mc_sbracl: // ']'
18392 case meta_char::mc_cbraop: // '{'
18393 case meta_char::mc_cbracl: // '}'
18394 case char_other::co_slash: // '/'
18395 case meta_char::mc_minus: // '-'
18396 case meta_char::mc_bar: // '|'
18397 return this->set_error(regex_constants::error_noescape);
18398 //@fallthrough@
18399
18400 case meta_char::mc_escape: // '\\'
18401 break;
18402
18403 default:
18404 return true;
18405 }
18406
18407 if (curpos == end)
18408 return this->set_error(regex_constants::error_escape);
18409
18410 castate.char_num = *curpos++;
18411
18412 if (!no_ccesc)
18413 {
18414 if (((castate.char_num | masks::asc_icase) == char_alnum::ch_p))
18415 {
18416 return parse_escape_p_vmode(pos, castate, curpos, end, cvars);
18417 }
18418 else if (castate.char_num == char_alnum::ch_q)
18419 {
18420 if (curpos == end || *curpos != meta_char::mc_cbraop) // '{'
18421 return this->set_error(regex_constants::error_escape);
18422
18423 simple_array<ui_l32> seqs;
18424 simple_array<ui_l32> curseq;
18425 posdata_holder dummypos;
18426 state_type castate2;
18427
18428 ++curpos;
18429
18430 for (;;)
18431 {
18432 if (curpos == end)
18433 return this->set_error(regex_constants::error_escape);
18434
18435 if (*curpos == meta_char::mc_bar || *curpos == meta_char::mc_cbracl) // '|' or '}'.
18436 {
18437 const ui_l32 seqlen = static_cast<ui_l32>(curseq.size());
18438
18439 if (seqlen <= 1)
18440 {
18441 seqs.push_backncr(2);
18442 seqs.push_backncr(seqlen != 0 ? curseq[0] : constants::ccstr_empty);
18443 }
18444 else // >= 2
18445 {
18446 seqs.push_backncr(seqlen + 1);
18447 seqs.append(curseq);
18448 }
18449
18450 if (*curpos == meta_char::mc_cbracl) // '}'
18451 break;
18452
18453 curseq.clear();
18454 ++curpos;
18455 }
18456 else
18457 {
18458 castate2.reset();
18459 if (!get_character_in_class_vmode(dummypos, castate2, curpos, end, cvars, true))
18460 return false;
18461
18462 curseq.push_backncr(castate2.char_num);
18463 }
18464 }
18465
18466 ++curpos;
18467 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
18468 pos.split_seqs_and_ranges(seqs, cvars.is_icase(), cvars.is_back());
18469 #else
18470 pos.split_seqs_and_ranges(seqs, cvars.is_icase(), false);
18471 #endif
18472
18473 return true;
18474 }
18475 }
18476
18477 switch (castate.char_num)
18478 {
18479 // ClassSetReservedPunctuator :: one of
18480 // & - ! # % , : ; < = > @ ` ~
18481 case char_other::co_amp: // '&'
18482 case meta_char::mc_exclam: // '!'
18483 case meta_char::mc_sharp: // '#'
18484 case char_other::co_perc: // '%'
18485 case meta_char::mc_comma: // ','
18486 case meta_char::mc_colon: // ':'
18487 case char_other::co_smcln: // ';'
18488 case meta_char::mc_lt: // '<'
18489 case meta_char::mc_eq: // '='
18490 case meta_char::mc_gt: // '>'
18491 case char_other::co_atmrk: // '@'
18492 case char_other::co_grav: // '`'
18493 case char_other::co_tilde: // '~'
18494 return true;
18495
18496 default:;
18497 }
18498
18499 return translate_escape(&pos.ranges, castate, curpos, end, true, no_ccesc, cvars);
18500 }
18501
18502 #endif // !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
18503
18504 bool translate_escape(range_pairs *const rp, state_type &eastate, const ui_l32 *&curpos, const ui_l32 *const end, const bool insidecharclass, const bool no_ccesc, const cvars_type &cvars)
18505 {
18506 if (!no_ccesc)
18507 {
18508 // Predefined classes.
18509 switch (eastate.char_num)
18510 {
18511 case char_alnum::ch_D: // 'D':
18512 eastate.flags = sflags::is_not;
18513 //@fallthrough@
18514
18515 case char_alnum::ch_d: // 'd':
18516 eastate.char_num = static_cast<ui_l32>(re_character_class::digit); // \d, \D.
18517 break;
18518
18519 case char_alnum::ch_S: // 'S':
18520 eastate.flags = sflags::is_not;
18521 //@fallthrough@
18522
18523 case char_alnum::ch_s: // 's':
18524 eastate.char_num = static_cast<ui_l32>(re_character_class::space); // \s, \S.
18525 break;
18526
18527 case char_alnum::ch_W: // 'W':
18528 eastate.flags = sflags::is_not;
18529 //@fallthrough@
18530
18531 case char_alnum::ch_w: // 'w':
18532 if (cvars.is_icase())
18533 {
18534 this->character_class.setup_icase_word();
18535 eastate.char_num = static_cast<ui_l32>(re_character_class::icase_word);
18536 }
18537 else
18538 eastate.char_num = static_cast<ui_l32>(re_character_class::word); // \w, \W.
18539 break;
18540
18541 #if !defined(SRELL_NO_UNICODE_PROPERTY)
18542 // Prepared for Unicode properties and script names.
18543 case char_alnum::ch_P: // \P{...}
18544 eastate.flags = sflags::is_not;
18545 //@fallthrough@
18546
18547 case char_alnum::ch_p: // \p{...}
18548 {
18549 range_pairs lranges;
18550 range_pairs *const pranges = (rp != NULL) ? rp : &lranges;
18551 const ui_l32 pnumber = lookup_propertynumber(curpos, end);
18552
18553 if (pnumber == up_constants::error_property || this->character_class.is_pos(pnumber))
18554 return this->set_error(regex_constants::error_property);
18555
18556 this->character_class.load_upranges(*pranges, pnumber);
18557
18558 if (eastate.flags) // is_not.
18559 {
18560 pranges->negation();
18561 eastate.flags = 0u;
18562 }
18563
18564 if (!insidecharclass && cvars.is_icase())
18565 pranges->make_caseunfoldedcharset();
18566
18567 if (rp == NULL)
18568 eastate.char_num = this->character_class.register_newclass(*pranges);
18569 }
18570 eastate.type = st_character_class;
18571 return true;
18572 #endif // !defined(SRELL_NO_UNICODE_PROPERTY)
18573
18574 default:
18575 goto CLASS_OR_CHARACTER_ESCAPE;
18576 }
18577
18578 if (rp != NULL)
18579 add_predefclass_to_charclass(*rp, eastate);
18580 else
18581 {
18582 if (eastate.flags) // is_not.
18583 {
18584 range_pairs lranges;
18585
18586 add_predefclass_to_charclass(lranges, eastate);
18587 eastate.char_num = this->character_class.register_newclass(lranges);
18588 }
18589 }
18590
18591 eastate.flags = 0u;
18592 eastate.type = st_character_class;
18593 return true;
18594 }
18595
18596 CLASS_OR_CHARACTER_ESCAPE:
18597
18598 switch (eastate.char_num)
18599 {
18600 case char_alnum::ch_b:
18601 eastate.char_num = char_ctrl::cc_bs; // '\b' 0x08:BS
18602 break;
18603
18604 case char_alnum::ch_t:
18605 eastate.char_num = char_ctrl::cc_htab; // '\t' 0x09:HT
18606 break;
18607
18608 case char_alnum::ch_n:
18609 eastate.char_num = char_ctrl::cc_nl; // '\n' 0x0a:LF
18610 break;
18611
18612 case char_alnum::ch_v:
18613 eastate.char_num = char_ctrl::cc_vtab; // '\v' 0x0b:VT
18614 break;
18615
18616 case char_alnum::ch_f:
18617 eastate.char_num = char_ctrl::cc_ff; // '\f' 0x0c:FF
18618 break;
18619
18620 case char_alnum::ch_r:
18621 eastate.char_num = char_ctrl::cc_cr; // '\r' 0x0d:CR
18622 break;
18623
18624 case char_alnum::ch_c: // \cX
18625 if (curpos != end)
18626 {
18627 eastate.char_num = static_cast<ui_l32>(*curpos | masks::asc_icase);
18628
18629 if (eastate.char_num >= char_alnum::ch_a && eastate.char_num <= char_alnum::ch_z)
18630 eastate.char_num = static_cast<ui_l32>(*curpos++ & 0x1f);
18631 else
18632 {
18633 return this->set_error(regex_constants::error_escape); // Strict.
18634 // eastate.char_num = char_alnum::ch_c; // Loose.
18635 }
18636 }
18637 break;
18638
18639 case char_alnum::ch_0:
18640 eastate.char_num = char_ctrl::cc_nul; // '\0' 0x00:NUL
18641 break;
18642
18643 case char_alnum::ch_x: // \xhh
18644 eastate.char_num = translate_numbers(curpos, end, 16, 2, 2, 0xff);
18645 break;
18646
18647 case char_alnum::ch_u: // \uhhhh, \u{h~hhhhhh}
18648 eastate.char_num = parse_escape_u(curpos, end);
18649 break;
18650
18651 // SyntaxCharacter, '/', and '-'.
18652 case meta_char::mc_caret: // '^'
18653 case meta_char::mc_dollar: // '$'
18654 case meta_char::mc_escape: // '\\'
18655 case meta_char::mc_period: // '.'
18656 case meta_char::mc_astrsk: // '*'
18657 case meta_char::mc_plus: // '+'
18658 case meta_char::mc_query: // '?'
18659 case meta_char::mc_rbraop: // '('
18660 case meta_char::mc_rbracl: // ')'
18661 case meta_char::mc_sbraop: // '['
18662 case meta_char::mc_sbracl: // ']'
18663 case meta_char::mc_cbraop: // '{'
18664 case meta_char::mc_cbracl: // '}'
18665 case meta_char::mc_bar: // '|'
18666 case char_other::co_slash: // '/'
18667 break;
18668
18669 case meta_char::mc_minus: // '-' allowed only in charclass.
18670 if (insidecharclass)
18671 break;
18672 //@fallthrough@
18673
18674 default:
18675 eastate.char_num = constants::invalid_u32value;
18676 }
18677
18678 if (eastate.char_num == constants::invalid_u32value)
18679 return this->set_error(regex_constants::error_escape);
18680
18681 return true;
18682 }
18683
18684 ui_l32 parse_escape_u(const ui_l32 *&curpos, const ui_l32 *const end) const
18685 {
18686 ui_l32 ucp;
18687
18688 if (curpos == end)
18689 return constants::invalid_u32value;
18690
18691 if (*curpos == meta_char::mc_cbraop)
18692 {
18693 // ucp = translate_numbers(++curpos, end, 16, 1, 6, constants::unicode_max_codepoint, true);
18694 ucp = translate_numbers(++curpos, end, 16, 1, 0, constants::unicode_max_codepoint);
18695
18696 if (curpos == end || *curpos != meta_char::mc_cbracl)
18697 return constants::invalid_u32value;
18698
18699 ++curpos;
18700 }
18701 else
18702 {
18703 ucp = translate_numbers(curpos, end, 16, 4, 4, 0xffff);
18704
18705 if (ucp >= 0xd800 && ucp <= 0xdbff)
18706 {
18707 const ui_l32 *prefetch = curpos;
18708
18709 if (prefetch != end && *prefetch == meta_char::mc_escape && ++prefetch != end && *prefetch == char_alnum::ch_u)
18710 {
18711 ++prefetch;
18712
18713 const ui_l32 nextucp = translate_numbers(prefetch, end, 16, 4, 4, 0xffff);
18714
18715 if (nextucp >= 0xdc00 && nextucp <= 0xdfff)
18716 {
18717 curpos = prefetch;
18718 ucp = (((ucp << 10) & 0xffc00) | (nextucp & 0x3ff)) + 0x10000;
18719 }
18720 }
18721 }
18722 }
18723 return ucp;
18724 }
18725
18726 #if !defined(SRELL_NO_UNICODE_PROPERTY)
18727
18728 ui_l32 lookup_propertynumber(const ui_l32 *&curpos, const ui_l32 *const end)
18729 {
18730 pstring pname;
18731 pstring pvalue;
18732
18733 if (curpos == end || *curpos != meta_char::mc_cbraop) // '{'
18734 return up_constants::error_property;
18735
18736 const bool digit_seen = get_property_name_or_value(pvalue, ++curpos, end);
18737
18738 if (!pvalue.size())
18739 return up_constants::error_property;
18740
18741 if (!digit_seen)
18742 {
18743 if (curpos == end)
18744 return up_constants::error_property;
18745
18746 if (*curpos == meta_char::mc_eq) // '='
18747 {
18748 pname = pvalue;
18749 get_property_name_or_value(pvalue, ++curpos, end);
18750 if (!pvalue.size())
18751 return up_constants::error_property;
18752 }
18753 }
18754
18755 if (curpos == end || *curpos != meta_char::mc_cbracl) // '}'
18756 return up_constants::error_property;
18757
18758 ++curpos;
18759
18760 pname.push_backncr(0);
18761 pvalue.push_backncr(0);
18762
18763 return this->character_class.get_propertynumber(pname, pvalue);
18764 }
18765
18766 bool get_property_name_or_value(pstring &name_or_value, const ui_l32 *&curpos, const ui_l32 *const end) const
18767 {
18768 bool number_found = false;
18769
18770 name_or_value.clear();
18771
18772 for (;; ++curpos)
18773 {
18774 if (curpos == end)
18775 break;
18776
18777 const ui_l32 curchar = *curpos;
18778
18779 if (curchar >= char_alnum::ch_A && curchar <= char_alnum::ch_Z)
18780 ;
18781 else if (curchar >= char_alnum::ch_a && curchar <= char_alnum::ch_z)
18782 ;
18783 else if (curchar == char_other::co_ll) // '_'
18784 ;
18785 else if (curchar >= char_alnum::ch_0 && curchar <= char_alnum::ch_9)
18786 number_found = true;
18787 else
18788 break;
18789
18790 name_or_value.append(1, static_cast<typename pstring::value_type>(curchar));
18791 }
18792
18793 // A string containing a digit cannot be a property name.
18794 return number_found;
18795 }
18796
18797 #endif // !defined(SRELL_NO_UNICODE_PROPERTY)
18798
18799 #if !defined(SRELL_NO_NAMEDCAPTURE)
18800
18801 #if !defined(SRELL_NO_UNICODE_PROPERTY)
18802 gname_string get_groupname(const ui_l32 *&curpos, const ui_l32 *const end, cvars_type &cvars)
18803 #else
18804 gname_string get_groupname(const ui_l32 *&curpos, const ui_l32 *const end, cvars_type &)
18805 #endif
18806 {
18807 charT mbstr[utf_traits::maxseqlen];
18808 gname_string groupname;
18809
18810 #if !defined(SRELL_NO_UNICODE_PROPERTY)
18811 cvars.idchecker.setup();
18812 #endif
18813 for (;;)
18814 {
18815 if (curpos == end)
18816 {
18817 groupname.clear();
18818 break;
18819 }
18820
18821 ui_l32 curchar = *curpos++;
18822
18823 if (curchar == meta_char::mc_gt) // '>'
18824 break;
18825
18826 if (curchar == meta_char::mc_escape && curpos != end && *curpos == char_alnum::ch_u) // '\\', 'u'.
18827 curchar = parse_escape_u(++curpos, end);
18828
18829 #if defined(SRELL_NO_UNICODE_PROPERTY)
18830 if (curchar != meta_char::mc_escape)
18831 #else
18832 if (cvars.idchecker.is_identifier(curchar, groupname.size() != 0))
18833 #endif
18834 ; // OK.
18835 else
18836 curchar = constants::invalid_u32value;
18837
18838 if (curchar == constants::invalid_u32value)
18839 {
18840 groupname.clear();
18841 break;
18842 }
18843
18844 const ui_l32 seqlen = utf_traits::to_codeunits(mbstr, curchar);
18845
18846 for (ui_l32 i = 0; i < seqlen; ++i)
18847 groupname.append(1, mbstr[i]);
18848 }
18849
18850 return groupname;
18851 }
18852 #endif // !defined(SRELL_NO_NAMEDCAPTURE)
18853
18854 #if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
18855
18856 bool parse_escape_p_vmode(posdata_holder &pos, state_type &ccepastate, const ui_l32 *&curpos, const ui_l32 *const end, const cvars_type &cvars)
18857 {
18858 if (curpos == end)
18859 return this->set_error(regex_constants::error_escape);
18860
18861 if (ccepastate.char_num == char_alnum::ch_P) // \P{...}
18862 ccepastate.flags = sflags::is_not;
18863
18864 ccepastate.char_num = lookup_propertynumber(curpos, end);
18865
18866 if (ccepastate.char_num == up_constants::error_property)
18867 return this->set_error(regex_constants::error_property);
18868
18869 if (!this->character_class.is_pos(ccepastate.char_num))
18870 {
18871 pos.clear();
18872
18873 this->character_class.load_upranges(pos.ranges, ccepastate.char_num);
18874
18875 if (cvars.is_icase() && ccepastate.char_num >= static_cast<ui_l32>(re_character_class::number_of_predefcls))
18876 pos.ranges.make_caseunfoldedcharset();
18877
18878 if (ccepastate.flags) // is_not.
18879 {
18880 pos.ranges.negation();
18881 ccepastate.flags = 0u;
18882 }
18883
18884 ccepastate.type = st_character_class;
18885 ccepastate.quantifier.reset(1);
18886 }
18887 else
18888 {
18889 simple_array<ui_l32> sequences;
18890
18891 this->character_class.get_prawdata(sequences, ccepastate.char_num);
18892 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
18893 pos.split_seqs_and_ranges(sequences, cvars.is_icase(), cvars.is_back());
18894 #else
18895 pos.split_seqs_and_ranges(sequences, cvars.is_icase(), false);
18896 #endif
18897
18898 ccepastate.quantifier.set(pos.length.first, pos.length.second);
18899
18900 if (ccepastate.flags) // is_not.
18901 return this->set_error(regex_constants::error_complement);
18902 }
18903 return true;
18904 }
18905
18906 ui_l32 transform_seqdata(state_array &piece, const posdata_holder &pos, const cvars_type &cvars)
18907 {
18908 ui_l32 seqlen = static_cast<ui_l32>(pos.indices.size());
18909 state_type castate;
18910
18911 castate.reset(st_character_class);
18912 castate.char_num = this->character_class.register_newclass(pos.ranges);
18913
18914 if (seqlen > 0)
18915 {
18916 const bool has_empty = pos.has_empty();
18917 #if !defined(SRELLDBG_NO_ASTERISK_OPT) && !defined(SRELLDBG_NO_POS_OPT) && !defined(SRELLDBG_NO_STATEHOOK)
18918 bool hooked = false;
18919 state_size_type prevbranch_end = 0;
18920 #else
18921 state_size_type prevbranch_alt = 0;
18922 #endif
18923 state_type branchstate;
18924 state_type jumpstate;
18925 state_array branch;
18926
18927 branch.resize(seqlen);
18928 for (ui_l32 i = 0; i < seqlen; ++i)
18929 branch[i].reset();
18930
18931 branchstate.reset(st_epsilon, epsilon_type::et_alt);
18932
18933 jumpstate.reset(st_epsilon, epsilon_type::et_brnchend); // '/'
18934
18935 --seqlen;
18936
18937 for (; seqlen >= 2; --seqlen)
18938 {
18939 ui_l32 offset = pos.indices[seqlen];
18940 const ui_l32 seqend = pos.indices[seqlen - 1];
18941
18942 if (offset != seqend)
18943 {
18944 branch.resize(seqlen + 1);
18945 branch[seqlen] = jumpstate;
18946
18947 for (ui_l32 count = 0; offset < seqend; ++offset)
18948 {
18949 const ui_l32 seqch = pos.seqs[offset];
18950 state_type *const ost = &branch[count++];
18951
18952 ost->char_num = seqch & masks::pos_char;
18953 this->NFA_states[0].flags |= ost->flags = (seqch & masks::pos_cf) ? sflags::icase : 0u;
18954
18955 if (count == seqlen)
18956 {
18957 #if !defined(SRELLDBG_NO_ASTERISK_OPT) && !defined(SRELLDBG_NO_POS_OPT) && !defined(SRELLDBG_NO_STATEHOOK)
18958 state_size_type bpos = 0;
18959
18960 for (state_size_type ppos = 0; ppos < piece.size();)
18961 {
18962 if (bpos + 1 == branch.size())
18963 {
18964 piece.push_backncr(piece[ppos]);
18965
18966 state_type &pst = piece[ppos];
18967
18968 pst.reset(st_epsilon, epsilon_type::et_alt);
18969 pst.next1 = static_cast<std::ptrdiff_t>(piece.size()) - ppos - 1;
18970 pst.next2 = static_cast<std::ptrdiff_t>(prevbranch_end) - ppos;
18971 pst.flags |= sflags::hooking;
18972 hooked = true;
18973
18974 state_type &bst = piece[piece.size() - 1];
18975
18976 bst.next1 = bst.next1 - pst.next1;
18977 bst.next2 = bst.next2 ? (bst.next2 - pst.next1) : 0;
18978 bst.flags |= sflags::hookedlast;
18979 goto SKIP_APPEND;
18980 }
18981
18982 state_type &pst = piece[ppos];
18983
18984 #if 0
18985 if (pst.type == st_epsilon)
18986 ppos += pst.next1;
18987 else
18988 #endif
18989 if (pst.char_num == branch[bpos].char_num)
18990 {
18991 ++bpos;
18992 ppos += pst.next1;
18993 }
18994 else if (pst.next2)
18995 ppos += pst.next2;
18996 else
18997 {
18998 pst.next2 = static_cast<std::ptrdiff_t>(piece.size()) - ppos;
18999 break;
19000 }
19001 }
19002
19003 {
19004 const state_size_type alen = branch.size() - bpos;
19005
19006 if (piece.size())
19007 piece[prevbranch_end].next1 = piece.size() + alen - 1 - prevbranch_end;
19008
19009 piece.append(branch, bpos, alen);
19010 prevbranch_end = piece.size() - 1;
19011 }
19012 SKIP_APPEND:
19013 count = 0;
19014
19015 #else // defined(SRELLDBG_NO_ASTERISK_OPT) || defined(SRELLDBG_NO_POS_OPT) || defined(SRELLDBG_NO_STATEHOOK)
19016
19017 if (piece.size())
19018 {
19019 state_type &laststate = piece[piece.size() - 1];
19020
19021 laststate.next1 = seqlen + 2;
19022 piece[prevbranch_alt].next2 = static_cast<std::ptrdiff_t>(piece.size()) - prevbranch_alt;
19023 }
19024 prevbranch_alt = piece.size();
19025 piece.push_back(branchstate);
19026 piece.append(branch);
19027 count = 0;
19028
19029 #endif // !defined(SRELLDBG_NO_ASTERISK_OPT) && !defined(SRELLDBG_NO_POS_OPT) && !defined(SRELLDBG_NO_STATEHOOK)
19030 }
19031 }
19032 }
19033 }
19034
19035 if (piece.size())
19036 {
19037 #if !defined(SRELLDBG_NO_ASTERISK_OPT) && !defined(SRELLDBG_NO_POS_OPT) && !defined(SRELLDBG_NO_STATEHOOK)
19038 state_type &laststate = piece[prevbranch_end];
19039
19040 laststate.next1 = piece.size() + (has_empty ? 2 : 1) - prevbranch_end;
19041
19042 branchstate.next2 = static_cast<std::ptrdiff_t>(piece.size()) + 1;
19043 piece.insert(0, branchstate);
19044 #else
19045 state_type &laststate = piece[piece.size() - 1];
19046
19047 laststate.next1 = has_empty ? 3 : 2;
19048
19049 piece[prevbranch_alt].next2 = static_cast<std::ptrdiff_t>(piece.size()) - prevbranch_alt;
19050 #endif
19051 }
19052
19053 if (has_empty)
19054 {
19055 branchstate.next2 = 2;
19056 piece.push_back(branchstate);
19057 }
19058
19059 piece.push_back(castate);
19060
19061 branchstate.char_num = epsilon_type::et_ncgopen;
19062 branchstate.next1 = 1;
19063 branchstate.next2 = 0;
19064 branchstate.quantifier.set(1, 0);
19065 piece.insert(0, branchstate);
19066
19067 branchstate.char_num = epsilon_type::et_ncgclose;
19068 branchstate.quantifier.atmost = 1;
19069 piece.push_back(branchstate);
19070
19071 #if !defined(SRELLDBG_NO_ASTERISK_OPT) && !defined(SRELLDBG_NO_POS_OPT) && !defined(SRELLDBG_NO_STATEHOOK)
19072 if (hooked)
19073 reorder_piece(piece);
19074 #endif
19075
19076 if ((this->soflags ^ cvars.soflags) & regex_constants::icase)
19077 {
19078 range_pairs charclass;
19079
19080 if (cvars.is_icase())
19081 {
19082 ui_l32 ucftable[ucf_constants::rev_maxset] = {};
19083
19084 for (state_size_type i = 0; i < piece.size(); ++i)
19085 {
19086 state_type &st = piece[i];
19087
19088 if (st.type == st_character && (st.flags & sflags::icase))
19089 {
19090 const ui_l32 setnum = unicode_case_folding::do_caseunfolding(ucftable, st.char_num);
19091
19092 charclass.clear();
19093 for (ui_l32 j = 0; j < setnum; ++j)
19094 charclass.join(range_pair_helper(ucftable[j]));
19095
19096 st.char_num = this->character_class.register_newclass(charclass);
19097 st.type = st_character_class;
19098 st.flags = 0u; // icase.
19099 }
19100 }
19101 }
19102 else
19103 {
19104 charclass.resize(1);
19105 for (state_size_type i = 0; i < piece.size(); ++i)
19106 {
19107 state_type &st = piece[i];
19108
19109 if (st.type == st_character && unicode_case_folding::try_casefolding(st.char_num) != constants::invalid_u32value)
19110 {
19111 charclass[0] = range_pair_helper(st.char_num);
19112
19113 st.type = st_character_class;
19114 st.char_num = this->character_class.register_newclass(charclass);
19115 }
19116 }
19117 }
19118 }
19119 }
19120 return castate.char_num;
19121 }
19122
19123 #endif // !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY)
19124
19125 ui_l32 translate_numbers(const ui_l32 *&curpos, const ui_l32 *const end, const int radix, const std::size_t minsize, const std::size_t maxsize, const ui_l32 maxvalue) const
19126 {
19127 std::size_t count = 0;
19128 ui_l32 u32value = 0;
19129 ui_l32 num;
19130
19131 for (; maxsize == 0 || count < maxsize; ++curpos, ++count)
19132 {
19133
19134 if (curpos == end)
19135 break;
19136
19137 const ui_l32 ch = *curpos;
19138
19139 if ((ch >= char_alnum::ch_0 && ch <= char_alnum::ch_7) || (radix >= 10 && (ch == char_alnum::ch_8 || ch == char_alnum::ch_9)))
19140 num = ch - char_alnum::ch_0;
19141 else if (radix == 16)
19142 {
19143 if (ch >= char_alnum::ch_A && ch <= char_alnum::ch_F)
19144 num = ch - char_alnum::ch_A + 10;
19145 else if (ch >= char_alnum::ch_a && ch <= char_alnum::ch_f)
19146 num = ch - char_alnum::ch_a + 10;
19147 else
19148 break;
19149 }
19150 else
19151 break;
19152
19153 const ui_l32 nextvalue = u32value * radix + num;
19154
19155 if ((/* maxvalue != 0 && */ nextvalue > maxvalue) || nextvalue < u32value)
19156 break;
19157
19158 u32value = nextvalue;
19159 }
19160
19161 if (count >= minsize)
19162 return u32value;
19163
19164 return constants::invalid_u32value;
19165 }
19166
19167 bool check_backreferences(cvars_type &cvars)
19168 {
19169 const state_size_type orgsize = this->NFA_states.size();
19170 simple_array<bool> gno_found;
19171 state_array additions;
19172
19173 gno_found.resize(this->number_of_brackets, false);
19174
19175 for (state_size_type backrefpos = 1; backrefpos < orgsize; ++backrefpos)
19176 {
19177 state_type &brs = this->NFA_states[backrefpos];
19178
19179 if (brs.type == st_roundbracket_close)
19180 {
19181 gno_found[brs.char_num] = true;
19182 }
19183 else if (brs.type == st_backreference)
19184 {
19185 const ui_l32 &backrefno = brs.char_num;
19186
19187 #if !defined(SRELL_NO_NAMEDCAPTURE)
19188 if (brs.flags & sflags::backrefno_unresolved)
19189 {
19190 if (backrefno > cvars.unresolved_gnames.size())
19191 return false; // Internal error.
19192
19193 brs.flags &= ~sflags::backrefno_unresolved;
19194
19195 const ui_l32 *list = this->namedcaptures[cvars.unresolved_gnames[backrefno]];
19196
19197 if (list == NULL || *list < 1)
19198 return false;
19199
19200 const ui_l32 num = list[0];
19201 state_type newbrs(brs);
19202
19203 for (ui_l32 ino = 1; ino <= num; ++ino)
19204 {
19205 if (gno_found[list[ino]])
19206 {
19207 newbrs.char_num = list[ino];
19208 additions.push_back(newbrs);
19209 }
19210 }
19211
19212 if (additions.size() == 0)
19213 goto REMOVE_BACKREF;
19214
19215 brs.char_num = additions[0].char_num;
19216 additions.erase(0);
19217
19218 if (additions.size())
19219 {
19220 const std::ptrdiff_t next1abs = static_cast<std::ptrdiff_t>(backrefpos + brs.next1);
19221 const std::ptrdiff_t next2abs = static_cast<std::ptrdiff_t>(backrefpos + brs.next2);
19222
19223 brs.next1 = static_cast<std::ptrdiff_t>(this->NFA_states.size() - backrefpos);
19224 brs.next2 = static_cast<std::ptrdiff_t>(this->NFA_states.size() - backrefpos);
19225 brs.flags |= sflags::hooking;
19226
19227 const std::ptrdiff_t lastabs = static_cast<std::ptrdiff_t>(this->NFA_states.size() + additions.size() - 1);
19228 state_type &laststate = additions.back();
19229
19230 laststate.flags |= sflags::hookedlast;
19231 laststate.next1 = static_cast<std::ptrdiff_t>(next1abs - lastabs);
19232 laststate.next2 = static_cast<std::ptrdiff_t>(next2abs - lastabs);
19233 this->NFA_states += additions;
19234 additions.clear();
19235 }
19236 }
19237 else
19238 #endif
19239 {
19240
19241 if (backrefno >= this->number_of_brackets || !gno_found[backrefno])
19242 {
19243 REMOVE_BACKREF:
19244 if (brs.next1 == -1)
19245 {
19246 state_type &prevstate = this->NFA_states[backrefpos + brs.next1];
19247
19248 if (prevstate.is_asterisk_or_plus_for_onelen_atom())
19249 {
19250 prevstate.next1 = 2;
19251 prevstate.next2 = 0;
19252 prevstate.char_num = epsilon_type::et_fmrbckrf;
19253 }
19254 }
19255
19256 brs.type = st_epsilon;
19257 brs.next2 = 0;
19258 brs.char_num = epsilon_type::et_fmrbckrf;
19259 }
19260 }
19261 }
19262 }
19263 if (orgsize != this->NFA_states.size())
19264 reorder_piece(this->NFA_states);
19265
19266 return true;
19267 }
19268
19269 #if !defined(SRELLDBG_NO_1STCHRCLS)
19270
19271 void create_firstchar_class()
19272 {
19273 #if !defined(SRELLDBG_NO_BITSET)
19274 range_pairs fcc;
19275 #else
19276 range_pairs &fcc = this->firstchar_class;
19277 #endif
19278
19279 const bool canbe0length = gather_nextchars(fcc, static_cast<state_size_type>(this->NFA_states[0].next1), 0u, false);
19280
19281 if (canbe0length)
19282 {
19283 fcc.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint));
19284 // Expressions would consist of assertions only, such as /^$/.
19285 // We cannot but accept every codepoint.
19286 }
19287
19288 #if !defined(SRELLDBG_NO_BITSET)
19289 this->NFA_states[0].quantifier.is_greedy = this->character_class.register_newclass(fcc);
19290 #endif
19291
19292 #if !defined(SRELLDBG_NO_BITSET) || !defined(SRELLDBG_NO_SCFINDER)
19293 set_bitset_table(fcc);
19294 #endif
19295 }
19296
19297 #if !defined(SRELLDBG_NO_BITSET) || !defined(SRELLDBG_NO_SCFINDER)
19298 void set_bitset_table(const range_pairs &fcc)
19299 {
19300 #if !defined(SRELLDBG_NO_SCFINDER)
19301 ui_l32 entrychar = constants::max_u32value;
19302 #endif
19303
19304 for (typename range_pairs::size_type i = 0; i < fcc.size(); ++i)
19305 {
19306 const range_pair &range = fcc[i];
19307
19308 #if 0
19309 ui_l32 second = range.second <= constants::unicode_max_codepoint ? range.second : constants::unicode_max_codepoint;
19310
19311 #if defined(_MSC_VER) && _MSC_VER >= 1400
19312 #pragma warning(push)
19313 #pragma warning(disable:4127)
19314 #endif
19315 if (utf_traits::utftype == 16)
19316 #if defined(_MSC_VER) && _MSC_VER >= 1400
19317 #pragma warning(pop)
19318 #endif
19319 {
19320 if (second >= 0x10000 && range.first < 0x10000)
19321 {
19322 this->firstchar_class_bs.set_range(utf_traits::firstcodeunit(0x10000) & utf_traits::bitsetmask, utf_traits::firstcodeunit(second) & utf_traits::bitsetmask);
19323 second = 0xffff;
19324 }
19325 }
19326 this->firstchar_class_bs.set_range(utf_traits::firstcodeunit(range.first) & utf_traits::bitsetmask, utf_traits::firstcodeunit(second) & utf_traits::bitsetmask);
19327
19328 #else
19329 for (ui_l32 ucp = range.first; ucp <= utf_traits::maxcpvalue; ++ucp)
19330 {
19331 const ui_l32 firstcu = utf_traits::firstcodeunit(ucp) & utf_traits::bitsetmask;
19332
19333 #if !defined(SRELLDBG_NO_BITSET)
19334 this->firstchar_class_bs.set(firstcu);
19335 #endif
19336
19337 #if !defined(SRELLDBG_NO_SCFINDER)
19338 if (entrychar != constants::invalid_u32value)
19339 {
19340 if (entrychar != firstcu)
19341 {
19342 if (entrychar == constants::max_u32value)
19343 entrychar = firstcu;
19344 else
19345 entrychar = constants::invalid_u32value;
19346 }
19347 }
19348 #endif
19349 if (ucp == range.second)
19350 break;
19351 }
19352 #endif
19353 }
19354 #if !defined(SRELLDBG_NO_SCFINDER)
19355 this->NFA_states[0].char_num = entrychar;
19356 #endif
19357 }
19358 #endif // !defined(SRELLDBG_NO_BITSET) || !defined(SRELLDBG_NO_SCFINDER)
19359 #endif // !defined(SRELLDBG_NO_1STCHRCLS)
19360
19361 bool gather_nextchars(range_pairs &nextcharclass, state_size_type pos, simple_array<bool> &checked, const ui_l32 bracket_number, const bool subsequent) const
19362 {
19363 bool canbe0length = false;
19364
19365 for (;;)
19366 {
19367 const state_type &state = this->NFA_states[pos];
19368
19369 if (checked[pos])
19370 break;
19371
19372 checked[pos] = true;
19373
19374 if (state.next2
19375 && (state.type != st_check_counter || !state.quantifier.is_greedy || state.quantifier.atleast == 0)
19376 && (state.type != st_save_and_reset_counter)
19377 && (state.type != st_roundbracket_open)
19378 && (state.type != st_roundbracket_close || state.char_num != bracket_number)
19379 && (state.type != st_repeat_in_push)
19380 && (state.type != st_backreference || (state.next1 != state.next2))
19381 && (state.type != st_lookaround_open))
19382 if (gather_nextchars(nextcharclass, pos + state.next2, checked, bracket_number, subsequent))
19383 canbe0length = true;
19384
19385 switch (state.type)
19386 {
19387 case st_character:
19388 if (!(state.flags & sflags::icase))
19389 {
19390 nextcharclass.join(range_pair_helper(state.char_num));
19391 }
19392 else
19393 {
19394 ui_l32 table[ucf_constants::rev_maxset] = {};
19395 const ui_l32 setnum = unicode_case_folding::do_caseunfolding(table, state.char_num);
19396
19397 for (ui_l32 j = 0; j < setnum; ++j)
19398 nextcharclass.join(range_pair_helper(table[j]));
19399 }
19400 return canbe0length;
19401
19402 case st_character_class:
19403 nextcharclass.merge(this->character_class[state.char_num]);
19404 return canbe0length;
19405
19406 case st_backreference:
19407 {
19408 const state_size_type nextpos = find_next1_of_bracketopen(state.char_num);
19409
19410 gather_nextchars(nextcharclass, nextpos, state.char_num, subsequent);
19411 }
19412 break;
19413
19414 case st_eol:
19415 case st_bol:
19416 case st_boundary:
19417 if (subsequent)
19418 nextcharclass.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint));
19419
19420 break;
19421
19422 case st_lookaround_open:
19423 if (!state.flags && state.quantifier.is_greedy == 0) // !is_not.
19424 {
19425 gather_nextchars(nextcharclass, pos + 2, checked, 0u, subsequent);
19426 }
19427 else if (subsequent)
19428 nextcharclass.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint));
19429
19430 break;
19431
19432 case st_roundbracket_close:
19433 if (/* bracket_number == 0 || */ state.char_num != bracket_number)
19434 break;
19435 //@fallthrough@
19436
19437 case st_success: // == st_lookaround_close.
19438 return true;
19439
19440 case st_check_counter:
19441 if (!state.quantifier.is_greedy && state.quantifier.atleast >= 1)
19442 return canbe0length;
19443 //@fallthrough@
19444
19445 default:;
19446 }
19447
19448 if (state.next1)
19449 pos += state.next1;
19450 else
19451 break;
19452 }
19453 return canbe0length;
19454 }
19455
19456 bool gather_nextchars(range_pairs &nextcharclass, const state_size_type pos, const ui_l32 bracket_number, const bool subsequent) const
19457 {
19458 simple_array<bool> checked;
19459
19460 checked.resize(this->NFA_states.size(), false);
19461 return gather_nextchars(nextcharclass, pos, checked, bracket_number, subsequent);
19462 }
19463
19464 state_size_type find_next1_of_bracketopen(const ui_l32 bracketno) const
19465 {
19466 for (state_size_type no = 0; no < this->NFA_states.size(); ++no)
19467 {
19468 const state_type &state = this->NFA_states[no];
19469
19470 if (state.type == st_roundbracket_open && state.char_num == bracketno)
19471 return no + state.next1;
19472 }
19473 return 0;
19474 }
19475
19476 void relativejump_to_absolutejump()
19477 {
19478 for (state_size_type pos = 0; pos < this->NFA_states.size(); ++pos)
19479 {
19480 state_type &state = this->NFA_states[pos];
19481
19482 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
19483 if (state.next1 || state.type == st_character || state.type == st_character_class)
19484 #else
19485 if (state.next1)
19486 #endif
19487 state.next_state1 = &this->NFA_states[pos + state.next1];
19488 else
19489 state.next_state1 = NULL;
19490
19491 if (state.next2)
19492 state.next_state2 = &this->NFA_states[pos + state.next2];
19493 else
19494 state.next_state2 = NULL;
19495 }
19496 }
19497
19498 void optimise()
19499 {
19500 #if !defined(SRELLDBG_NO_BRANCH_OPT2) && !defined(SRELLDBG_NO_STATEHOOK)
19501 branch_optimisation2();
19502 #endif
19503
19504 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
19505 if (!this->bmdata)
19506 find_entrypoint();
19507 #endif
19508
19509 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
19510 asterisk_optimisation();
19511 #endif
19512
19513 #if !defined(SRELLDBG_NO_BRANCH_OPT) && !defined(SRELLDBG_NO_ASTERISK_OPT)
19514 branch_optimisation();
19515 #endif
19516
19517 #if !defined(SRELLDBG_NO_1STCHRCLS)
19518 create_firstchar_class();
19519 #endif
19520
19521 #if !defined(SRELLDBG_NO_SKIP_EPSILON)
19522 skip_epsilon();
19523 #endif
19524
19525 #if !defined(SRELLDBG_NO_CCPOS)
19526 set_charclass_posinfo();
19527 #endif
19528 }
19529
19530 #if !defined(SRELLDBG_NO_SKIP_EPSILON)
19531
19532 void skip_epsilon()
19533 {
19534 for (state_size_type pos = 0; pos < this->NFA_states.size(); ++pos)
19535 {
19536 state_type &state = this->NFA_states[pos];
19537
19538 if (state.next1)
19539 state.next1 = static_cast<std::ptrdiff_t>(skip_nonbranch_epsilon(pos + state.next1)) - pos;
19540
19541 if (state.next2)
19542 state.next2 = static_cast<std::ptrdiff_t>(skip_nonbranch_epsilon(pos + state.next2)) - pos;
19543 }
19544 }
19545
19546 state_size_type skip_nonbranch_epsilon(state_size_type pos) const
19547 {
19548 for (;;)
19549 {
19550 const state_type &state = this->NFA_states[pos];
19551
19552 if (state.type == st_epsilon && state.next2 == 0)
19553 {
19554 pos += state.next1;
19555 continue;
19556 }
19557 break;
19558 }
19559 return pos;
19560 }
19561
19562 #endif
19563
19564 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
19565
19566 void asterisk_optimisation()
19567 {
19568 const state_size_type orgsize = this->NFA_states.size();
19569
19570 for (state_size_type pos = 1u; pos < orgsize; ++pos)
19571 {
19572 state_type &curstate = this->NFA_states[pos];
19573
19574 switch (curstate.type)
19575 {
19576 case st_character:
19577 case st_character_class:
19578 if (this->NFA_states[pos - 1].is_question_or_asterisk_before_corcc())
19579 {
19580 state_type &estate = this->NFA_states[pos - 1];
19581 const state_size_type nextno = pos + estate.farnext() - 1;
19582
19583 if (is_exclusive_sequence(estate.quantifier, pos, nextno))
19584 {
19585 state_type &estate2 = this->NFA_states[pos - 1];
19586 state_type &corccstate = this->NFA_states[pos];
19587
19588 estate2.next1 = 1;
19589 estate2.next2 = 0;
19590 estate2.char_num = epsilon_type::et_aofmrast;
19591
19592 if (corccstate.next1 < 0)
19593 corccstate.next1 = 0;
19594
19595 if (corccstate.next2 == 0)
19596 corccstate.next2 = nextno - pos;
19597 }
19598 }
19599 continue;
19600
19601 default:;
19602 }
19603 }
19604 if (orgsize != this->NFA_states.size())
19605 reorder_piece(this->NFA_states);
19606 }
19607
19608 bool is_exclusive_sequence(const re_quantifier &eq, const state_size_type curno, const state_size_type nextno) // const
19609 {
19610 const state_type &curstate = this->NFA_states[curno];
19611 range_pairs curchar_class;
19612 range_pairs nextchar_class;
19613
19614 if (curstate.type == st_character)
19615 {
19616 curchar_class.join(range_pair_helper(curstate.char_num));
19617 if (curstate.flags & sflags::icase)
19618 curchar_class.make_caseunfoldedcharset();
19619 }
19620 else if (curstate.type == st_character_class)
19621 {
19622 curchar_class = this->character_class[curstate.char_num];
19623 if (curchar_class.size() == 0) // Means [], which always makes matching fail.
19624 return true; // For preventing the automaton from pushing bt data.
19625 }
19626 else
19627 {
19628 return false;
19629 }
19630
19631 const bool canbe0length = gather_nextchars(nextchar_class, nextno, 0u, true);
19632
19633 if (nextchar_class.size())
19634 {
19635 if (!canbe0length || eq.is_greedy)
19636 {
19637 #if !defined(SRELLDBG_NO_SPLITCC)
19638
19639 range_pairs kept;
19640 range_pairs removed;
19641
19642 curchar_class.split_ranges(kept, removed, nextchar_class);
19643
19644 if (removed.size() == 0) // !curchar_class.is_overlap(nextchar_class)
19645 return true;
19646
19647 if (curstate.type == st_character_class && kept.size() && eq.is_infinity())
19648 {
19649 {
19650 state_type &curstate2 = this->NFA_states[curno];
19651
19652 curstate2.char_num = this->character_class.register_newclass(kept);
19653 curstate2.flags |= (sflags::hooking | sflags::byn2);
19654 curstate2.next2 = this->NFA_states.size() - curno;
19655 }
19656 state_array additions;
19657 additions.resize(2);
19658 state_type &n0 = additions[0];
19659 state_type &n1 = additions[1];
19660
19661 n0.reset(st_epsilon, epsilon_type::et_ccastrsk);
19662 n0.quantifier = eq;
19663 // n0.next2 = 1;
19664 n0.next2 = static_cast<std::ptrdiff_t>(nextno) - this->NFA_states.size();
19665 if (!n0.quantifier.is_greedy)
19666 {
19667 n0.next1 = n0.next2;
19668 n0.next2 = 1;
19669 }
19670
19671 n1.reset(st_character_class, this->character_class.register_newclass(removed));
19672 n1.next1 = static_cast<std::ptrdiff_t>(curno) - this->NFA_states.size() - 1;
19673 // n1.next2 = 0;
19674 n1.flags |= sflags::hookedlast;
19675 this->NFA_states += additions;
19676 return true;
19677 }
19678
19679 #else // defined(SRELLDBG_NO_SPLITCC)
19680
19681 if (!curchar_class.is_overlap(nextchar_class))
19682 {
19683 return true;
19684 }
19685
19686 #endif // !defined(SRELLDBG_NO_SPLITCC)
19687 }
19688 }
19689 else if (/* nextchar_class.size() == 0 && */ (!canbe0length || only_success_left(nextno)))
19690 {
19691 // (size() == 0 && !canbe0length) means [].
19692 return eq.is_greedy ? true : false;
19693 }
19694
19695 return false;
19696 }
19697
19698 bool only_success_left(state_size_type pos) const
19699 {
19700 for (;;)
19701 {
19702 const state_type &state = this->NFA_states[pos];
19703
19704 switch (state.type)
19705 {
19706 case st_success:
19707 return true;
19708
19709 case st_roundbracket_close:
19710 case st_backreference:
19711 if (state.next2 != 0 && state.next1 != state.next2)
19712 return false;
19713 break;
19714
19715 case st_epsilon:
19716 if (state.next2 != 0 && !only_success_left(pos + state.next2))
19717 return false;
19718 break;
19719
19720 case st_roundbracket_open:
19721 break; // /a*()/
19722
19723 default:
19724 return false;
19725 }
19726 if (state.next1)
19727 pos += state.next1;
19728 else
19729 return false;
19730 }
19731 }
19732 #endif // !defined(SRELLDBG_NO_ASTERISK_OPT)
19733
19734 void reorder_piece(state_array &piece) const
19735 {
19736 simple_array<ui_l32> newpos;
19737 ui_l32 offset = 0;
19738
19739 newpos.resize(piece.size() + 1, 0);
19740 newpos[piece.size()] = static_cast<ui_l32>(piece.size());
19741
19742 for (ui_l32 indx = 0; indx < piece.size(); ++indx)
19743 {
19744 if (newpos[indx] == 0)
19745 {
19746 newpos[indx] = indx + offset;
19747
19748 state_type &st = piece[indx];
19749
19750 if (st.flags & sflags::hooking)
19751 {
19752 const std::ptrdiff_t next1or2 = (st.flags & sflags::byn2) ? (st.flags ^= sflags::byn2, st.next2) : st.next1;
19753 st.flags ^= sflags::hooking;
19754
19755 for (ui_l32 i = static_cast<ui_l32>(indx + next1or2); i < piece.size(); ++i)
19756 {
19757 ++offset;
19758 newpos[i] = indx + offset;
19759 if (piece[i].flags & sflags::hookedlast)
19760 {
19761 piece[i].flags ^= sflags::hookedlast;
19762 break;
19763 }
19764 }
19765 }
19766 }
19767 else
19768 --offset;
19769 }
19770
19771 state_array newpiece(piece.size());
19772
19773 for (state_size_type indx = 0; indx < piece.size(); ++indx)
19774 {
19775 state_type &st = piece[indx];
19776
19777 if (st.next1 != 0)
19778 st.next1 = static_cast<std::ptrdiff_t>(newpos[indx + st.next1]) - newpos[indx];
19779
19780 if (st.next2 != 0)
19781 st.next2 = static_cast<std::ptrdiff_t>(newpos[indx + st.next2]) - newpos[indx];
19782
19783 newpiece[newpos[indx]] = piece[indx];
19784 }
19785 newpiece.swap(piece);
19786 }
19787
19788 bool check_if_backref_used(state_size_type pos, const ui_l32 number) const
19789 {
19790 for (; pos < this->NFA_states.size(); ++pos)
19791 {
19792 const state_type &state = this->NFA_states[pos];
19793
19794 if (state.type == st_backreference && state.char_num == number)
19795 return true;
19796 }
19797 return false;
19798 }
19799
19800 #if !defined(SRELLDBG_NO_BRANCH_OPT) || !defined(SRELLDBG_NO_BRANCH_OPT2)
19801
19802 state_size_type gather_if_char_or_charclass(range_pairs &charclass, state_size_type pos) const
19803 {
19804 for (;;)
19805 {
19806 const state_type &cst = this->NFA_states[pos];
19807
19808 if (cst.next2 != 0)
19809 break;
19810
19811 if (cst.type == st_character)
19812 {
19813 charclass.set_solerange(range_pair_helper(cst.char_num));
19814 if (cst.flags & sflags::icase)
19815 charclass.make_caseunfoldedcharset();
19816 return pos;
19817 }
19818 else if (cst.type == st_character_class)
19819 {
19820 charclass = this->character_class[cst.char_num];
19821 return pos;
19822 }
19823 else if (cst.type == st_epsilon && cst.char_num != epsilon_type::et_jmpinlp)
19824 {
19825 pos += cst.next1;
19826 }
19827 else
19828 break;
19829 }
19830 return 0;
19831 }
19832 #endif // !defined(SRELLDBG_NO_BRANCH_OPT) || !defined(SRELLDBG_NO_BRANCH_OPT2)
19833
19834 #if !defined(SRELLDBG_NO_BRANCH_OPT)
19835 void branch_optimisation()
19836 {
19837 range_pairs nextcharclass1;
19838
19839 for (state_size_type pos = 1; pos < this->NFA_states.size(); ++pos)
19840 {
19841 const state_type &state = this->NFA_states[pos];
19842
19843 if (state.is_branch())
19844 {
19845 const state_size_type nextcharpos = gather_if_char_or_charclass(nextcharclass1, pos + state.next1);
19846
19847 if (nextcharpos)
19848 {
19849 range_pairs nextcharclass2;
19850 const bool canbe0length = gather_nextchars(nextcharclass2, pos + state.next2, 0u /* bracket_number */, true);
19851
19852 if (!canbe0length && !nextcharclass1.is_overlap(nextcharclass2))
19853 {
19854 state_type &branch = this->NFA_states[pos];
19855 state_type &next1 = this->NFA_states[nextcharpos];
19856
19857 next1.next2 = pos + branch.next2 - nextcharpos;
19858 branch.next2 = 0;
19859 branch.char_num = epsilon_type::et_bo1fmrbr;
19860 }
19861 }
19862 }
19863 }
19864 }
19865 #endif // !defined(SRELLDBG_NO_BRANCH_OPT)
19866
19867 #if !defined(SRELLDBG_NO_BMH)
19868 void setup_bmhdata()
19869 {
19870 simple_array<ui_l32> u32s;
19871
19872 for (state_size_type i = 1; i < this->NFA_states.size(); ++i)
19873 {
19874 const state_type &state = this->NFA_states[i];
19875
19876 if (state.type == st_character)
19877 u32s.push_backncr(state.char_num);
19878 else
19879 {
19880 u32s.clear();
19881 break;
19882 }
19883 }
19884
19885 if (u32s.size() > 1)
19886 // if ((u32s.size() > 1 && !this->is_ricase()) || (u32s.size() > 2 && this->is_ricase()))
19887 {
19888 if (this->bmdata)
19889 this->bmdata->clear();
19890 else
19891 this->bmdata = new re_bmh<charT, utf_traits>;
19892
19893 this->bmdata->setup(u32s, this->is_ricase());
19894 return /* false */;
19895 }
19896
19897 if (this->bmdata)
19898 delete this->bmdata;
19899 this->bmdata = NULL;
19900 // return true;
19901 }
19902 #endif // !defined(SRELLDBG_NO_BMH)
19903
19904 #if !defined(SRELLDBG_NO_CCPOS)
19905 void set_charclass_posinfo()
19906 {
19907 this->character_class.finalise();
19908 for (state_size_type i = 1; i < this->NFA_states.size(); ++i)
19909 {
19910 state_type &state = this->NFA_states[i];
19911
19912 if (state.type == st_character_class || state.type == st_bol || state.type == st_eol || state.type == st_boundary)
19913 {
19914 const range_pair &posinfo = this->character_class.charclasspos(state.char_num);
19915 state.quantifier.set(posinfo.first, posinfo.second);
19916 }
19917 }
19918 }
19919 #endif // !defined(SRELLDBG_NO_CCPOS)
19920
19921 #if !defined(SRELLDBG_NO_BRANCH_OPT2) && !defined(SRELLDBG_NO_STATEHOOK)
19922
19923 void branch_optimisation2()
19924 {
19925 bool hooked = false;
19926 range_pairs basealt1stch;
19927 range_pairs nextalt1stch;
19928
19929 for (state_size_type pos = 1; pos < this->NFA_states.size(); ++pos)
19930 {
19931 const state_type &curstate = this->NFA_states[pos];
19932
19933 if (curstate.type == st_epsilon && curstate.next2 != 0 && curstate.char_num == epsilon_type::et_alt) // '|'
19934 {
19935 const state_size_type next1pos = pos + curstate.next1;
19936 state_size_type precharchainpos = pos;
19937
19938 if (gather_if_char_or_charclass(basealt1stch, next1pos) != 0)
19939 {
19940 state_type &next1ref = this->NFA_states[next1pos];
19941 state_size_type next2pos = precharchainpos + curstate.next2;
19942 state_size_type postcharchainpos = 0;
19943
19944 for (;;)
19945 {
19946 state_size_type next2next1pos = next2pos;
19947 state_type &nstate2 = this->NFA_states[next2pos];
19948 state_size_type next2next2pos = 0;
19949
19950 if (nstate2.type == st_epsilon)
19951 {
19952 if (nstate2.next2 != 0)
19953 {
19954 if (nstate2.char_num == epsilon_type::et_alt) // '|'
19955 next2next2pos = next2pos + nstate2.next2;
19956 }
19957 next2next1pos += nstate2.next1;
19958 }
19959
19960 if (gather_if_char_or_charclass(nextalt1stch, next2next1pos) != 0)
19961 {
19962 const int relation = basealt1stch.relationship(nextalt1stch);
19963
19964 if (relation == 0)
19965 {
19966 state_type &prechainalt = this->NFA_states[precharchainpos];
19967 state_type &becomes_unused = this->NFA_states[next2next1pos];
19968 const state_size_type next1next1pos = next1pos + next1ref.next1;
19969
19970 becomes_unused.type = st_epsilon;
19971
19972 if (next2next2pos)
19973 {
19974 becomes_unused.char_num = epsilon_type::et_bo2fmrbr; // '2'
19975
19976 if (postcharchainpos == 0)
19977 {
19978 nstate2.next1 = next1next1pos - next2pos;
19979 nstate2.next2 = next2next1pos - next2pos;
19980
19981 next1ref.next1 = next2pos - next1pos;
19982 next1ref.flags |= sflags::hooking;
19983 nstate2.flags |= sflags::hookedlast;
19984 hooked = true;
19985 }
19986 else
19987 {
19988 state_type &becomes_alt = this->NFA_states[postcharchainpos];
19989
19990 becomes_alt.char_num = epsilon_type::et_alt; // '|' <- '2'
19991 becomes_alt.next2 = next2next1pos - postcharchainpos;
19992
19993 nstate2.next2 = 0;
19994 nstate2.char_num = epsilon_type::et_bo2skpd; // '!'
19995 }
19996 postcharchainpos = next2next1pos;
19997 prechainalt.next2 = next2next2pos - precharchainpos;
19998 }
19999 else
20000 {
20001 if (postcharchainpos == 0)
20002 {
20003 becomes_unused.char_num = epsilon_type::et_alt; // '|'
20004 becomes_unused.next2 = becomes_unused.next1;
20005 becomes_unused.next1 = next1next1pos - next2next1pos;
20006
20007 next1ref.next1 = next2next1pos - next1pos;
20008 next1ref.flags |= sflags::hooking;
20009 becomes_unused.flags |= sflags::hookedlast;
20010 hooked = true;
20011 }
20012 else
20013 {
20014 state_type &becomes_alt = this->NFA_states[postcharchainpos];
20015
20016 becomes_alt.char_num = epsilon_type::et_alt; // '|' <- '2'
20017 becomes_alt.next2 = next2next1pos + becomes_unused.next1 - postcharchainpos;
20018
20019 becomes_unused.char_num = epsilon_type::et_bo2skpd; // '!'
20020 }
20021 prechainalt.next2 = 0;
20022 prechainalt.char_num = epsilon_type::et_bo2fmrbr; // '2'
20023 }
20024 }
20025 else if (relation == 1)
20026 {
20027 break;
20028 }
20029 else
20030 precharchainpos = next2pos;
20031 }
20032 else
20033 {
20034 // Fix for bug210428.
20035 // Original: /mm2|m|mm/
20036 // 1st step: /m(?:m2||m)/ <- No more optimisation can be performed. Must quit.
20037 // 2nd step: /mm(?:2||)/ <- BUG.
20038 break;
20039 }
20040
20041 if (next2next2pos == 0)
20042 break;
20043
20044 next2pos = next2next2pos;
20045 }
20046 }
20047 }
20048 }
20049
20050 if (hooked)
20051 reorder_piece(this->NFA_states);
20052 }
20053 #endif // !defined(SRELLDBG_NO_BRANCH_OPT2) && !defined(SRELLDBG_NO_STATEHOOK)
20054
20055 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
20056
20057 void find_entrypoint()
20058 {
20059 if (find_singlechar_ep(1u))
20060 return;
20061
20062 find_better_ep(1u);
20063 }
20064
20065 bool find_singlechar_ep(state_size_type cur)
20066 {
20067 state_size_type curatompos = 0;
20068 state_size_type singlecharpos = 0;
20069 state_size_type seqpos = 0;
20070 ui_l32 prevchar = constants::invalid_u32value;
20071 ui_l32 charcount = 0;
20072 bool needs_rerun = false;
20073
20074 for (; cur < this->NFA_states.size();)
20075 {
20076 const state_type &state = this->NFA_states[cur];
20077
20078 switch (state.type)
20079 {
20080 case st_character:
20081 curatompos = cur;
20082 ST_CHARACTER:
20083 if (!(this->NFA_states[cur].flags & sflags::icase))
20084 {
20085 if (prevchar != constants::invalid_u32value)
20086 seqpos = curatompos;
20087
20088 singlecharpos = curatompos;
20089 ++charcount;
20090 prevchar = this->NFA_states[cur].char_num;
20091 ++cur;
20092 continue;
20093 }
20094 //@fallthrough@
20095
20096 case st_character_class:
20097 prevchar = constants::invalid_u32value;
20098 ++cur;
20099 continue;
20100
20101 case st_epsilon:
20102 if (state.next2 == 0)
20103 {
20104 if (state.char_num == epsilon_type::et_jmpinlp)
20105 {
20106 const state_size_type rapos = cur + state.next1;
20107 const state_type &repatom = this->NFA_states[rapos];
20108
20109 if (repatom.type == st_character)
20110 {
20111 curatompos = cur;
20112 cur = rapos;
20113 needs_rerun = true;
20114 goto ST_CHARACTER;
20115 }
20116 prevchar = constants::invalid_u32value;
20117 cur = rapos;
20118 }
20119 else
20120 ++cur;
20121 continue;
20122 }
20123
20124 if ((state.char_num == epsilon_type::et_ccastrsk)
20125 || ((state.char_num == epsilon_type::et_dfastrsk)
20126 && (is_reversible_atom(cur + state.nearnext(), true))))
20127 {
20128 cur += state.farnext();
20129 needs_rerun = true;
20130 prevchar = constants::invalid_u32value;
20131 continue;
20132 }
20133 break;
20134
20135 case st_save_and_reset_counter:
20136 {
20137 const state_size_type ccpos = cur + state.next1;
20138 const state_size_type rapos = ccpos + 3;
20139 const state_type &ccstate = this->NFA_states[ccpos];
20140 const state_type &repatom = this->NFA_states[rapos];
20141
20142 if (ccstate.quantifier.atleast > 0 && repatom.type == st_character)
20143 {
20144 curatompos = cur;
20145 cur = rapos;
20146 needs_rerun = true;
20147 goto ST_CHARACTER;
20148 }
20149
20150 if (is_reversible_atom(rapos, ccstate.quantifier.atleast == 0))
20151 {
20152 cur = ccpos + ccstate.farnext();
20153 needs_rerun = true;
20154 prevchar = constants::invalid_u32value;
20155 continue;
20156 }
20157 }
20158 break;
20159
20160 case st_check_counter:
20161 cur += state.farnext();
20162 continue;
20163
20164 case st_roundbracket_open:
20165 if (check_if_backref_used(cur + 1, state.char_num))
20166 break;
20167 needs_rerun = true;
20168 //@fallthrough@
20169
20170 case st_repeat_in_push:
20171 cur += state.next1;
20172 continue;
20173
20174 case st_check_0_width_repeat:
20175 cur += state.next2;
20176 continue;
20177
20178 case st_roundbracket_close:
20179 case st_bol:
20180 case st_eol:
20181 case st_boundary:
20182 ++cur;
20183 continue;
20184
20185 // Not supported: backreference, lookaround_open.
20186 // NFA_states broken if appeares: restore_counter, increment_counter, decrement_counter,
20187 // roundbracket_pop, repeat_in_pop, lookaround_pop.
20188 // Finish: success (== lookaround_close).
20189 default:
20190 break;
20191 }
20192 break;
20193 }
20194
20195 return seqpos != 0
20196 ? (create_rewinder(seqpos, needs_rerun), true)
20197 : (charcount > 1 ? (create_rewinder(singlecharpos, needs_rerun), true) : false);
20198 }
20199
20200 bool is_reversible_atom(const state_size_type pos, const bool check_optseq) const
20201 {
20202 const state_type &s = this->NFA_states[pos];
20203 state_size_type end = 0u;
20204
20205 if (s.type == st_character || s.type == st_character_class)
20206 return true;
20207
20208 if (check_optseq)
20209 return false; // Optional sequence (?, *, {0,m}) found.
20210 // Not only at the beginning but also at any position does
20211 // an optional sequence need measures to be taken:
20212 // "2000-1-1" =~ /\d(\d+-)?\d{1,2}-\d{1,2}/
20213
20214 switch (s.type)
20215 {
20216 case st_epsilon:
20217 if (s.next2 == 0 && s.char_num == epsilon_type::et_ncgopen)
20218 end = skip_group(this->NFA_states, pos);
20219 break;
20220
20221 case st_roundbracket_open:
20222 if (check_if_backref_used(pos + 1, s.char_num))
20223 return false;
20224
20225 end = skip_bracket(s.char_num, this->NFA_states, pos);
20226 break;
20227
20228 case st_repeat_in_push:
20229 end = skip_0width_checker(s.char_num, this->NFA_states, pos);
20230 //@fallthrough@
20231
20232 default:;
20233 }
20234 return end != 0u && !has_obstacle_to_reverse(pos, end, false);
20235 }
20236
20237 bool has_obstacle_to_reverse(state_size_type pos, const state_size_type end, const bool check_optseq) const
20238 {
20239 for (; pos < end;)
20240 {
20241 const state_type &s = this->NFA_states[pos];
20242
20243 if (s.type == st_epsilon)
20244 {
20245 if (s.char_num == epsilon_type::et_alt)
20246 return true;
20247 // The rewinder cannot support Disjunction because forward matching
20248 // and backward matching can go through different routes:
20249 // * In a forward search /(?:.|ab)c/ against "abc" matches "abc",
20250 // while in a backward search from 'c' it matches "bc".
20251
20252 // Because of the same reason, the rewinder cannot support an optional
20253 // group either. Semantically, /(\d+-)?\d{1,2}-\d{1,2}/ is equivalent to
20254 // /(\d+-|)\d{1,2}-\d{1,2}/.
20255 if (check_optseq)
20256 {
20257 if (s.char_num == epsilon_type::et_jmpinlp)
20258 {
20259 pos += s.next1;
20260 continue;
20261 }
20262
20263 if (s.char_num == epsilon_type::et_dfastrsk && s.next2 != 0 && !this->NFA_states[pos + s.nearnext()].is_character_or_class())
20264 return true;
20265 }
20266
20267 }
20268 else if (s.type == st_backreference)
20269 return true;
20270 else if (s.type == st_lookaround_open)
20271 return true;
20272 else if (check_optseq && s.type == st_check_counter)
20273 {
20274 if (s.quantifier.atleast == 0 && !this->NFA_states[pos + 3].is_character_or_class())
20275 return true;
20276 pos += 3;
20277 continue;
20278 }
20279 ++pos;
20280 }
20281 return false;
20282 }
20283
20284 state_size_type skip_bracket(const ui_l32 no, const state_array &NFAs, state_size_type pos) const
20285 {
20286 return find_pair(st_roundbracket_close, NFAs, no, pos);
20287 }
20288
20289 state_size_type skip_0width_checker(const ui_l32 no, const state_array &NFAs, state_size_type pos) const
20290 {
20291 return find_pair(st_check_0_width_repeat, NFAs, no, pos);
20292 }
20293
20294 state_size_type find_pair(const re_state_type type, const state_array &NFAs, const ui_l32 no, state_size_type pos) const
20295 {
20296 for (++pos; pos < NFAs.size(); ++pos)
20297 {
20298 const state_type &s = NFAs[pos];
20299
20300 if (s.type == type && s.char_num == no)
20301 return pos;
20302 }
20303 return 0u;
20304 }
20305
20306 state_size_type skip_group(const state_array &NFAs, state_size_type pos) const
20307 {
20308 ui_l32 depth = 1u;
20309
20310 for (++pos; pos < NFAs.size(); ++pos)
20311 {
20312 const state_type &s = NFAs[pos];
20313
20314 if (s.type == st_epsilon)
20315 {
20316 if (s.char_num == epsilon_type::et_ncgopen)
20317 ++depth;
20318 else if (s.char_num == epsilon_type::et_ncgclose)
20319 {
20320 if (--depth == 0u)
20321 return pos;
20322 }
20323 }
20324 }
20325 return 0u;
20326 }
20327
20328 void create_rewinder(const state_size_type end, const bool needs_rerun)
20329 {
20330 state_array newNFAs;
20331 state_type rwstate;
20332
20333 newNFAs.append(this->NFA_states, 1u, end - 1u);
20334 if (!reverse_atoms(newNFAs) || newNFAs.size() == 0u)
20335 return;
20336
20337 rwstate.reset(st_lookaround_pop, meta_char::mc_eq);
20338 rwstate.quantifier.atmost = 0;
20339 newNFAs.insert(0, rwstate);
20340
20341 rwstate.type = st_lookaround_open;
20342 rwstate.next1 = static_cast<std::ptrdiff_t>(end + newNFAs.size() + 2) - 1;
20343 rwstate.next2 = 1;
20344 rwstate.quantifier.is_greedy = needs_rerun ? 3 : 2; // Match point rewinder.
20345 // "singing" problem: /\w+ing/ against "singing" matches the
20346 // entire "singing". However, if modified like /(?<=\K\w+)ing/
20347 // it matches "sing" only, which is not correct (but correct if
20348 // /\w+?ing/). To avoid this problem, after rewinding is
20349 // finished rerunning the automaton forwards from the found
20350 // point is needed if the reversed states contain a variable
20351 // length (non fixed length) atom.
20352 // TODO: This rerunning can be avoided if the reversed atoms
20353 // are an exclusive sequence, like /\d+[:,]+\d+abcd/.
20354 newNFAs.insert(0, rwstate);
20355
20356 rwstate.type = st_lookaround_close;
20357 rwstate.next1 = 0;
20358 rwstate.next2 = 0;
20359 newNFAs.append(1, rwstate);
20360
20361 this->NFA_states.insert(1, newNFAs);
20362 this->NFA_states[0].next2 = static_cast<std::ptrdiff_t>(newNFAs.size()) + 1;
20363 }
20364
20365 bool reverse_atoms(state_array &NFAs)
20366 {
20367 state_array revNFAs;
20368 state_array atomseq;
20369 state_type epsilon;
20370
20371 epsilon.reset(st_epsilon, epsilon_type::et_rvfmrcg);
20372
20373 for (state_size_type cur = 0u; cur < NFAs.size();)
20374 {
20375 const state_type &state = NFAs[cur];
20376
20377 switch (state.type)
20378 {
20379 case st_epsilon:
20380 if (state.is_noncapturinggroup_begin_or_end())
20381 {
20382 revNFAs.insert(0, epsilon);
20383 ++cur;
20384 continue;
20385 }
20386 break;
20387
20388 case st_roundbracket_open:
20389 atomseq.clear();
20390 atomseq.push_back(epsilon);
20391 atomseq.push_back(epsilon);
20392 revNFAs.insert(0, atomseq);
20393 cur += 2;
20394 continue;
20395
20396 case st_roundbracket_close:
20397 revNFAs.insert(0, epsilon);
20398 cur += 1;
20399 continue;
20400
20401 default:;
20402 }
20403
20404 const state_size_type boundary = find_atom_boundary(NFAs, cur, NFAs.size());
20405
20406 if (boundary == 0u || cur == boundary)
20407 return false;
20408
20409 atomseq.clear();
20410 atomseq.append(NFAs, cur, boundary - cur);
20411
20412 if (!mend_for_reverse(atomseq))
20413 {
20414 return false;
20415 }
20416
20417 cur = boundary;
20418 revNFAs.insert(0, atomseq);
20419 }
20420 revNFAs.swap(NFAs);
20421 return true;
20422 }
20423
20424 bool mend_for_reverse(state_array &atoms)
20425 {
20426 for (state_size_type pos = 0; pos < atoms.size(); ++pos)
20427 {
20428 state_type &s = atoms[pos];
20429
20430 switch (s.type)
20431 {
20432 case st_roundbracket_open:
20433 if (!check_if_backref_used(pos + 1, s.char_num))
20434 {
20435 const state_size_type end = skip_bracket(s.char_num, atoms, pos);
20436
20437 if (end != 0u)
20438 {
20439 pos += 2;
20440 state_array rev(atoms, pos, end - pos);
20441
20442 if (reverse_atoms(rev) && (end - pos) == rev.size())
20443 {
20444 if (s.quantifier.is_greedy)
20445 {
20446 atoms[pos - 2].reset(st_epsilon, epsilon_type::et_mfrfmrcg);
20447 atoms[pos - 1].reset(st_epsilon, epsilon_type::et_mfrfmrcg);
20448 atoms[end].type = st_epsilon;
20449 atoms[end].char_num = epsilon_type::et_mfrfmrcg;
20450 atoms[end].next2 = 0;
20451 }
20452 else
20453 {
20454 state_type &bro = atoms[pos - 2];
20455 state_type &brp = atoms[pos - 1];
20456 state_type &brc = atoms[end];
20457
20458 bro.type = st_repeat_in_push;
20459 brp.type = st_repeat_in_pop;
20460 brc.type = st_check_0_width_repeat;
20461
20462 bro.char_num = this->number_of_repeats;
20463 brp.char_num = this->number_of_repeats;
20464 brc.char_num = this->number_of_repeats;
20465 ++this->number_of_repeats;
20466 }
20467 atoms.replace(pos, end - pos, rev);
20468 pos += rev.size();
20469 continue;
20470 }
20471 }
20472 }
20473 return false;
20474
20475 case st_epsilon:
20476 if (s.char_num == epsilon_type::et_ncgopen)
20477 {
20478 state_size_type end = skip_group(atoms, pos);
20479
20480 if (end != 0u)
20481 {
20482 ++pos;
20483 state_array rev(atoms, pos, end - pos);
20484
20485 if (reverse_atoms(rev) && (end - pos) == rev.size())
20486 {
20487 atoms.replace(pos, end - pos, rev);
20488 pos += rev.size();
20489 continue;
20490 }
20491 }
20492 return false;
20493 }
20494 else if ((s.char_num == epsilon_type::et_ccastrsk || s.char_num == epsilon_type::et_dfastrsk)
20495 && s.next2 != 0 && !s.quantifier.is_greedy)
20496 {
20497 s.next2 = s.next1;
20498 s.next1 = 1;
20499 s.quantifier.is_greedy = 1u;
20500 }
20501 continue;
20502
20503 case st_check_counter:
20504 if (pos + 3 < atoms.size())
20505 {
20506 if (!s.quantifier.is_greedy)
20507 {
20508 s.next2 = s.next1;
20509 s.next1 = 1;
20510 s.quantifier.is_greedy = 1u;
20511 }
20512 continue;
20513 }
20514 return false;
20515
20516 default:;
20517 }
20518 }
20519 return true;
20520 }
20521
20522 state_size_type find_atom_boundary(const state_array &NFAs, state_size_type cur, const state_size_type end) const
20523 {
20524 const state_size_type begin = cur;
20525 state_size_type charatomseq_endpos = cur;
20526 const state_type *charatomseq_begin = NULL;
20527
20528 for (; cur < end;)
20529 {
20530 const state_type &cst = NFAs[cur];
20531
20532 switch (cst.type)
20533 {
20534 case st_character:
20535 case st_character_class:
20536 if (charatomseq_begin == NULL)
20537 charatomseq_begin = &cst;
20538 else if (!charatomseq_begin->is_same_character_or_charclass(cst))
20539 return charatomseq_endpos;
20540
20541 charatomseq_endpos = ++cur;
20542 continue;
20543
20544 case st_epsilon:
20545 if (cst.next2 == 0)
20546 {
20547 if (charatomseq_begin)
20548 return charatomseq_endpos;
20549
20550 if (cst.char_num == epsilon_type::et_jmpinlp)
20551 {
20552 ++cur;
20553 continue;
20554 }
20555 else if (cst.char_num == epsilon_type::et_ncgopen)
20556 {
20557 const state_size_type gend = skip_group(NFAs, cur);
20558
20559 return gend != 0u ? gend + 1 : 0u;
20560 }
20561 else if (cst.char_num != epsilon_type::et_brnchend)
20562 return cur + 1;
20563
20564 return 0u;
20565 }
20566
20567 if (cst.char_num == epsilon_type::et_ccastrsk)
20568 {
20569 if (cur + 1 < end)
20570 {
20571 const state_type &repatom = NFAs[cur + 1];
20572
20573 if (charatomseq_begin == NULL)
20574 charatomseq_begin = &repatom;
20575 else if (!charatomseq_begin->is_same_character_or_charclass(repatom))
20576 return charatomseq_endpos;
20577
20578 return cur + cst.farnext();
20579 }
20580 return 0u;
20581 }
20582 else if (cst.char_num == epsilon_type::et_alt) // '|'
20583 {
20584 if (charatomseq_begin)
20585 return charatomseq_endpos;
20586
20587 state_size_type altend = cur + cst.next2 - 1;
20588
20589 for (; this->NFA_states[altend].type == st_epsilon && this->NFA_states[altend].char_num == epsilon_type::et_brnchend; altend += this->NFA_states[altend].next1);
20590
20591 return altend;
20592 }
20593
20594 if (cst.char_num == epsilon_type::et_dfastrsk)
20595 return charatomseq_begin ? charatomseq_endpos : cur + cst.farnext();
20596
20597 return 0u;
20598
20599 case st_save_and_reset_counter:
20600 cur += cst.next1;
20601 //@fallthrough@
20602
20603 case st_check_counter:
20604 {
20605 const state_type &ccstate = NFAs[cur];
20606 const state_type &repatom = NFAs[cur + 3];
20607
20608 if (charatomseq_begin)
20609 {
20610 if (!charatomseq_begin->is_same_character_or_charclass(repatom))
20611 return charatomseq_endpos;
20612 }
20613 else if (repatom.is_character_or_class())
20614 charatomseq_begin = &repatom;
20615 else
20616 return cur + ccstate.farnext();
20617
20618 charatomseq_endpos = cur += ccstate.farnext();
20619 }
20620 continue;
20621
20622 case st_bol:
20623 case st_eol:
20624 case st_boundary:
20625 case st_backreference:
20626 if (charatomseq_begin)
20627 return charatomseq_endpos;
20628 return cur + 1;
20629
20630 case st_roundbracket_open:
20631 if (charatomseq_begin)
20632 return charatomseq_endpos;
20633 else
20634 {
20635 const state_size_type rbend = skip_bracket(cst.char_num, NFAs, cur);
20636
20637 if (rbend != 0u)
20638 return rbend + 1;
20639 }
20640 return 0u;
20641
20642 case st_repeat_in_push:
20643 if (charatomseq_begin)
20644 return charatomseq_endpos;
20645 else
20646 {
20647 const state_size_type rpend = skip_0width_checker(cst.char_num, NFAs, cur);
20648
20649 if (rpend != 0u)
20650 return rpend + 1;
20651 }
20652 return 0u;
20653
20654 case st_lookaround_open:
20655 if (charatomseq_begin)
20656 return charatomseq_endpos;
20657 return cur + cst.next1;
20658
20659 case st_roundbracket_close:
20660 case st_check_0_width_repeat:
20661 case st_lookaround_close:
20662 return charatomseq_endpos;
20663
20664 // restore_counter, increment_counter, decrement_counter,
20665 // roundbracket_pop, repeat_in_pop, lookaround_pop.
20666 default:
20667 return 0u;
20668 }
20669 }
20670 return begin != charatomseq_endpos ? charatomseq_endpos : 0u;
20671 }
20672
20673 bool find_better_ep(state_size_type cur)
20674 {
20675 state_size_type betterpos = 0u;
20676 ui_l32 bp_cpnum = 0u;
20677 ui_l32 charcount = 0u;
20678 range_pairs nextcc;
20679
20680 for (; cur < this->NFA_states.size();)
20681 {
20682 const state_type &state = this->NFA_states[cur];
20683
20684 if (state.type == st_epsilon)
20685 {
20686 if (state.char_num == epsilon_type::et_ncgopen || (state.next2 == 0 && state.char_num != epsilon_type::et_jmpinlp))
20687 {
20688 ++cur;
20689 continue;
20690 }
20691 }
20692 else if (state.type == st_roundbracket_open)
20693 {
20694 cur += state.next1;
20695 continue;
20696 }
20697 else if (state.type == st_bol || state.type == st_eol || state.type == st_boundary)
20698 {
20699 cur += state.next1;
20700 continue;
20701 }
20702 else if (state.type == st_roundbracket_close)
20703 {
20704 cur += state.next2;
20705 continue;
20706 }
20707 else if (state.type == st_backreference || state.type == st_lookaround_open)
20708 break;
20709
20710 const state_size_type boundary = find_atom_boundary(this->NFA_states, cur, this->NFA_states.size());
20711
20712 if (boundary == 0u || cur == boundary)
20713 break;
20714
20715 nextcc.clear();
20716 const bool canbe0length = gather_nextchars(nextcc, cur, 0u, false);
20717
20718 if (canbe0length)
20719 break;
20720
20721 const ui_l32 cpnum = nextcc.total_codepoints();
20722 const bool has_obstacle = has_obstacle_to_reverse(cur, boundary, true);
20723
20724 if (betterpos != 0u)
20725 {
20726 if (bp_cpnum > cpnum || (bp_cpnum == cpnum && charcount == 1u))
20727 {
20728 betterpos = cur;
20729 bp_cpnum = cpnum;
20730 ++charcount;
20731 }
20732 }
20733 else
20734 {
20735 betterpos = cur;
20736 bp_cpnum = cpnum;
20737 ++charcount;
20738 }
20739
20740 if (has_obstacle)
20741 break;
20742
20743 cur = boundary;
20744 }
20745
20746 return (charcount > 1u) ? (create_rewinder(betterpos, true), true) : false;
20747 }
20748
20749 #endif // !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
20750
20751 public: // For debug.
20752
20753 void print_NFA_states(const int) const;
20754 };
20755 // re_compiler
20756
20757 } // namespace re_detail
20758
20759 // ... "rei_compiler.hpp"]
20760 // ["regex_sub_match.hpp" ...
20761
20762 // 28.9, class template sub_match:
20763 template <class BidirectionalIterator>
20764 class sub_match : public std::pair<BidirectionalIterator, BidirectionalIterator>
20765 {
20766 public:
20767
20768 typedef typename std::iterator_traits<BidirectionalIterator>::value_type value_type;
20769 typedef typename std::iterator_traits<BidirectionalIterator>::difference_type difference_type;
20770 typedef BidirectionalIterator iterator;
20771 typedef std::basic_string<value_type> string_type;
20772
20773 bool matched;
20774
20775 // constexpr sub_match(); // C++11.
20776
20777 sub_match() : matched(false)
20778 {
20779 }
20780
20781 difference_type length() const
20782 {
20783 return matched ? std::distance(this->first, this->second) : 0;
20784 }
20785
20786 operator string_type() const
20787 {
20788 return matched ? string_type(this->first, this->second) : string_type();
20789 }
20790
20791 string_type str() const
20792 {
20793 return matched ? string_type(this->first, this->second) : string_type();
20794 }
20795
20796 int compare(const sub_match &s) const
20797 {
20798 return str().compare(s.str());
20799 }
20800
20801 int compare(const string_type &s) const
20802 {
20803 return str().compare(s);
20804 }
20805
20806 int compare(const value_type *const s) const
20807 {
20808 return str().compare(s);
20809 }
20810
20811 void swap(sub_match &s)
20812 {
20813 if (this != &s)
20814 {
20815 this->std::pair<BidirectionalIterator, BidirectionalIterator>::swap(s);
20816 std::swap(matched, s.matched);
20817 }
20818 }
20819
20820 #if !defined(SRELL_NO_APIEXT)
20821
20822 template <typename ST, typename SA>
20823 operator std::basic_string<value_type, ST, SA>() const
20824 {
20825 typedef std::basic_string<value_type, ST, SA> string_type2;
20826 return matched ? string_type2(this->first, this->second) : string_type2();
20827 }
20828
20829 template <typename ST, typename SA>
20830 std::basic_string<value_type, ST, SA> str() const
20831 {
20832 typedef std::basic_string<value_type, ST, SA> string_type2;
20833 return matched ? string_type2(this->first, this->second) : string_type2();
20834 }
20835
20836 #endif // !defined(SRELL_NO_APIEXT)
20837
20838 void set_(const typename re_detail::re_submatch_type<BidirectionalIterator> &br)
20839 {
20840 this->first = br.core.open_at;
20841 this->second = br.core.close_at;
20842 this->matched = br.counter != 0;
20843 }
20844 };
20845
20846 // 28.9.2, sub_match non-member operators:
20847 // [7.9.2] sub_match non-member operators
20848
20849 // Compares sub_match & with sub_match &.
20850 template <class BiIter>
20851 bool operator==(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
20852 {
20853 return lhs.compare(rhs) == 0; // 1
20854 }
20855
20856 template <class BiIter>
20857 bool operator!=(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
20858 {
20859 return lhs.compare(rhs) != 0; // 2
20860 }
20861
20862 template <class BiIter>
20863 bool operator<(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
20864 {
20865 return lhs.compare(rhs) < 0; // 3
20866 }
20867
20868 template <class BiIter>
20869 bool operator<=(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
20870 {
20871 return lhs.compare(rhs) <= 0; // 4
20872 }
20873
20874 template <class BiIter>
20875 bool operator>=(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
20876 {
20877 return lhs.compare(rhs) >= 0; // 5
20878 }
20879
20880 template <class BiIter>
20881 bool operator>(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
20882 {
20883 return lhs.compare(rhs) > 0; // 6
20884 }
20885
20886 // Compares basic_string & with sub_match &.
20887 template <class BiIter, class ST, class SA>
20888 bool operator==(
20889 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
20890 const sub_match<BiIter> &rhs
20891 )
20892 {
20893 return rhs.compare(lhs.c_str()) == 0; // 7
20894 }
20895
20896 template <class BiIter, class ST, class SA>
20897 bool operator!=(
20898 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
20899 const sub_match<BiIter> &rhs
20900 )
20901 {
20902 return !(lhs == rhs); // 8
20903 }
20904
20905 template <class BiIter, class ST, class SA>
20906 bool operator<(
20907 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
20908 const sub_match<BiIter> &rhs
20909 )
20910 {
20911 return rhs.compare(lhs.c_str()) > 0; // 9
20912 }
20913
20914 template <class BiIter, class ST, class SA>
20915 bool operator>(
20916 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
20917 const sub_match<BiIter> &rhs
20918 )
20919 {
20920 return rhs < lhs; // 10
20921 }
20922
20923 template <class BiIter, class ST, class SA>
20924 bool operator>=(
20925 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
20926 const sub_match<BiIter> &rhs
20927 )
20928 {
20929 return !(lhs < rhs); // 11
20930 }
20931
20932 template <class BiIter, class ST, class SA>
20933 bool operator<=(
20934 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
20935 const sub_match<BiIter> &rhs
20936 )
20937 {
20938 return !(rhs < lhs); // 12
20939 }
20940
20941 // Compares sub_match & with basic_string &.
20942 template <class BiIter, class ST, class SA>
20943 bool operator==(
20944 const sub_match<BiIter> &lhs,
20945 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
20946 )
20947 {
20948 return lhs.compare(rhs.c_str()) == 0; // 13
20949 }
20950
20951 template <class BiIter, class ST, class SA>
20952 bool operator!=(
20953 const sub_match<BiIter> &lhs,
20954 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
20955 )
20956 {
20957 return !(lhs == rhs); // 14
20958 }
20959
20960 template <class BiIter, class ST, class SA>
20961 bool operator<(
20962 const sub_match<BiIter> &lhs,
20963 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
20964 )
20965 {
20966 return lhs.compare(rhs.c_str()) < 0; // 15
20967 }
20968
20969 template <class BiIter, class ST, class SA>
20970 bool operator>(
20971 const sub_match<BiIter> &lhs,
20972 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
20973 )
20974 {
20975 return rhs < lhs; // 16
20976 }
20977
20978 template <class BiIter, class ST, class SA>
20979 bool operator>=(
20980 const sub_match<BiIter> &lhs,
20981 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
20982 )
20983 {
20984 return !(lhs < rhs); // 17
20985 }
20986
20987 template <class BiIter, class ST, class SA>
20988 bool operator<=(
20989 const sub_match<BiIter> &lhs,
20990 const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
20991 )
20992 {
20993 return !(rhs < lhs); // 18
20994 }
20995
20996 // Compares iterator_traits::value_type * with sub_match &.
20997 template <class BiIter>
20998 bool operator==(
20999 typename std::iterator_traits<BiIter>::value_type const *lhs,
21000 const sub_match<BiIter> &rhs
21001 )
21002 {
21003 return rhs.compare(lhs) == 0; // 19
21004 }
21005
21006 template <class BiIter>
21007 bool operator!=(
21008 typename std::iterator_traits<BiIter>::value_type const *lhs,
21009 const sub_match<BiIter> &rhs
21010 )
21011 {
21012 return !(lhs == rhs); // 20
21013 }
21014
21015 template <class BiIter>
21016 bool operator<(
21017 typename std::iterator_traits<BiIter>::value_type const *lhs,
21018 const sub_match<BiIter> &rhs
21019 )
21020 {
21021 return rhs.compare(lhs) > 0; // 21
21022 }
21023
21024 template <class BiIter>
21025 bool operator>(
21026 typename std::iterator_traits<BiIter>::value_type const *lhs,
21027 const sub_match<BiIter> &rhs
21028 )
21029 {
21030 return rhs < lhs; // 22
21031 }
21032
21033 template <class BiIter>
21034 bool operator>=(
21035 typename std::iterator_traits<BiIter>::value_type const *lhs,
21036 const sub_match<BiIter> &rhs
21037 )
21038 {
21039 return !(lhs < rhs); // 23
21040 }
21041
21042 template <class BiIter>
21043 bool operator<=(
21044 typename std::iterator_traits<BiIter>::value_type const *lhs,
21045 const sub_match<BiIter> &rhs
21046 )
21047 {
21048 return !(rhs < lhs); // 24
21049 }
21050
21051 // Compares sub_match & with iterator_traits::value_type *.
21052 template <class BiIter>
21053 bool operator==(
21054 const sub_match<BiIter> &lhs,
21055 typename std::iterator_traits<BiIter>::value_type const *rhs
21056 )
21057 {
21058 return lhs.compare(rhs) == 0; // 25
21059 }
21060
21061 template <class BiIter>
21062 bool operator!=(
21063 const sub_match<BiIter> &lhs,
21064 typename std::iterator_traits<BiIter>::value_type const *rhs
21065 )
21066 {
21067 return !(lhs == rhs); // 26
21068 }
21069
21070 template <class BiIter>
21071 bool operator<(
21072 const sub_match<BiIter> &lhs,
21073 typename std::iterator_traits<BiIter>::value_type const *rhs
21074 )
21075 {
21076 return lhs.compare(rhs) < 0; // 27
21077 }
21078
21079 template <class BiIter>
21080 bool operator>(
21081 const sub_match<BiIter> &lhs,
21082 typename std::iterator_traits<BiIter>::value_type const *rhs
21083 )
21084 {
21085 return rhs < lhs; // 28
21086 }
21087
21088 template <class BiIter>
21089 bool operator>=(
21090 const sub_match<BiIter> &lhs,
21091 typename std::iterator_traits<BiIter>::value_type const *rhs
21092 )
21093 {
21094 return !(lhs < rhs); // 29
21095 }
21096
21097 template <class BiIter>
21098 bool operator<=(
21099 const sub_match<BiIter> &lhs,
21100 typename std::iterator_traits<BiIter>::value_type const *rhs
21101 )
21102 {
21103 return !(rhs < lhs); // 30
21104 }
21105
21106 // Compares iterator_traits::value_type & with sub_match &.
21107 template <class BiIter>
21108 bool operator==(
21109 typename std::iterator_traits<BiIter>::value_type const &lhs,
21110 const sub_match<BiIter> &rhs
21111 )
21112 {
21113 return rhs.compare(typename sub_match<BiIter>::string_type(1, lhs)) == 0; // 31
21114 }
21115
21116 template <class BiIter>
21117 bool operator!=(
21118 typename std::iterator_traits<BiIter>::value_type const &lhs,
21119 const sub_match<BiIter> &rhs
21120 )
21121 {
21122 return !(lhs == rhs); // 32
21123 }
21124
21125 template <class BiIter>
21126 bool operator<(
21127 typename std::iterator_traits<BiIter>::value_type const &lhs,
21128 const sub_match<BiIter> &rhs
21129 )
21130 {
21131 return rhs.compare(typename sub_match<BiIter>::string_type(1, lhs)) > 0; // 33
21132 }
21133
21134 template <class BiIter>
21135 bool operator>(
21136 typename std::iterator_traits<BiIter>::value_type const &lhs,
21137 const sub_match<BiIter> &rhs
21138 )
21139 {
21140 return rhs < lhs; // 34
21141 }
21142
21143 template <class BiIter>
21144 bool operator>=(
21145 typename std::iterator_traits<BiIter>::value_type const &lhs,
21146 const sub_match<BiIter> &rhs
21147 )
21148 {
21149 return !(lhs < rhs); // 35
21150 }
21151
21152 template <class BiIter>
21153 bool operator<=(
21154 typename std::iterator_traits<BiIter>::value_type const &lhs,
21155 const sub_match<BiIter> &rhs
21156 )
21157 {
21158 return !(rhs < lhs); // 36
21159 }
21160
21161 // Compares sub_match & with iterator_traits::value_type &.
21162 template <class BiIter>
21163 bool operator==(
21164 const sub_match<BiIter> &lhs,
21165 typename std::iterator_traits<BiIter>::value_type const &rhs
21166 )
21167 {
21168 return lhs.compare(typename sub_match<BiIter>::string_type(1, rhs)) == 0; // 37
21169 }
21170
21171 template <class BiIter>
21172 bool operator!=(
21173 const sub_match<BiIter> &lhs,
21174 typename std::iterator_traits<BiIter>::value_type const &rhs
21175 )
21176 {
21177 return !(lhs == rhs); // 38
21178 }
21179
21180 template <class BiIter>
21181 bool operator<(
21182 const sub_match<BiIter> &lhs,
21183 typename std::iterator_traits<BiIter>::value_type const &rhs
21184 )
21185 {
21186 return lhs.compare(typename sub_match<BiIter>::string_type(1, rhs)) < 0; // 39
21187 }
21188
21189 template <class BiIter>
21190 bool operator>(
21191 const sub_match<BiIter> &lhs,
21192 typename std::iterator_traits<BiIter>::value_type const &rhs
21193 )
21194 {
21195 return rhs < lhs; // 40
21196 }
21197
21198 template <class BiIter>
21199 bool operator>=(
21200 const sub_match<BiIter> &lhs,
21201 typename std::iterator_traits<BiIter>::value_type const &rhs
21202 )
21203 {
21204 return !(lhs < rhs); // 41
21205 }
21206
21207 template <class BiIter>
21208 bool operator<=(
21209 const sub_match<BiIter> &lhs,
21210 typename std::iterator_traits<BiIter>::value_type const &rhs
21211 )
21212 {
21213 return !(rhs < lhs); // 42
21214 }
21215
21216 template <class charT, class ST, class BiIter>
21217 std::basic_ostream<charT, ST> &operator<<(std::basic_ostream<charT, ST> &os, const sub_match<BiIter> &m)
21218 {
21219 return (os << m.str());
21220 }
21221
21222 typedef sub_match<const char *> csub_match;
21223 typedef sub_match<const wchar_t *> wcsub_match;
21224 typedef sub_match<std::string::const_iterator> ssub_match;
21225 typedef sub_match<std::wstring::const_iterator> wssub_match;
21226
21227 typedef csub_match u8ccsub_match;
21228 typedef ssub_match u8cssub_match;
21229
21230 #if defined(WCHAR_MAX)
21231 #if WCHAR_MAX >= 0x10ffff
21232 typedef wcsub_match u32wcsub_match;
21233 typedef wssub_match u32wssub_match;
21234 typedef u32wcsub_match u1632wcsub_match;
21235 typedef u32wssub_match u1632wssub_match;
21236 #elif WCHAR_MAX >= 0xffff
21237 typedef wcsub_match u16wcsub_match;
21238 typedef wssub_match u16wssub_match;
21239 typedef u16wcsub_match u1632wcsub_match;
21240 typedef u16wssub_match u1632wssub_match;
21241 #endif
21242 #endif
21243
21244 #if defined(SRELL_CPP11_CHAR1632_ENABLED)
21245 typedef sub_match<const char16_t *> u16csub_match;
21246 typedef sub_match<const char32_t *> u32csub_match;
21247 typedef sub_match<std::u16string::const_iterator> u16ssub_match;
21248 typedef sub_match<std::u32string::const_iterator> u32ssub_match;
21249 #endif
21250
21251 #if defined(SRELL_CPP20_CHAR8_ENABLED)
21252 typedef sub_match<const char8_t *> u8csub_match;
21253 #else
21254 typedef u8ccsub_match u8csub_match;
21255 #endif
21256 #if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2
21257 typedef sub_match<std::u8string::const_iterator> u8ssub_match;
21258 #else // !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2
21259 typedef u8cssub_match u8ssub_match;
21260 #endif
21261
21262 // ... "regex_sub_match.hpp"]
21263 // ["regex_match_results.hpp" ...
21264
21265 // 28.10, class template match_results:
21266 template <class BidirectionalIterator, class Allocator = std::allocator<sub_match<BidirectionalIterator> > >
21267 class match_results
21268 {
21269 public:
21270
21271 typedef sub_match<BidirectionalIterator> value_type;
21272 typedef const value_type & const_reference;
21273 typedef const_reference reference;
21274 // typedef implementation defined const_iterator;
21275 typedef typename std::vector<value_type, Allocator>::const_iterator const_iterator;
21276 typedef const_iterator iterator;
21277 typedef typename std::iterator_traits<BidirectionalIterator>::difference_type difference_type;
21278
21279 #if defined(__cplusplus) && __cplusplus >= 201103L
21280 typedef typename std::allocator_traits<Allocator>::size_type size_type;
21281 #else
21282 typedef typename Allocator::size_type size_type; // TR1.
21283 #endif
21284
21285 typedef Allocator allocator_type;
21286 typedef typename std::iterator_traits<BidirectionalIterator>::value_type char_type;
21287 typedef std::basic_string<char_type> string_type;
21288
21289 public:
21290
21291 // 28.10.1, construct/copy/destroy:
21292 // [7.10.1] construct/copy/destroy
21293 explicit match_results(const Allocator &a = Allocator()) : ready_(0u), sub_matches_(a)
21294 {
21295 }
21296
21297 match_results(const match_results &m)
21298 {
21299 operator=(m);
21300 }
21301
21302 #if defined(SRELL_CPP11_MOVE_ENABLED)
21303 match_results(match_results &&m) SRELL_NOEXCEPT
21304 {
21305 operator=(std::move(m));
21306 }
21307 #endif
21308
21309 match_results &operator=(const match_results &m)
21310 {
21311 if (this != &m)
21312 {
21313 // this->sstate_ = m.sstate_;
21314 this->ready_ = m.ready_;
21315 this->sub_matches_ = m.sub_matches_;
21316 this->prefix_ = m.prefix_;
21317 this->suffix_ = m.suffix_;
21318 this->base_ = m.base_;
21319 #if !defined(SRELL_NO_NAMEDCAPTURE)
21320 this->gnames_ = m.gnames_;
21321 #endif
21322 }
21323 return *this;
21324 }
21325
21326 #if defined(SRELL_CPP11_MOVE_ENABLED)
21327 match_results &operator=(match_results &&m) SRELL_NOEXCEPT
21328 {
21329 if (this != &m)
21330 {
21331 // this->sstate_ = std::move(m.sstate_);
21332 this->ready_ = m.ready_;
21333 this->sub_matches_ = std::move(m.sub_matches_);
21334 this->prefix_ = std::move(m.prefix_);
21335 this->suffix_ = std::move(m.suffix_);
21336 this->base_ = m.base_;
21337 #if !defined(SRELL_NO_NAMEDCAPTURE)
21338 this->gnames_ = std::move(m.gnames_);
21339 #endif
21340 }
21341 return *this;
21342 }
21343 #endif
21344
21345 // ~match_results();
21346
21347 // 28.10.2, state:
21348 bool ready() const
21349 {
21350 return (ready_ & 1u) ? true : false;
21351 }
21352
21353 // 28.10.3, size:
21354 // [7.10.2] size
21355 size_type size() const
21356 {
21357 return sub_matches_.size();
21358 }
21359
21360 size_type max_size() const
21361 {
21362 return sub_matches_.max_size();
21363 // return static_cast<size_type>(~0) / sizeof (value_type);
21364 }
21365
21366 bool empty() const
21367 {
21368 return size() == 0;
21369 }
21370
21371 // 28.10.4, element access:
21372 // [7.10.3] element access
21373 difference_type length(const size_type sub = 0) const
21374 {
21375 return (*this)[sub].length();
21376 }
21377
21378 difference_type position(const size_type sub = 0) const
21379 {
21380 const_reference ref = (*this)[sub];
21381
21382 return std::distance(base_, ref.first);
21383 }
21384
21385 string_type str(const size_type sub = 0) const
21386 {
21387 return string_type((*this)[sub]);
21388 }
21389
21390 const_reference operator[](const size_type n) const
21391 {
21392 return n < sub_matches_.size() ? sub_matches_[n] : unmatched_;
21393 }
21394
21395 #if !defined(SRELL_NO_NAMEDCAPTURE)
21396
21397 // Helpers for overload resolution of the integer literal 0 of signed types.
21398 template <typename IntegerType>
21399 difference_type length(const IntegerType zero) const
21400 {
21401 return length(static_cast<size_type>(zero));
21402 }
21403 template <typename IntegerType>
21404 difference_type position(const IntegerType zero) const
21405 {
21406 return position(static_cast<size_type>(zero));
21407 }
21408 template <typename IntegerType>
21409 string_type str(const IntegerType zero) const
21410 {
21411 return str(static_cast<size_type>(zero));
21412 }
21413 template <typename IntegerType>
21414 const_reference operator[](const IntegerType zero) const
21415 {
21416 return operator[](static_cast<size_type>(zero));
21417 }
21418
21419 difference_type length(const string_type &sub) const
21420 {
21421 return (*this)[sub].length();
21422 }
21423
21424 difference_type position(const string_type &sub) const
21425 {
21426 const_reference ref = (*this)[sub];
21427
21428 return std::distance(base_, ref.first);
21429 }
21430
21431 string_type str(const string_type &sub) const
21432 {
21433 return string_type((*this)[sub]);
21434 }
21435
21436 const_reference operator[](const string_type &sub) const
21437 {
21438 const re_detail::ui_l32 backrefno = lookup_backref_number(sub.data(), sub.data() + sub.size());
21439
21440 return backrefno != gnamemap_type::notfound ? sub_matches_[backrefno] : unmatched_;
21441 }
21442
21443 difference_type length(const char_type *sub) const
21444 {
21445 return (*this)[sub].length();
21446 }
21447
21448 difference_type position(const char_type *sub) const
21449 {
21450 const_reference ref = (*this)[sub];
21451
21452 return std::distance(base_, ref.first);
21453 }
21454
21455 string_type str(const char_type *sub) const
21456 {
21457 return string_type((*this)[sub]);
21458 }
21459
21460 const_reference operator[](const char_type *sub) const
21461 {
21462 const re_detail::ui_l32 backrefno = lookup_backref_number(sub, sub + std::char_traits<char_type>::length(sub));
21463
21464 return backrefno != gnamemap_type::notfound ? sub_matches_[backrefno] : unmatched_;
21465 }
21466
21467 #endif // !defined(SRELL_NO_NAMEDCAPTURE)
21468
21469 const_reference prefix() const
21470 {
21471 return prefix_;
21472 }
21473
21474 const_reference suffix() const
21475 {
21476 return suffix_;
21477 }
21478
21479 const_iterator begin() const
21480 {
21481 return sub_matches_.begin();
21482 }
21483
21484 const_iterator end() const
21485 {
21486 return sub_matches_.end();
21487 }
21488
21489 const_iterator cbegin() const
21490 {
21491 return sub_matches_.begin();
21492 }
21493
21494 const_iterator cend() const
21495 {
21496 return sub_matches_.end();
21497 }
21498
21499 // 28.10.5, format:
21500 // [7.10.4] format
21501 template <class OutputIter>
21502 OutputIter format(
21503 OutputIter out,
21504 const char_type *fmt_first,
21505 const char_type *const fmt_last,
21506 regex_constants::match_flag_type /* flags */ = regex_constants::format_default
21507 ) const
21508 {
21509 if (this->ready() && !this->empty())
21510 {
21511 #if !defined(SRELL_NO_NAMEDCAPTURE)
21512 const bool no_groupnames = gnames_.size() == 0;
21513 #endif
21514 const value_type &m0 = (*this)[0];
21515
21516 while (fmt_first != fmt_last)
21517 {
21518 if (*fmt_first != static_cast<char_type>(re_detail::meta_char::mc_dollar)) // '$'
21519 {
21520 *out++ = *fmt_first++;
21521 }
21522 else
21523 {
21524 ++fmt_first;
21525 if (fmt_first == fmt_last)
21526 {
21527 *out++ = re_detail::meta_char::mc_dollar; // '$';
21528 }
21529 else if (*fmt_first == static_cast<char_type>(re_detail::char_other::co_amp)) // '&', $&
21530 {
21531 out = std::copy(m0.first, m0.second, out);
21532 ++fmt_first;
21533 }
21534 else if (*fmt_first == static_cast<char_type>(re_detail::char_other::co_grav)) // '`', $`, prefix.
21535 {
21536 out = std::copy(this->prefix().first, this->prefix().second, out);
21537 ++fmt_first;
21538 }
21539 else if (*fmt_first == static_cast<char_type>(re_detail::char_other::co_apos)) // '\'', $', suffix.
21540 {
21541 out = std::copy(this->suffix().first, this->suffix().second, out);
21542 ++fmt_first;
21543 }
21544 #if !defined(SRELL_NO_NAMEDCAPTURE)
21545 else if (*fmt_first == static_cast<char_type>(re_detail::meta_char::mc_lt) && !no_groupnames) // '<', $<
21546 {
21547 const char_type *const current_backup = fmt_first;
21548 bool replaced = false;
21549
21550 if (++fmt_first == fmt_last)
21551 ; // Do nothing.
21552 else
21553 {
21554 const char_type *const name_begin = fmt_first;
21555
21556 for (;; ++fmt_first)
21557 {
21558 if (*fmt_first == static_cast<char_type>(re_detail::meta_char::mc_gt))
21559 {
21560 const re_detail::ui_l32 backref_number = lookup_backref_number(name_begin, fmt_first);
21561
21562 if (backref_number != gnamemap_type::notfound)
21563 {
21564 const value_type &mn = (*this)[backref_number];
21565
21566 if (mn.matched)
21567 out = std::copy(mn.first, mn.second, out);
21568 // replaced = true;
21569 }
21570 replaced = true;
21571 ++fmt_first;
21572 break;
21573 }
21574 if (fmt_first == fmt_last)
21575 break;
21576 }
21577 }
21578 if (!replaced)
21579 {
21580 fmt_first = current_backup;
21581 *out++ = re_detail::meta_char::mc_dollar; // '$';
21582 }
21583 }
21584 #endif // !defined(SRELL_NO_NAMEDCAPTURE)
21585 else
21586 {
21587 const char_type *const backup_pos = fmt_first;
21588 size_type backref_number = 0;
21589
21590 if (fmt_first != fmt_last && *fmt_first >= static_cast<char_type>(re_detail::char_alnum::ch_0) && *fmt_first <= static_cast<char_type>(re_detail::char_alnum::ch_9)) // '0'-'9'
21591 {
21592 backref_number += *fmt_first - re_detail::char_alnum::ch_0; // '0';
21593
21594 if (++fmt_first != fmt_last && *fmt_first >= static_cast<char_type>(re_detail::char_alnum::ch_0) && *fmt_first <= static_cast<char_type>(re_detail::char_alnum::ch_9)) // '0'-'9'
21595 {
21596 backref_number *= 10;
21597 backref_number += *fmt_first - re_detail::char_alnum::ch_0; // '0';
21598 ++fmt_first;
21599 }
21600 }
21601
21602 if (backref_number && backref_number < this->size())
21603 {
21604 const value_type &mn = (*this)[backref_number];
21605
21606 if (mn.matched)
21607 out = std::copy(mn.first, mn.second, out);
21608 }
21609 else
21610 {
21611 *out++ = re_detail::meta_char::mc_dollar; // '$';
21612
21613 fmt_first = backup_pos;
21614 if (*fmt_first == static_cast<char_type>(re_detail::meta_char::mc_dollar))
21615 ++fmt_first;
21616 }
21617 }
21618 }
21619 }
21620 }
21621 return out;
21622 }
21623
21624 template <class OutputIter, class ST, class SA>
21625 OutputIter format(
21626 OutputIter out,
21627 const std::basic_string<char_type, ST, SA> &fmt,
21628 regex_constants::match_flag_type flags = regex_constants::format_default
21629 ) const
21630 {
21631 return format(out, fmt.data(), fmt.data() + fmt.size(), flags);
21632 }
21633
21634 template <class ST, class SA>
21635 std::basic_string<char_type, ST, SA> format(
21636 const string_type &fmt,
21637 regex_constants::match_flag_type flags = regex_constants::format_default
21638 ) const
21639 {
21640 std::basic_string<char_type, ST, SA> result;
21641
21642 // format(std::back_insert_iterator<string_type>(result), fmt, flags);
21643 format(std::back_inserter(result), fmt, flags);
21644 return result;
21645 }
21646
21647 string_type format(const char_type *fmt, regex_constants::match_flag_type flags = regex_constants::format_default) const
21648 {
21649 string_type result;
21650
21651 format(std::back_inserter(result), fmt, fmt + std::char_traits<char_type>::length(fmt), flags);
21652 return result;
21653 }
21654
21655 // 28.10.6, allocator:
21656 // [7.10.5] allocator
21657 allocator_type get_allocator() const
21658 {
21659 return allocator_type();
21660 }
21661
21662 // 28.10.7, swap:
21663 // [7.10.6] swap
21664 void swap(match_results &that)
21665 {
21666 const match_results tmp(that);
21667 that = *this;
21668 *this = tmp;
21669 }
21670
21671 regex_constants::error_type ecode() const
21672 {
21673 return static_cast<regex_constants::error_type>(ready_ >> 1);
21674 }
21675
21676 public: // For internal.
21677
21678 typedef match_results<BidirectionalIterator> match_results_type;
21679 typedef typename match_results_type::size_type match_results_size_type;
21680 typedef typename re_detail::re_search_state</*charT, */BidirectionalIterator> search_state_type;
21681 #if !defined(SRELL_NO_NAMEDCAPTURE)
21682 typedef typename re_detail::groupname_mapper<char_type> gnamemap_type;
21683 #endif
21684
21685 search_state_type sstate_;
21686
21687 void clear_()
21688 {
21689 ready_ = 0u;
21690 sub_matches_.clear();
21691 // prefix_.matched = false;
21692 // suffix_.matched = false;
21693 #if !defined(SRELL_NO_NAMEDCAPTURE)
21694 gnames_.clear();
21695 #endif
21696 }
21697
21698 // template <typename charT>
21699 #if !defined(SRELL_NO_NAMEDCAPTURE)
21700 bool set_match_results_(const gnamemap_type &gnames)
21701 #else
21702 bool set_match_results_()
21703 #endif
21704 {
21705 sub_matches_.resize(sstate_.bracket.size());
21706 // value_type &m0 = sub_matches_[0];
21707
21708 sub_matches_[0].matched = true;
21709
21710 for (re_detail::ui_l32 i = 1; i < static_cast<re_detail::ui_l32>(sstate_.bracket.size()); ++i)
21711 sub_matches_[i].set_(sstate_.bracket[i]);
21712
21713 base_ = sstate_.lblim;
21714 prefix_.first = sstate_.srchbegin;
21715 prefix_.second = sub_matches_[0].first = sstate_.bracket[0].core.open_at;
21716 suffix_.first = sub_matches_[0].second = sstate_.ssc.iter;
21717 suffix_.second = sstate_.srchend;
21718
21719 prefix_.matched = prefix_.first != prefix_.second;
21720 suffix_.matched = suffix_.first != suffix_.second;
21721
21722 #if !defined(SRELL_NO_NAMEDCAPTURE)
21723 gnames_ = gnames;
21724 #endif
21725 ready_ = 1u;
21726 return true;
21727 }
21728
21729 bool set_match_results_bmh_()
21730 {
21731 sub_matches_.resize(1);
21732 // value_type &m0 = sub_matches_[0];
21733
21734 sub_matches_[0].matched = true;
21735
21736 base_ = sstate_.lblim;
21737 prefix_.first = sstate_.srchbegin;
21738 prefix_.second = sub_matches_[0].first = sstate_.ssc.iter;
21739 suffix_.first = sub_matches_[0].second = sstate_.nextpos;
21740 suffix_.second = sstate_.srchend;
21741
21742 prefix_.matched = prefix_.first != prefix_.second;
21743 suffix_.matched = suffix_.first != suffix_.second;
21744
21745 ready_ = 1u;
21746 return true;
21747 }
21748
21749 void set_prefix1_(const BidirectionalIterator pf)
21750 {
21751 prefix_.first = pf;
21752 }
21753
21754 void update_prefix1_(const BidirectionalIterator pf)
21755 {
21756 prefix_.first = pf;
21757 prefix_.matched = prefix_.first != prefix_.second;
21758 }
21759
21760 void update_prefix2_(const BidirectionalIterator ps)
21761 {
21762 prefix_.second = ps;
21763 prefix_.matched = prefix_.first != prefix_.second;
21764 }
21765
21766 void update_m0_(const BidirectionalIterator mf, const BidirectionalIterator ms)
21767 {
21768 sub_matches_.resize(1);
21769
21770 sub_matches_[0].first = mf;
21771 sub_matches_[0].second = ms;
21772 sub_matches_[0].matched = true;
21773
21774 prefix_.first = prefix_.second = mf;
21775 }
21776
21777 bool mark_as_failed_(const int reason)
21778 {
21779 ready_ = reason ? (reason << 1) : 1u;
21780 return false;
21781 }
21782
21783 #if !defined(SRELL_NO_NAMEDCAPTURE)
21784
21785 typename gnamemap_type::gname_string lookup_gname_(const re_detail::ui_l32 gno) const
21786 {
21787 return gnames_[gno];
21788 }
21789
21790 #endif
21791
21792 private:
21793
21794 #if !defined(SRELL_NO_NAMEDCAPTURE)
21795
21796 re_detail::ui_l32 lookup_backref_number(const char_type *begin, const char_type *const end) const
21797 {
21798 typename gnamemap_type::gname_string key(end - begin);
21799
21800 for (std::size_t i = 0; begin != end; ++begin, ++i)
21801 key[i] = *begin;
21802
21803 const re_detail::ui_l32 *list = gnames_[key];
21804 re_detail::ui_l32 gno = gnamemap_type::notfound;
21805
21806 if (list)
21807 {
21808 const re_detail::ui_l32 num = list[0];
21809
21810 for (re_detail::ui_l32 i = 1; i <= num; ++i)
21811 {
21812 gno = list[i];
21813 if (gno < static_cast<re_detail::ui_l32>(sub_matches_.size()) && sub_matches_[gno].matched)
21814 break;
21815 }
21816 }
21817 return gno;
21818 }
21819
21820 #endif // !defined(SRELL_NO_NAMEDCAPTURE)
21821
21822 public: // For debug.
21823
21824 template <typename BasicRegexT>
21825 void print_sub_matches(const BasicRegexT &, const int) const;
21826 void print_addresses(const value_type &, const char *const) const;
21827
21828 private:
21829
21830 typedef std::vector<value_type, Allocator> sub_match_array;
21831
21832 unsigned int ready_;
21833 sub_match_array sub_matches_;
21834 value_type prefix_;
21835 value_type suffix_;
21836 value_type unmatched_;
21837 BidirectionalIterator base_;
21838
21839 #if !defined(SRELL_NO_NAMEDCAPTURE)
21840 gnamemap_type gnames_;
21841 #endif
21842 };
21843
21844 // 28.10.7, match_results swap:
21845 // [7.10.6] match_results swap
21846 template <class BidirectionalIterator, class Allocator>
21847 void swap(
21848 match_results<BidirectionalIterator, Allocator> &m1,
21849 match_results<BidirectionalIterator, Allocator> &m2
21850 )
21851 {
21852 m1.swap(m2);
21853 }
21854
21855 // 28.10.8, match_results comparisons
21856 template <class BidirectionalIterator, class Allocator>
21857 bool operator==(
21858 const match_results<BidirectionalIterator, Allocator> &m1,
21859 const match_results<BidirectionalIterator, Allocator> &m2
21860 )
21861 {
21862 if (!m1.ready() && !m2.ready())
21863 return true;
21864
21865 if (m1.ready() && m2.ready())
21866 {
21867 if (m1.empty() && m2.empty())
21868 return true;
21869
21870 if (!m1.empty() && !m2.empty())
21871 {
21872 return m1.prefix() == m2.prefix() && m1.size() == m2.size() && std::equal(m1.begin(), m1.end(), m2.begin()) && m1.suffix() == m2.suffix();
21873 }
21874 }
21875 return false;
21876 }
21877
21878 template <class BidirectionalIterator, class Allocator>
21879 bool operator!=(
21880 const match_results<BidirectionalIterator, Allocator> &m1,
21881 const match_results<BidirectionalIterator, Allocator> &m2
21882 )
21883 {
21884 return !(m1 == m2);
21885 }
21886
21887 typedef match_results<const char *> cmatch;
21888 typedef match_results<const wchar_t *> wcmatch;
21889 typedef match_results<std::string::const_iterator> smatch;
21890 typedef match_results<std::wstring::const_iterator> wsmatch;
21891
21892 typedef cmatch u8ccmatch;
21893 typedef smatch u8csmatch;
21894
21895 #if defined(WCHAR_MAX)
21896 #if WCHAR_MAX >= 0x10ffff
21897 typedef wcmatch u32wcmatch;
21898 typedef wsmatch u32wsmatch;
21899 typedef u32wcmatch u1632wcmatch;
21900 typedef u32wsmatch u1632wsmatch;
21901 #elif WCHAR_MAX >= 0xffff
21902 typedef wcmatch u16wcmatch;
21903 typedef wsmatch u16wsmatch;
21904 typedef u16wcmatch u1632wcmatch;
21905 typedef u16wsmatch u1632wsmatch;
21906 #endif
21907 #endif
21908
21909 #if defined(SRELL_CPP11_CHAR1632_ENABLED)
21910 typedef match_results<const char16_t *> u16cmatch;
21911 typedef match_results<const char32_t *> u32cmatch;
21912 typedef match_results<std::u16string::const_iterator> u16smatch;
21913 typedef match_results<std::u32string::const_iterator> u32smatch;
21914 #endif
21915
21916 #if defined(SRELL_CPP20_CHAR8_ENABLED)
21917 typedef match_results<const char8_t *> u8cmatch;
21918 #else
21919 typedef u8ccmatch u8cmatch;
21920 #endif
21921 #if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2
21922 typedef match_results<std::u8string::const_iterator> u8smatch;
21923 #else // !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2
21924 typedef u8csmatch u8smatch;
21925 #endif
21926
21927 // ... "regex_match_results.hpp"]
21928 // ["rei_algorithm.hpp" ...
21929
21930 namespace re_detail
21931 {
21932
21933 #if !defined(SRELL_NO_APIEXT)
21934
21935 template <typename charT>
21936 struct repoptions
21937 {
21938 const charT *fmt_begin;
21939 const charT *fmt_end;
21940 bool global;
21941
21942 repoptions(const charT *const b, const charT *const e, const bool g)
21943 : fmt_begin(b), fmt_end(e), global(g)
21944 {
21945 }
21946 };
21947
21948 template <typename charT, typename ST, typename SA, typename BidiIter>
21949 bool call_mrformat(std::basic_string<charT, ST, SA> &s, const match_results<BidiIter> &m, void *p)
21950 {
21951 const repoptions<charT> *const opts = reinterpret_cast<const repoptions<charT> *>(p);
21952
21953 m.format(std::back_inserter(s), opts->fmt_begin, opts->fmt_end); //, flags);
21954 return opts->global;
21955 }
21956
21957 template <typename charT, typename StringLike, typename iteratorTag>
21958 iteratorTag pos0_(const StringLike &s, iteratorTag)
21959 {
21960 return s.begin();
21961 }
21962 template <typename charT, typename StringLike>
21963 const charT *pos0_(const StringLike &s, const charT *)
21964 {
21965 return s.data();
21966 }
21967
21968 template <typename charT, typename StringLike, typename iteratorTag>
21969 iteratorTag pos1_(const StringLike &s, iteratorTag)
21970 {
21971 return s.end();
21972 }
21973 template <typename charT, typename StringLike>
21974 const charT *pos1_(const StringLike &s, const charT *)
21975 {
21976 return s.data() + s.size();
21977 }
21978
21979 #endif // !defined(SRELL_NO_APIEXT)
21980
21981 template <typename charT, typename traits>
21982 class re_object : public re_compiler<charT, traits>
21983 {
21984 public:
21985
21986 template <typename BidirectionalIterator, typename Allocator>
21987 bool search
21988 (
21989 const BidirectionalIterator begin,
21990 const BidirectionalIterator end,
21991 const BidirectionalIterator lookbehind_limit,
21992 match_results<BidirectionalIterator, Allocator> &results,
21993 const regex_constants::match_flag_type flags
21994 ) const
21995 {
21996 int reason = 0;
21997
21998 results.clear_();
21999
22000 if (this->NFA_states.size())
22001 {
22002 re_search_state<BidirectionalIterator> &sstate = results.sstate_;
22003
22004 sstate.init(begin, end, lookbehind_limit, flags);
22005
22006 #if !defined(SRELLDBG_NO_BMH)
22007 if (this->bmdata && !(sstate.flags & regex_constants::match_continuous))
22008 {
22009 #if !defined(SRELL_NO_ICASE)
22010 if (!this->is_ricase() ? this->bmdata->do_casesensitivesearch(sstate, typename std::iterator_traits<BidirectionalIterator>::iterator_category()) : this->bmdata->do_icasesearch(sstate, typename std::iterator_traits<BidirectionalIterator>::iterator_category()))
22011 #else
22012 if (this->bmdata->do_casesensitivesearch(sstate, typename std::iterator_traits<BidirectionalIterator>::iterator_category()))
22013 #endif // !defined(SRELL_NO_ICASE)
22014 return results.set_match_results_bmh_();
22015
22016 goto NOT_FOUND;
22017 }
22018 #endif // !defined(SRELLDBG_NO_BMH)
22019
22020 sstate.init_for_automaton(this->number_of_brackets, this->number_of_counters, this->number_of_repeats);
22021
22022 if (sstate.flags & regex_constants::match_continuous)
22023 {
22024 sstate.entry_state = this->NFA_states[0].next_state2;
22025
22026 sstate.ssc.iter = sstate.nextpos;
22027
22028 #if defined(SRELL_NO_LIMIT_COUNTER)
22029 sstate.reset();
22030 #else
22031 sstate.reset(this->limit_counter);
22032 #endif
22033 reason = !this->is_ricase() ? run_automaton<false, false>(sstate) : run_automaton<true, false>(sstate);
22034
22035 goto CHECK_REASON;
22036 }
22037
22038 sstate.entry_state = this->NFA_states[0].next_state1;
22039
22040 #if !defined(SRELLDBG_NO_SCFINDER)
22041 if (this->NFA_states[0].char_num != constants::invalid_u32value)
22042 {
22043 reason = !this->is_ricase() ? do_search_sc<false>(sstate, typename std::iterator_traits<BidirectionalIterator>::iterator_category()) : do_search_sc<true>(sstate, typename std::iterator_traits<BidirectionalIterator>::iterator_category());
22044
22045 goto CHECK_REASON;
22046 }
22047 #endif // !defined(SRELLDBG_NO_SCFINDER)
22048
22049 #if !defined(SRELL_NO_ICASE)
22050 reason = !this->is_ricase() ? do_search<false>(sstate) : do_search<true>(sstate);
22051 #else
22052 reason = do_search<false>(results);
22053 #endif
22054 CHECK_REASON:
22055 if (reason == 1)
22056 {
22057 #if !defined(SRELL_NO_NAMEDCAPTURE)
22058 return results.set_match_results_(this->namedcaptures);
22059 #else
22060 return results.set_match_results_();
22061 #endif
22062 }
22063 }
22064 #if !defined(SRELLDBG_NO_BMH)
22065 NOT_FOUND:
22066 #endif
22067 return results.mark_as_failed_(reason);
22068 }
22069
22070 private:
22071
22072 typedef typename traits::utf_traits utf_traits;
22073
22074 template <const bool icase, typename BidirectionalIterator>
22075 int do_search(re_search_state<BidirectionalIterator> &sstate) const
22076 {
22077 for (;;)
22078 {
22079 const bool final = sstate.nextpos == sstate.srchend;
22080
22081 sstate.ssc.iter = sstate.nextpos;
22082
22083 if (!final)
22084 {
22085 #if defined(SRELLDBG_NO_1STCHRCLS)
22086 utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend);
22087 #else
22088 #if !defined(SRELLDBG_NO_BITSET)
22089 if (!this->firstchar_class_bs.test((*sstate.nextpos++) & utf_traits::bitsetmask))
22090 #else
22091 const ui_l32 firstchar = utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend);
22092
22093 if (!this->firstchar_class.is_included(firstchar))
22094 #endif
22095 continue;
22096 #endif // defined(SRELLDBG_NO_1STCHRCLS)
22097 }
22098 // Even when final == true, we have to try for such expressions
22099 // as "" =~ /^$/ or "..." =~ /$/.
22100
22101 #if defined(SRELL_NO_LIMIT_COUNTER)
22102 sstate.reset(/* first */);
22103 #else
22104 sstate.reset(/* first, */ this->limit_counter);
22105 #endif
22106 const int reason = run_automaton<icase, false>(sstate /* , false */);
22107 if (reason)
22108 return reason;
22109
22110 if (final)
22111 break;
22112 }
22113 return 0;
22114 }
22115
22116 #if !defined(SRELLDBG_NO_SCFINDER)
22117
22118 template <const bool icase, typename ContiguousIterator>
22119 int do_search_sc(re_search_state<ContiguousIterator> &sstate, const std::random_access_iterator_tag) const
22120 {
22121 if (is_contiguous(sstate.srchbegin))
22122 {
22123 typedef typename std::iterator_traits<ContiguousIterator>::value_type char_type2;
22124 const char_type2 ec = static_cast<char_type2>(this->NFA_states[0].char_num);
22125
22126 for (;;)
22127 {
22128 if (sstate.nextpos >= sstate.srchend)
22129 break;
22130
22131 sstate.ssc.iter = sstate.nextpos;
22132
22133 const char_type2 *const bgnpos = std::char_traits<char_type2>::find(&*sstate.nextpos, sstate.srchend - sstate.nextpos, ec);
22134
22135 if (bgnpos)
22136 {
22137 // sstate.ssc.iter = bgnpos;
22138 sstate.ssc.iter += bgnpos - &*sstate.nextpos;
22139 // sstate.nextpos = bgnpos + 1;
22140 sstate.nextpos = sstate.ssc.iter + 1;
22141
22142 #if defined(SRELL_NO_LIMIT_COUNTER)
22143 sstate.reset();
22144 #else
22145 sstate.reset(this->limit_counter);
22146 #endif
22147 const int reason = run_automaton<icase, false>(sstate);
22148 if (reason)
22149 return reason;
22150 }
22151 else
22152 break;
22153 }
22154 return 0;
22155 }
22156 return do_search_sc<icase>(sstate, std::bidirectional_iterator_tag());
22157 }
22158
22159 template <const bool icase, typename BidirectionalIterator>
22160 int do_search_sc(re_search_state<BidirectionalIterator> &sstate, const std::bidirectional_iterator_tag) const
22161 {
22162 typedef typename std::iterator_traits<BidirectionalIterator>::value_type char_type2;
22163 const char_type2 ec = static_cast<char_type2>(this->NFA_states[0].char_num);
22164
22165 for (; sstate.nextpos != sstate.srchend;)
22166 {
22167 sstate.ssc.iter = find(sstate.nextpos, sstate.srchend, ec);
22168
22169 if (sstate.ssc.iter != sstate.srchend)
22170 {
22171 sstate.nextpos = sstate.ssc.iter;
22172 ++sstate.nextpos;
22173
22174 #if defined(SRELL_NO_LIMIT_COUNTER)
22175 sstate.reset();
22176 #else
22177 sstate.reset(this->limit_counter);
22178 #endif
22179 const int reason = run_automaton<icase, false>(sstate);
22180 if (reason)
22181 return reason;
22182 }
22183 else
22184 break;
22185 }
22186 return 0;
22187 }
22188
22189 template <typename BidirectionalIterator, typename CharT0>
22190 BidirectionalIterator find(BidirectionalIterator begin, const BidirectionalIterator end, const CharT0 c) const
22191 {
22192 for (; begin != end; ++begin)
22193 if ((*begin & utf_traits::bitsetmask) == (c & utf_traits::bitsetmask))
22194 break;
22195
22196 return begin;
22197 }
22198
22199 template <typename BidirectionalIterator>
22200 bool is_contiguous(BidirectionalIterator) const
22201 {
22202 return false;
22203 }
22204
22205 #if !defined(SRELL_NO_CONCEPTS) && defined(__cpp_concepts)
22206
22207 template <std::contiguous_iterator I>
22208 bool is_contiguous(I) const
22209 {
22210 return true;
22211 }
22212
22213 #else
22214
22215 bool is_contiguous(const charT *) const
22216 {
22217 return true;
22218 }
22219
22220 bool is_contiguous(typename std::basic_string<charT>::const_iterator) const
22221 {
22222 return true;
22223 }
22224 #endif // !defined(SRELL_NO_CONCEPTS) && defined(__cpp_concepts)
22225 #endif // !defined(SRELLDBG_NO_SCFINDER)
22226
22227 template <typename T, const bool>
22228 struct casehelper
22229 {
22230 static T canonicalise(const T t)
22231 {
22232 return t;
22233 }
22234 };
22235
22236 template <typename T>
22237 struct casehelper<T, true>
22238 {
22239 static T canonicalise(const T t)
22240 {
22241 return unicode_case_folding::do_casefolding(t);
22242 }
22243 };
22244
22245 template <const bool icase, const bool reverse, typename BidirectionalIterator>
22246 int run_automaton
22247 (
22248 re_search_state</*charT, */BidirectionalIterator> &sstate
22249 ) const
22250 {
22251 typedef casehelper<ui_l32, icase> casehelper_type;
22252 typedef typename re_object_core<charT, traits>::state_type state_type;
22253 typedef re_search_state</*charT, */BidirectionalIterator> ss_type;
22254 // typedef typename ss_type::search_state_core ssc_type;
22255 typedef typename ss_type::submatchcore_type submatchcore_type;
22256 typedef typename ss_type::submatch_type submatch_type;
22257 typedef typename ss_type::counter_type counter_type;
22258 typedef typename ss_type::position_type position_type;
22259 ui_l32 is_matched;
22260
22261 goto START;
22262
22263 JUDGE:
22264 if (is_matched)
22265 {
22266 MATCHED:
22267 sstate.ssc.state = sstate.ssc.state->next_state1;
22268 }
22269 else
22270 {
22271 NOT_MATCHED:
22272
22273 #if !defined(SRELL_NO_LIMIT_COUNTER)
22274 if (--sstate.failure_counter)
22275 {
22276 #endif
22277 if (sstate.bt_size() > sstate.btstack_size)
22278 {
22279 sstate.pop_bt(sstate.ssc);
22280
22281 sstate.ssc.state = sstate.ssc.state->next_state2;
22282 }
22283 else
22284 return 0;
22285
22286 #if !defined(SRELL_NO_LIMIT_COUNTER)
22287 }
22288 else
22289 #if defined(SRELL_NO_THROW)
22290 return static_cast<int>(regex_constants::error_complexity);
22291 #else
22292 throw regex_error(regex_constants::error_complexity);
22293 #endif
22294 #endif
22295 }
22296
22297 // START:
22298 for (;;)
22299 {
22300 START:
22301
22302 switch (sstate.ssc.state->type)
22303 {
22304 case st_character:
22305
22306 #if defined(_MSC_VER) && _MSC_VER >= 1400
22307 #pragma warning(push)
22308 #pragma warning(disable:4127)
22309 #endif
22310 if (!reverse)
22311 #if defined(_MSC_VER) && _MSC_VER >= 1400
22312 #pragma warning(pop)
22313 #endif
22314 {
22315 if (!(sstate.ssc.iter == sstate.srchend))
22316 {
22317 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22318 const BidirectionalIterator prevpos = sstate.ssc.iter;
22319 #endif
22320 const ui_l32 uchar = casehelper_type::canonicalise(utf_traits::codepoint_inc(sstate.ssc.iter, sstate.srchend));
22321 RETRY_CF:
22322
22323 if (sstate.ssc.state->char_num == uchar)
22324 goto MATCHED;
22325
22326 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22327 if (sstate.ssc.state->next_state2)
22328 {
22329 sstate.ssc.state = sstate.ssc.state->next_state2;
22330
22331 if (sstate.ssc.state->type == st_character)
22332 goto RETRY_CF;
22333
22334 sstate.ssc.iter = prevpos;
22335 continue;
22336 }
22337 #endif
22338 }
22339 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22340 else if (sstate.ssc.state->next_state2)
22341 {
22342 sstate.ssc.state = sstate.ssc.state->next_state2;
22343 continue;
22344 }
22345 #endif
22346 }
22347 else // reverse == true.
22348 {
22349 if (!(sstate.ssc.iter == sstate.lblim))
22350 {
22351 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22352 const BidirectionalIterator prevpos = sstate.ssc.iter;
22353 #endif
22354 const ui_l32 uchar = casehelper_type::canonicalise(utf_traits::dec_codepoint(sstate.ssc.iter, sstate.lblim));
22355 RETRY_CB:
22356
22357 if (sstate.ssc.state->char_num == uchar)
22358 goto MATCHED;
22359
22360 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22361 if (sstate.ssc.state->next_state2)
22362 {
22363 sstate.ssc.state = sstate.ssc.state->next_state2;
22364
22365 if (sstate.ssc.state->type == st_character)
22366 goto RETRY_CB;
22367
22368 sstate.ssc.iter = prevpos;
22369 continue;
22370 }
22371 #endif
22372 }
22373 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22374 else if (sstate.ssc.state->next_state2)
22375 {
22376 sstate.ssc.state = sstate.ssc.state->next_state2;
22377 continue;
22378 }
22379 #endif
22380 }
22381 goto NOT_MATCHED;
22382
22383 case st_character_class:
22384
22385 #if defined(_MSC_VER) && _MSC_VER >= 1400
22386 #pragma warning(push)
22387 #pragma warning(disable:4127)
22388 #endif
22389 if (!reverse)
22390 #if defined(_MSC_VER) && _MSC_VER >= 1400
22391 #pragma warning(pop)
22392 #endif
22393 {
22394 if (!(sstate.ssc.iter == sstate.srchend))
22395 {
22396 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22397 const BidirectionalIterator prevpos = sstate.ssc.iter;
22398 #endif
22399 const ui_l32 uchar = utf_traits::codepoint_inc(sstate.ssc.iter, sstate.srchend);
22400 // RETRY_CCF:
22401
22402 #if !defined(SRELLDBG_NO_CCPOS)
22403 if (this->character_class.is_included(sstate.ssc.state->quantifier.atleast, sstate.ssc.state->quantifier.atmost, uchar))
22404 #else
22405 if (this->character_class.is_included(sstate.ssc.state->char_num, uchar))
22406 #endif
22407 goto MATCHED;
22408
22409 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22410 if (sstate.ssc.state->next_state2)
22411 {
22412 sstate.ssc.state = sstate.ssc.state->next_state2;
22413
22414 // if (sstate.ssc.state->type == st_character_class)
22415 // goto RETRY_CCF;
22416
22417 sstate.ssc.iter = prevpos;
22418 continue;
22419 }
22420 #endif
22421 }
22422 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22423 else if (sstate.ssc.state->next_state2)
22424 {
22425 sstate.ssc.state = sstate.ssc.state->next_state2;
22426 continue;
22427 }
22428 #endif
22429 }
22430 else // reverse == true.
22431 {
22432 if (!(sstate.ssc.iter == sstate.lblim))
22433 {
22434 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22435 const BidirectionalIterator prevpos = sstate.ssc.iter;
22436 #endif
22437 const ui_l32 uchar = utf_traits::dec_codepoint(sstate.ssc.iter, sstate.lblim);
22438 // RETRY_CCB:
22439
22440 #if !defined(SRELLDBG_NO_CCPOS)
22441 if (this->character_class.is_included(sstate.ssc.state->quantifier.atleast, sstate.ssc.state->quantifier.atmost, uchar))
22442 #else
22443 if (this->character_class.is_included(sstate.ssc.state->char_num, uchar))
22444 #endif
22445 goto MATCHED;
22446
22447 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22448 if (sstate.ssc.state->next_state2)
22449 {
22450 sstate.ssc.state = sstate.ssc.state->next_state2;
22451
22452 // if (sstate.ssc.state->type == st_character_class)
22453 // goto RETRY_CCB;
22454
22455 sstate.ssc.iter = prevpos;
22456 continue;
22457 }
22458 #endif
22459 }
22460 #if !defined(SRELLDBG_NO_ASTERISK_OPT)
22461 else if (sstate.ssc.state->next_state2)
22462 {
22463 sstate.ssc.state = sstate.ssc.state->next_state2;
22464 continue;
22465 }
22466 #endif
22467 }
22468 goto NOT_MATCHED;
22469
22470 case st_epsilon:
22471
22472 #if defined(SRELLDBG_NO_SKIP_EPSILON)
22473 if (sstate.ssc.state->next_state2)
22474 #endif
22475 {
22476 sstate.push_bt(sstate.ssc);
22477 }
22478
22479 sstate.ssc.state = sstate.ssc.state->next_state1;
22480 continue;
22481
22482 default:
22483 switch (sstate.ssc.state->type)
22484 {
22485
22486 case st_check_counter:
22487 {
22488 ST_CHECK_COUNTER:
22489 const ui_l32 counter = sstate.counter[sstate.ssc.state->char_num];
22490
22491 if (counter < sstate.ssc.state->quantifier.atleast)
22492 {
22493 ++sstate.ssc.state;
22494 }
22495 else
22496 {
22497 if (counter < sstate.ssc.state->quantifier.atmost || sstate.ssc.state->quantifier.is_infinity())
22498 {
22499 sstate.push_bt(sstate.ssc);
22500 sstate.ssc.state = sstate.ssc.state->next_state1;
22501 }
22502 else
22503 {
22504 sstate.ssc.state = sstate.ssc.state->quantifier.is_greedy
22505 ? sstate.ssc.state->next_state2
22506 : sstate.ssc.state->next_state1;
22507 }
22508 continue;
22509 }
22510 }
22511 //@fallthrough@
22512
22513 case st_increment_counter:
22514 {
22515 ui_l32 &counter = sstate.counter[sstate.ssc.state->char_num];
22516
22517 if (counter != constants::infinity)
22518 {
22519 ++counter;
22520 if (sstate.ssc.state->next_state2)
22521 sstate.push_bt(sstate.ssc);
22522 }
22523 }
22524 goto MATCHED;
22525
22526 case st_decrement_counter:
22527 --sstate.counter[sstate.ssc.state->char_num];
22528 goto NOT_MATCHED;
22529
22530 case st_save_and_reset_counter:
22531 {
22532 counter_type &c = sstate.counter[sstate.ssc.state->char_num];
22533
22534 sstate.push_c(c);
22535 sstate.push_bt(sstate.ssc);
22536 c = 0;
22537 }
22538 sstate.ssc.state = sstate.ssc.state->next_state1;
22539 goto ST_CHECK_COUNTER;
22540
22541 case st_restore_counter:
22542 sstate.pop_c(sstate.counter[sstate.ssc.state->char_num]);
22543 goto NOT_MATCHED;
22544
22545 case st_roundbracket_open: // '(':
22546 {
22547 ST_ROUNDBRACKET_OPEN:
22548 for (ui_l32 brno = sstate.ssc.state->quantifier.atleast; brno <= sstate.ssc.state->quantifier.atmost; ++brno)
22549 {
22550 submatch_type &inner_bracket = sstate.bracket[brno];
22551
22552 sstate.push_sm(inner_bracket.core);
22553 sstate.push_c(inner_bracket.counter);
22554 inner_bracket.core.open_at = inner_bracket.core.close_at = sstate.srchend;
22555 inner_bracket.counter = 0;
22556 // ECMAScript spec (3-5.1) 15.10.2.5, NOTE 3.
22557 // ECMAScript 2018 (ES9) 21.2.2.5.1, Note 3.
22558 }
22559
22560 submatch_type &bracket = sstate.bracket[sstate.ssc.state->char_num];
22561
22562 sstate.push_sm(bracket.core);
22563
22564 sstate.push_bt(sstate.ssc);
22565
22566 if (++bracket.counter == 0)
22567 goto ST_ROUNDBRACKET_OPEN;
22568
22569 (!reverse ? bracket.core.open_at : bracket.core.close_at) = sstate.ssc.iter;
22570 }
22571 goto MATCHED;
22572
22573 case st_roundbracket_pop: // '/':
22574 {
22575 submatch_type &bracket = sstate.bracket[sstate.ssc.state->char_num];
22576
22577 --bracket.counter;
22578 sstate.pop_sm(bracket.core);
22579
22580 for (ui_l32 brno = sstate.ssc.state->quantifier.atmost; brno >= sstate.ssc.state->quantifier.atleast; --brno)
22581 {
22582 submatch_type &inner_bracket = sstate.bracket[brno];
22583
22584 sstate.pop_c(inner_bracket.counter);
22585 sstate.pop_sm(inner_bracket.core);
22586 }
22587 }
22588 goto NOT_MATCHED;
22589
22590 case st_roundbracket_close: // ')':
22591 {
22592 submatch_type &bracket = sstate.bracket[sstate.ssc.state->char_num];
22593 submatchcore_type &brc = bracket.core;
22594
22595 if ((!reverse ? brc.open_at : brc.close_at) != sstate.ssc.iter)
22596 {
22597 sstate.ssc.state = sstate.ssc.state->next_state1;
22598 }
22599 else // 0 width match, breaks from the loop.
22600 {
22601 if (sstate.ssc.state->next_state1->type != st_check_counter)
22602 {
22603 if (bracket.counter > 1)
22604 goto NOT_MATCHED; // ECMAScript spec 15.10.2.5, note 4.
22605
22606 sstate.ssc.state = sstate.ssc.state->next_state2;
22607 // Accepts 0 width match and exits.
22608 }
22609 else
22610 {
22611 // A pair with check_counter.
22612 const counter_type counter = sstate.counter[sstate.ssc.state->next_state1->char_num];
22613
22614 if (counter > sstate.ssc.state->next_state1->quantifier.atleast)
22615 goto NOT_MATCHED; // Takes a captured string in the previous loop.
22616
22617 sstate.ssc.state = sstate.ssc.state->next_state1;
22618 // Accepts 0 width match and continues.
22619 }
22620 }
22621 (!reverse ? brc.close_at : brc.open_at) = sstate.ssc.iter;
22622 }
22623 continue;
22624
22625 case st_repeat_in_push:
22626 {
22627 position_type &r = sstate.repeat[sstate.ssc.state->char_num];
22628
22629 sstate.push_rp(r);
22630 r = sstate.ssc.iter;
22631
22632 for (ui_l32 brno = sstate.ssc.state->quantifier.atleast; brno <= sstate.ssc.state->quantifier.atmost; ++brno)
22633 {
22634 submatch_type &inner_bracket = sstate.bracket[brno];
22635
22636 sstate.push_sm(inner_bracket.core);
22637 sstate.push_c(inner_bracket.counter);
22638 inner_bracket.core.open_at = inner_bracket.core.close_at = sstate.srchend;
22639 inner_bracket.counter = 0;
22640 // ECMAScript 2019 (ES10) 21.2.2.5.1, Note 3.
22641 }
22642 sstate.push_bt(sstate.ssc);
22643 }
22644 goto MATCHED;
22645
22646 case st_repeat_in_pop:
22647 for (ui_l32 brno = sstate.ssc.state->quantifier.atmost; brno >= sstate.ssc.state->quantifier.atleast; --brno)
22648 {
22649 submatch_type &inner_bracket = sstate.bracket[brno];
22650
22651 sstate.pop_c(inner_bracket.counter);
22652 sstate.pop_sm(inner_bracket.core);
22653 }
22654
22655 sstate.pop_rp(sstate.repeat[sstate.ssc.state->char_num]);
22656 goto NOT_MATCHED;
22657
22658 case st_check_0_width_repeat:
22659 if (sstate.ssc.iter != sstate.repeat[sstate.ssc.state->char_num])
22660 goto MATCHED;
22661
22662 if (sstate.ssc.state->next_state1->type == st_check_counter)
22663 {
22664 const counter_type counter = sstate.counter[sstate.ssc.state->next_state1->char_num];
22665
22666 if (counter > sstate.ssc.state->next_state1->quantifier.atleast)
22667 goto NOT_MATCHED;
22668
22669 sstate.ssc.state = sstate.ssc.state->next_state1;
22670 }
22671 else
22672 sstate.ssc.state = sstate.ssc.state->next_state2;
22673
22674 continue;
22675
22676 case st_backreference: // '\\':
22677 {
22678 const submatch_type &bracket = sstate.bracket[sstate.ssc.state->char_num];
22679
22680 if (bracket.counter == 0) // Undefined.
22681 {
22682 ESCAPE_FROM_ZERO_WIDTH_MATCH:
22683 sstate.ssc.state = sstate.ssc.state->next_state2;
22684 continue;
22685 }
22686
22687 const submatchcore_type &brc = bracket.core;
22688
22689 if (brc.open_at == brc.close_at)
22690 goto ESCAPE_FROM_ZERO_WIDTH_MATCH;
22691
22692 #if defined(_MSC_VER) && _MSC_VER >= 1400
22693 #pragma warning(push)
22694 #pragma warning(disable:4127)
22695 #endif
22696 if (!reverse)
22697 #if defined(_MSC_VER) && _MSC_VER >= 1400
22698 #pragma warning(pop)
22699 #endif
22700 {
22701 BidirectionalIterator backrefpos = brc.open_at;
22702
22703 if (!sstate.ssc.state->flags) // !icase.
22704 {
22705 for (; backrefpos != brc.close_at;)
22706 {
22707 if (sstate.ssc.iter == sstate.srchend || *sstate.ssc.iter++ != *backrefpos++)
22708 goto NOT_MATCHED;
22709 }
22710 }
22711 else // icase.
22712 {
22713 for (; backrefpos != brc.close_at;)
22714 {
22715 if (!(sstate.ssc.iter == sstate.srchend))
22716 {
22717 const ui_l32 uchartxt = utf_traits::codepoint_inc(sstate.ssc.iter, sstate.srchend);
22718 const ui_l32 ucharref = utf_traits::codepoint_inc(backrefpos, brc.close_at);
22719
22720 if (unicode_case_folding::do_casefolding(uchartxt) == unicode_case_folding::do_casefolding(ucharref))
22721 continue;
22722 }
22723 goto NOT_MATCHED;
22724 }
22725 }
22726 }
22727 else // reverse == true.
22728 {
22729 BidirectionalIterator backrefpos = brc.close_at;
22730
22731 if (!sstate.ssc.state->flags) // !icase.
22732 {
22733 for (; backrefpos != brc.open_at;)
22734 {
22735 if (sstate.ssc.iter == sstate.lblim || *--sstate.ssc.iter != *--backrefpos)
22736 goto NOT_MATCHED;
22737 }
22738 }
22739 else // icase.
22740 {
22741 for (; backrefpos != brc.open_at;)
22742 {
22743 if (!(sstate.ssc.iter == sstate.lblim))
22744 {
22745 const ui_l32 uchartxt = utf_traits::dec_codepoint(sstate.ssc.iter, sstate.lblim);
22746 const ui_l32 ucharref = utf_traits::dec_codepoint(backrefpos, brc.open_at);
22747
22748 if (unicode_case_folding::do_casefolding(uchartxt) == unicode_case_folding::do_casefolding(ucharref))
22749 continue;
22750 }
22751 goto NOT_MATCHED;
22752 }
22753 }
22754 }
22755 }
22756 goto MATCHED;
22757
22758 case st_lookaround_open:
22759 {
22760 const state_type *const lostate = sstate.ssc.state;
22761
22762 for (ui_l32 brno = lostate->quantifier.atleast; brno <= lostate->quantifier.atmost; ++brno)
22763 {
22764 const submatch_type &sm = sstate.bracket[brno];
22765 sstate.push_sm(sm.core);
22766 sstate.push_c(sm.counter);
22767 }
22768
22769 const typename ss_type::bottom_state backup_bottom(sstate.btstack_size, sstate);
22770 const BidirectionalIterator orgpos = sstate.ssc.iter;
22771
22772 if (lostate->quantifier.atleast <= lostate->quantifier.atmost)
22773 sstate.push_bt(sstate.ssc);
22774
22775 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
22776 if (lostate->quantifier.is_greedy >= 2)
22777 {
22778 sstate.push_rp(sstate.lblim);
22779 sstate.lblim = sstate.srchbegin;
22780 }
22781 #endif
22782
22783 sstate.btstack_size = sstate.bt_size();
22784
22785 #if defined(SRELL_FIXEDWIDTHLOOKBEHIND)
22786
22787 // if (lostate->reverse)
22788 {
22789 for (ui_l32 i = 0; i < lostate->quantifier.is_greedy; ++i)
22790 {
22791 if (!(sstate.ssc.iter == sstate.lblim))
22792 {
22793 utf_traits::dec_codepoint(sstate.ssc.iter, sstate.lblim);
22794 continue;
22795 }
22796 is_matched = false;
22797 goto AFTER_LOOKAROUND;
22798 }
22799 }
22800 #endif
22801 sstate.ssc.state = lostate->next_state2->next_state1;
22802
22803 // sstate.ssc.state is no longer pointing to lookaround_open!
22804
22805 #if defined(SRELL_NO_THROW)
22806 const int reason =
22807 #else
22808 is_matched =
22809 #endif
22810 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
22811 (lostate->quantifier.is_greedy == 0 ? run_automaton<icase, false>(sstate) : run_automaton<icase, true>(sstate));
22812 #else
22813 run_automaton<icase, false>(sstate);
22814 #endif
22815
22816 #if defined(SRELL_NO_THROW)
22817 if (reason & ~1)
22818 return reason;
22819
22820 is_matched = reason ? 1 : 0;
22821 #endif
22822
22823 #if defined(SRELL_FIXEDWIDTHLOOKBEHIND)
22824 AFTER_LOOKAROUND:
22825 #endif
22826 sstate.bt_resize(sstate.btstack_size);
22827
22828 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
22829 if (lostate->quantifier.is_greedy >= 2)
22830 {
22831 sstate.pop_rp(sstate.lblim);
22832 if (is_matched)
22833 sstate.bracket[0].core.open_at = sstate.ssc.iter;
22834 }
22835 #endif
22836
22837 #if defined(SRELL_ENABLE_GT)
22838 if (lostate->char_num != meta_char::mc_gt) // '>'
22839 #endif
22840 {
22841 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
22842 if (lostate->quantifier.is_greedy < 3)
22843 #endif
22844 sstate.ssc.iter = orgpos;
22845 }
22846
22847 backup_bottom.restore(sstate.btstack_size, sstate);
22848
22849 is_matched ^= lostate->flags; // is_not.
22850
22851 if (is_matched)
22852 {
22853 #if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
22854 if (lostate->quantifier.is_greedy == 3)
22855 sstate.ssc.state = this->NFA_states[0].next_state2;
22856 else
22857 #endif
22858 sstate.ssc.state = lostate->next_state1;
22859 continue;
22860 }
22861
22862 if (lostate->quantifier.atleast <= lostate->quantifier.atmost)
22863 sstate.pop_bt(sstate.ssc);
22864 sstate.ssc.state = lostate->next_state2;
22865 }
22866 //@fallthrough@
22867
22868 case st_lookaround_pop:
22869 for (ui_l32 brno = sstate.ssc.state->quantifier.atmost; brno >= sstate.ssc.state->quantifier.atleast; --brno)
22870 {
22871 submatch_type &sm = sstate.bracket[brno];
22872
22873 sstate.pop_c(sm.counter);
22874 sstate.pop_sm(sm.core);
22875 }
22876 goto NOT_MATCHED;
22877
22878 case st_bol: // '^':
22879 if (sstate.ssc.iter == sstate.lblim && !(sstate.reallblim != sstate.lblim || (sstate.flags & regex_constants::match_prev_avail) != 0))
22880 {
22881 if (!(sstate.flags & regex_constants::match_not_bol))
22882 goto MATCHED;
22883 }
22884 // !sstate.is_at_lookbehindlimit() || sstate.match_prev_avail_flag()
22885 else if (sstate.ssc.state->flags) // multiline.
22886 {
22887 const ui_l32 prevchar = utf_traits::prevcodepoint(sstate.ssc.iter, sstate.reallblim);
22888
22889 #if !defined(SRELLDBG_NO_CCPOS)
22890 if (this->character_class.is_included(sstate.ssc.state->quantifier.atleast, sstate.ssc.state->quantifier.atmost, prevchar))
22891 #else
22892 if (this->character_class.is_included(re_character_class::newline, prevchar))
22893 #endif
22894 goto MATCHED;
22895 }
22896 goto NOT_MATCHED;
22897
22898 case st_eol: // '$':
22899 if (sstate.ssc.iter == sstate.srchend)
22900 {
22901 if (!(sstate.flags & regex_constants::match_not_eol))
22902 goto MATCHED;
22903 }
22904 else if (sstate.ssc.state->flags) // multiline.
22905 {
22906 const ui_l32 nextchar = utf_traits::codepoint(sstate.ssc.iter, sstate.srchend);
22907
22908 #if !defined(SRELLDBG_NO_CCPOS)
22909 if (this->character_class.is_included(sstate.ssc.state->quantifier.atleast, sstate.ssc.state->quantifier.atmost, nextchar))
22910 #else
22911 if (this->character_class.is_included(re_character_class::newline, nextchar))
22912 #endif
22913 goto MATCHED;
22914 }
22915 goto NOT_MATCHED;
22916
22917 case st_boundary: // '\b' '\B'
22918 is_matched = sstate.ssc.state->flags; // is_not.
22919 // is_matched = sstate.ssc.state->char_num == char_alnum::ch_B;
22920
22921 // First, suppose the previous character is not \w but \W.
22922
22923 if (sstate.ssc.iter == sstate.srchend)
22924 {
22925 if (sstate.flags & regex_constants::match_not_eow)
22926 is_matched = is_matched ? 0u : 1u;
22927 }
22928 else
22929 {
22930 #if !defined(SRELLDBG_NO_CCPOS)
22931 if (this->character_class.is_included(sstate.ssc.state->quantifier.atleast, sstate.ssc.state->quantifier.atmost, utf_traits::codepoint(sstate.ssc.iter, sstate.srchend)))
22932 #else
22933 if (this->character_class.is_included(sstate.ssc.state->char_num, utf_traits::codepoint(sstate.ssc.iter, sstate.srchend)))
22934 #endif
22935 {
22936 is_matched = is_matched ? 0u : 1u;
22937 }
22938 }
22939 // \W/last \w
22940 // \b false true
22941 // \B true false
22942
22943 // Second, if the actual previous character is \w, flip is_matched.
22944
22945 if (sstate.ssc.iter == sstate.lblim && !(sstate.reallblim != sstate.lblim || (sstate.flags & regex_constants::match_prev_avail) != 0))
22946 {
22947 if (sstate.flags & regex_constants::match_not_bow)
22948 is_matched = is_matched ? 0u : 1u;
22949 }
22950 else
22951 {
22952 // !sstate.is_at_lookbehindlimit() || sstate.match_prev_avail_flag()
22953 #if !defined(SRELLDBG_NO_CCPOS)
22954 if (this->character_class.is_included(sstate.ssc.state->quantifier.atleast, sstate.ssc.state->quantifier.atmost, utf_traits::prevcodepoint(sstate.ssc.iter, sstate.reallblim)))
22955 #else
22956 if (this->character_class.is_included(sstate.ssc.state->char_num, utf_traits::prevcodepoint(sstate.ssc.iter, sstate.reallblim)))
22957 #endif
22958 {
22959 is_matched = is_matched ? 0u : 1u;
22960 }
22961 }
22962 // \b \B
22963 // pre cur \W/last \w pre cur \W/last \w
22964 // \W/base false true \W/base true false
22965 // \w true false \w false true
22966
22967 goto JUDGE;
22968
22969 case st_success: // == lookaround_close.
22970 // if (is_recursive)
22971 if (sstate.btstack_size)
22972 return 1;
22973
22974 if
22975 (
22976 (!(sstate.flags & regex_constants::match_not_null) || !(sstate.ssc.iter == sstate.bracket[0].core.open_at))
22977 &&
22978 (!(sstate.flags & regex_constants::match_match_) || sstate.ssc.iter == sstate.srchend)
22979 )
22980 return 1;
22981
22982 goto NOT_MATCHED;
22983
22984 #if defined(SRELLTEST_NEXTPOS_OPT)
22985 case st_move_nextpos:
22986 #if !defined(SRELLDBG_NO_1STCHRCLS) && !defined(SRELLDBG_NO_BITSET)
22987 sstate.nextpos = sstate.ssc.iter;
22988 if (!(sstate.ssc.iter == sstate.srchend))
22989 ++sstate.nextpos;
22990 #else // defined(SRELLDBG_NO_1STCHRCLS) || defined(SRELLDBG_NO_BITSET)
22991 if (sstate.ssc.iter != sstate.bracket[0].core.open_at)
22992 {
22993 sstate.nextpos = sstate.ssc.iter;
22994 if (!(sstate.ssc.iter == sstate.srchend))
22995 utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend);
22996 }
22997 #endif
22998 goto MATCHED;
22999 #endif
23000
23001 default:
23002 // Reaching here means that this->NFA_states is corrupted.
23003 #if defined(SRELL_NO_THROW)
23004 return static_cast<int>(regex_constants::error_internal);
23005 #else
23006 throw regex_error(regex_constants::error_internal);
23007 #endif
23008 }
23009 }
23010 }
23011 }
23012
23013 #if !defined(SRELL_NO_APIEXT)
23014
23015 protected:
23016
23017 template <typename StringLike, typename ST, typename SA, typename RAIter, typename MA>
23018 void do_replace(
23019 StringLike &s,
23020 bool (*repfunc)(std::basic_string<charT, ST, SA> &, const match_results<RAIter, MA> &, void *),
23021 void *ptr
23022 ) const
23023 {
23024 typedef std::basic_string<charT, ST, SA> string_type;
23025 typedef typename string_type::size_type size_type;
23026 typedef typename traits::utf_traits utf_traits;
23027 typedef match_results<RAIter, MA> match_type;
23028 regex_constants::match_flag_type flags = regex_constants::match_default;
23029 string_type subst;
23030 match_type match;
23031 size_type offset = 0;
23032 size_type prevend = offset;
23033
23034 for (;;)
23035 {
23036 if (!this->search(pos0_<charT>(s, RAIter()) + offset, pos1_<charT>(s, RAIter()), pos0_<charT>(s, RAIter()), match, flags))
23037 break;
23038
23039 const typename match_type::size_type matchlen = match.length(0);
23040
23041 match.update_prefix1_(pos0_<charT>(s, RAIter()) + prevend);
23042 offset = match[0].second - pos0_<charT>(s, RAIter());
23043
23044 const bool continuable = repfunc(subst, match, ptr);
23045
23046 s.replace(match[0].first - pos0_<charT>(s, RAIter()), matchlen, subst);
23047 if (!continuable)
23048 break;
23049
23050 offset += subst.size() - matchlen;
23051 prevend = offset;
23052
23053 if (matchlen == 0)
23054 {
23055 if (offset == s.size())
23056 {
23057 break;
23058 }
23059 else
23060 {
23061 RAIter it = pos0_<charT>(s, RAIter()) + offset;
23062
23063 utf_traits::codepoint_inc(it, pos1_<charT>(s, RAIter()));
23064 offset = it - pos0_<charT>(s, RAIter());
23065 }
23066 }
23067 subst.clear();
23068 flags |= regex_constants::match_prev_avail;
23069 }
23070 }
23071
23072 template <typename BidiIter>
23073 struct submatch_helper : public sub_match<BidiIter>
23074 {
23075 submatch_helper(const BidiIter f, const BidiIter s, const bool m = true)
23076 {
23077 this->first = f;
23078 this->second = s;
23079 this->matched = m;
23080 }
23081 };
23082
23083 template <typename MatchResults, typename container, typename BidiIter>
23084 void do_split(
23085 container &c,
23086 const BidiIter begin,
23087 const BidiIter end,
23088 const std::size_t limit /* = -1 */
23089 ) const
23090 {
23091 typedef typename traits::utf_traits utf_traits;
23092 typedef MatchResults match_type;
23093 typedef submatch_helper<BidiIter> helper;
23094 regex_constants::match_flag_type flags = regex_constants::match_default;
23095 BidiIter offset = begin;
23096 BidiIter prevend = offset;
23097 std::size_t count = 0;
23098 match_type match;
23099
23100 if (limit == 0) // 22.2.5.14 RegExp.prototype [ @@split ] ( string, limit ), step 14:
23101 return;
23102
23103 if (offset == end) // 22.2.5.14 RegExp.prototype [ @@split ] ( string, limit ), step 16:
23104 {
23105 if (!this->search(offset, end, begin, match, flags))
23106 c.push_back(helper(begin, end));
23107
23108 return;
23109 }
23110
23111 for (; offset < end;)
23112 {
23113 if (!this->search(offset, end, begin, match, flags) || match[0].first == end)
23114 break;
23115
23116 if (match[0].second != prevend)
23117 {
23118 if (++count == limit)
23119 break;
23120 c.push_back(helper(prevend, match[0].first));
23121
23122 prevend = match[0].second;
23123
23124 for (typename match_type::size_type i = 1; i < match.size(); ++i)
23125 {
23126 if (++count == limit)
23127 goto FINAL_PUSH;
23128 c.push_back(match[i]);
23129 }
23130
23131 offset = prevend;
23132 }
23133 else
23134 {
23135 utf_traits::codepoint_inc(offset, end);
23136 }
23137 flags |= regex_constants::match_prev_avail;
23138 }
23139
23140 FINAL_PUSH:
23141 c.push_back(helper(prevend, end));
23142 }
23143
23144 #endif // !defined(SRELL_NO_APIEXT)
23145 };
23146 // re_object
23147
23148 } // namespace re_detail
23149
23150 // ... "rei_algorithm.hpp"]
23151 // ["basic_regex.hpp" ...
23152
23153 // 28.8, class template basic_regex:
23154 template <class charT, class traits = regex_traits<charT> >
23155 class basic_regex : public re_detail::re_object<charT, traits>
23156 {
23157 public:
23158
23159 // Types:
23160 typedef charT value_type;
23161 typedef traits traits_type;
23162 typedef typename traits::string_type string_type;
23163 typedef regex_constants::syntax_option_type flag_type;
23164 typedef typename traits::locale_type locale_type;
23165
23166 // 28.8.1, constants:
23167 // [7.8.1] constants
23168 static const regex_constants::syntax_option_type icase = regex_constants::icase;
23169 static const regex_constants::syntax_option_type nosubs = regex_constants::nosubs;
23170 static const regex_constants::syntax_option_type optimize = regex_constants::optimize;
23171 static const regex_constants::syntax_option_type collate = regex_constants::collate;
23172 static const regex_constants::syntax_option_type ECMAScript = regex_constants::ECMAScript;
23173 static const regex_constants::syntax_option_type basic = regex_constants::basic;
23174 static const regex_constants::syntax_option_type extended = regex_constants::extended;
23175 static const regex_constants::syntax_option_type awk = regex_constants::awk;
23176 static const regex_constants::syntax_option_type grep = regex_constants::grep;
23177 static const regex_constants::syntax_option_type egrep = regex_constants::egrep;
23178 static const regex_constants::syntax_option_type multiline = regex_constants::multiline;
23179
23180 static const regex_constants::syntax_option_type dotall = regex_constants::dotall;
23181 static const regex_constants::syntax_option_type unicodesets = regex_constants::unicodesets;
23182
23183 // 28.8.2, construct/copy/destroy:
23184 // [7.8.2] construct/copy/destroy
23185 basic_regex()
23186 {
23187 }
23188
23189 explicit basic_regex(const charT *const p, const flag_type f = regex_constants::ECMAScript)
23190 {
23191 assign(p, p + std::char_traits<charT>::length(p), f);
23192 }
23193
23194 basic_regex(const charT *const p, const std::size_t len, const flag_type f = regex_constants::ECMAScript)
23195 {
23196 assign(p, p + len, f);
23197 }
23198
23199 basic_regex(const basic_regex &e)
23200 {
23201 assign(e);
23202 }
23203
23204 #if defined(SRELL_CPP11_MOVE_ENABLED)
23205 basic_regex(basic_regex &&e) SRELL_NOEXCEPT
23206 {
23207 assign(std::move(e));
23208 }
23209 #endif
23210
23211 template <class ST, class SA>
23212 explicit basic_regex(const std::basic_string<charT, ST, SA> &p, const flag_type f = regex_constants::ECMAScript)
23213 {
23214 assign(p, f);
23215 }
23216
23217 template <class ForwardIterator>
23218 basic_regex(ForwardIterator first, ForwardIterator last, const flag_type f = regex_constants::ECMAScript)
23219 {
23220 assign(first, last, f);
23221 }
23222
23223 #if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED)
23224 basic_regex(std::initializer_list<charT> il, const flag_type f = regex_constants::ECMAScript)
23225 {
23226 assign(il, f);
23227 }
23228 #endif
23229
23230 // ~basic_regex();
23231
23232 basic_regex &operator=(const basic_regex &right)
23233 {
23234 return assign(right);
23235 }
23236
23237 #if defined(SRELL_CPP11_MOVE_ENABLED)
23238 basic_regex &operator=(basic_regex &&e) SRELL_NOEXCEPT
23239 {
23240 return assign(std::move(e));
23241 }
23242 #endif
23243
23244 basic_regex &operator=(const charT *const ptr)
23245 {
23246 return assign(ptr);
23247 }
23248
23249 #if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED)
23250 basic_regex &operator=(std::initializer_list<charT> il)
23251 {
23252 return assign(il.begin(), il.end());
23253 }
23254 #endif
23255
23256 template <class ST, class SA>
23257 basic_regex &operator=(const std::basic_string<charT, ST, SA> &p)
23258 {
23259 return assign(p);
23260 }
23261
23262 // 28.8.3, assign:
23263 // [7.8.3] assign
23264 basic_regex &assign(const basic_regex &right)
23265 {
23266 re_detail::re_object_core<charT, traits>::operator=(right);
23267 return *this;
23268 }
23269
23270 #if defined(SRELL_CPP11_MOVE_ENABLED)
23271 basic_regex &assign(basic_regex &&right) SRELL_NOEXCEPT
23272 {
23273 re_detail::re_object_core<charT, traits>::operator=(std::move(right));
23274 return *this;
23275 }
23276 #endif
23277
23278 basic_regex &assign(const charT *const ptr, const flag_type f = regex_constants::ECMAScript)
23279 {
23280 return assign(ptr, ptr + std::char_traits<charT>::length(ptr), f);
23281 }
23282
23283 basic_regex &assign(const charT *const p, std::size_t len, const flag_type f = regex_constants::ECMAScript)
23284 {
23285 return assign(p, p + len, f);
23286 }
23287
23288 template <class string_traits, class A>
23289 basic_regex &assign(const std::basic_string<charT, string_traits, A> &s, const flag_type f = regex_constants::ECMAScript)
23290 {
23291 return assign(s.c_str(), s.c_str() + s.size(), f);
23292 }
23293
23294 template <class InputIterator>
23295 basic_regex &assign(InputIterator first, InputIterator last, const flag_type f = regex_constants::ECMAScript)
23296 {
23297 #if defined(SRELL_STRICT_IMPL)
23298 basic_regex tmp;
23299 tmp.compile(first, last, f);
23300 tmp.swap(*this);
23301 #else
23302 this->compile(first, last, f);
23303 #endif
23304 return *this;
23305 }
23306
23307 #if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED)
23308 basic_regex &assign(std::initializer_list<charT> il, const flag_type f = regex_constants::ECMAScript)
23309 {
23310 return assign(il.begin(), il.end(), f);
23311 }
23312 #endif
23313
23314 // 28.8.4, const operations:
23315 // [7.8.4] const operations
23316 unsigned mark_count() const
23317 {
23318 return this->number_of_brackets - 1;
23319 }
23320
23321 flag_type flags() const
23322 {
23323 return this->soflags;
23324 }
23325
23326 // 28.8.5, locale:
23327 // [7.8.5] locale
23328 locale_type imbue(locale_type loc)
23329 {
23330 return this->traits_inst.imbue(loc);
23331 }
23332
23333 locale_type getloc() const
23334 {
23335 return this->traits_inst.getloc();
23336 }
23337
23338 // 28.8.6, swap:
23339 // [7.8.6] swap
23340 void swap(basic_regex &e)
23341 {
23342 re_detail::re_object_core<charT, traits>::swap(e);
23343 }
23344
23345 regex_constants::error_type ecode() const
23346 {
23347 return re_detail::re_object_core<charT, traits>::ecode();
23348 }
23349
23350 #if !defined(SRELL_NO_APIEXT)
23351
23352 template <typename BidirectionalIterator, typename Allocator>
23353 bool match(
23354 const BidirectionalIterator begin,
23355 const BidirectionalIterator end,
23356 match_results<BidirectionalIterator, Allocator> &m,
23357 const regex_constants::match_flag_type flags = regex_constants::match_default
23358 ) const
23359 {
23360 return base_type::search(begin, end, begin, m, flags | regex_constants::match_continuous | regex_constants::match_match_);
23361 }
23362
23363 template <typename BidirectionalIterator>
23364 bool match(
23365 const BidirectionalIterator begin,
23366 const BidirectionalIterator end,
23367 const regex_constants::match_flag_type flags = regex_constants::match_default
23368 ) const
23369 {
23370 match_results<BidirectionalIterator> m;
23371 return this->match(begin, end, m, flags);
23372 }
23373
23374 template <typename Allocator>
23375 bool match(
23376 const charT *const str,
23377 match_results<const charT *, Allocator> &m,
23378 const regex_constants::match_flag_type flags = regex_constants::match_default
23379 ) const
23380 {
23381 return this->match(str, str + std::char_traits<charT>::length(str), m, flags);
23382 }
23383
23384 bool match(
23385 const charT *const str,
23386 const regex_constants::match_flag_type flags = regex_constants::match_default
23387 ) const
23388 {
23389 return this->match(str, str + std::char_traits<charT>::length(str), flags);
23390 }
23391
23392 template <typename ST, typename SA, typename MA>
23393 bool match(
23394 const std::basic_string<charT, ST, SA> &s,
23395 match_results<typename std::basic_string<charT, ST, SA>::const_iterator, MA> &m,
23396 const regex_constants::match_flag_type flags = regex_constants::match_default
23397 ) const
23398 {
23399 return this->match(s.begin(), s.end(), m, flags);
23400 }
23401
23402 template <typename ST, typename SA>
23403 bool match(
23404 const std::basic_string<charT, ST, SA> &s,
23405 const regex_constants::match_flag_type flags = regex_constants::match_default
23406 ) const
23407 {
23408 return this->match(s.begin(), s.end(), flags);
23409 }
23410
23411 template <typename BidirectionalIterator, typename Allocator>
23412 bool search(
23413 const BidirectionalIterator begin,
23414 const BidirectionalIterator end,
23415 const BidirectionalIterator lookbehind_limit,
23416 match_results<BidirectionalIterator, Allocator> &m,
23417 const regex_constants::match_flag_type flags = regex_constants::match_default
23418 ) const
23419 {
23420 return base_type::search(begin, end, lookbehind_limit, m, flags);
23421 }
23422
23423 template <typename BidirectionalIterator>
23424 bool search(
23425 const BidirectionalIterator begin,
23426 const BidirectionalIterator end,
23427 const BidirectionalIterator lookbehind_limit,
23428 const regex_constants::match_flag_type flags = regex_constants::match_default
23429 ) const
23430 {
23431 match_results<BidirectionalIterator> m;
23432 return base_type::search(begin, end, lookbehind_limit, m, flags);
23433 }
23434
23435 template <typename BidirectionalIterator, typename Allocator>
23436 bool search(
23437 const BidirectionalIterator begin,
23438 const BidirectionalIterator end,
23439 match_results<BidirectionalIterator, Allocator> &m,
23440 const regex_constants::match_flag_type flags = regex_constants::match_default
23441 ) const
23442 {
23443 return base_type::search(begin, end, begin, m, flags);
23444 }
23445
23446 template <typename BidirectionalIterator>
23447 bool search(
23448 const BidirectionalIterator begin,
23449 const BidirectionalIterator end,
23450 const regex_constants::match_flag_type flags = regex_constants::match_default
23451 ) const
23452 {
23453 return this->search(begin, end, begin, flags);
23454 }
23455
23456 template <typename Allocator>
23457 bool search(
23458 const charT *const str,
23459 match_results<const charT *, Allocator> &m,
23460 const regex_constants::match_flag_type flags = regex_constants::match_default
23461 ) const
23462 {
23463 return this->search(str, str + std::char_traits<charT>::length(str), m, flags);
23464 }
23465
23466 bool search(
23467 const charT *const str,
23468 const regex_constants::match_flag_type flags = regex_constants::match_default
23469 ) const
23470 {
23471 return this->search(str, str + std::char_traits<charT>::length(str), flags);
23472 }
23473
23474 template <typename ST, typename SA, typename MA>
23475 bool search(
23476 const std::basic_string<charT, ST, SA> &s,
23477 match_results<typename std::basic_string<charT, ST, SA>::const_iterator, MA> &m,
23478 const regex_constants::match_flag_type flags = regex_constants::match_default
23479 ) const
23480 {
23481 return this->search(s.begin(), s.end(), m, flags);
23482 }
23483
23484 template <typename ST, typename SA>
23485 bool search(
23486 const std::basic_string<charT, ST, SA> &s,
23487 const regex_constants::match_flag_type flags = regex_constants::match_default
23488 ) const
23489 {
23490 return this->search(s.begin(), s.end(), flags);
23491 }
23492
23493 template <typename StringLike>
23494 void replace(
23495 StringLike &s,
23496 const charT *const fmt_begin,
23497 const charT *const fmt_end,
23498 const bool global = false
23499 ) const
23500 {
23501 typedef typename StringLike::traits_type ST;
23502 typedef typename StringLike::allocator_type SA;
23503 re_detail::repoptions<charT> opts(fmt_begin, fmt_end, global);
23504
23505 this->do_replace(s, re_detail::call_mrformat<charT, ST, SA, const charT *>, reinterpret_cast<void *>(&opts));
23506 }
23507
23508 template <typename StringLike>
23509 void replace(
23510 StringLike &s,
23511 const charT *const fmt,
23512 const bool global = false
23513 ) const
23514 {
23515 replace(s, fmt, fmt + std::char_traits<charT>::length(fmt), global);
23516 }
23517
23518 template <typename StringLike, typename FST, typename FSA>
23519 void replace(
23520 StringLike &s,
23521 const std::basic_string<charT, FST, FSA> &fmt,
23522 const bool global = false
23523 ) const
23524 {
23525 replace(s, fmt.data(), fmt.data() + fmt.size(), global);
23526 }
23527
23528 template <typename StringLike, typename RandomAccessIterator, typename MA>
23529 void replace(
23530 StringLike &s,
23531 bool (*repfunc)(std::basic_string<charT, typename StringLike::traits_type, typename StringLike::allocator_type> &, const match_results<RandomAccessIterator, MA> &, void *),
23532 void *ptr = NULL
23533 ) const
23534 {
23535 this->do_replace(s, repfunc, ptr);
23536 }
23537
23538 // re.replace<my_match_type>(...):
23539 // Overload for match_results<BidiIter, CustomAllocator> (my_match_type)
23540 // to be used internally and passed to a callback function instead of default
23541 // match_results<BidiIter, std::allocator<sub_match<BidiIter> >.
23542 // template <typename S, typename MR>
23543 template <typename MatchResults, typename StringLike>
23544 void replace(
23545 StringLike &s,
23546 // bool (*repfunc)(std::basic_string<charT, typename S::traits_type, typename S::allocator_type> &, const match_results<typename MR::value_type::iterator, typename MR::allocator_type> &, void *),
23547 bool (*repfunc)(std::basic_string<charT, typename StringLike::traits_type, typename StringLike::allocator_type> &, const MatchResults &, void *),
23548 void *ptr = NULL
23549 ) const
23550 {
23551 this->do_replace(s, repfunc, ptr);
23552 }
23553
23554 template <typename container, typename ST, typename SA>
23555 void split(
23556 container &c,
23557 const std::basic_string<charT, ST, SA> &s,
23558 const std::size_t limit = static_cast<std::size_t>(-1)
23559 ) const
23560 {
23561 typedef typename container::value_type::iterator BidiIter;
23562 typedef match_results<BidiIter> match_type; // match_type::value_type == container::value_type.
23563 this->template do_split<match_type>(c, re_detail::pos0_<charT>(s, BidiIter()), re_detail::pos1_<charT>(s, BidiIter()), limit);
23564 }
23565
23566 template <typename container, typename BidirectionalIterator>
23567 void split(
23568 container &c,
23569 const BidirectionalIterator begin, // The same as or convertible to container::value_type::iterator.
23570 const BidirectionalIterator end,
23571 const std::size_t limit = static_cast<std::size_t>(-1)
23572 ) const
23573 {
23574 typedef typename container::value_type::iterator const_iterator;
23575 typedef match_results<const_iterator> match_type;
23576
23577 this->template do_split<match_type>(c, static_cast<const_iterator>(begin), static_cast<const_iterator>(end), limit);
23578 // container::value_type::iterator should be const_iterator,
23579 // whereas BidirectionalIterator can be iterator.
23580 }
23581
23582 template <typename container>
23583 void split(
23584 container &c,
23585 const charT *const str,
23586 const std::size_t limit = static_cast<std::size_t>(-1)
23587 ) const
23588 {
23589 typedef match_results<const charT *> match_type;
23590 this->template do_split<match_type>(c, str, str + std::char_traits<charT>::length(str), limit);
23591 }
23592
23593 // re.split<my_match_type>(listcontainer, string):
23594 // Overload for match_results<BidiIter, CustomAllocator> (my_match_type)
23595 // to be used internally instead of default
23596 // match_results<BidiIter, std::allocator<sub_match<BidiIter> >.
23597 // In general, container::value_type == sub_match<BidiIter> == MatchResults::value_type.
23598 template <typename MatchResults, typename container, typename ST, typename SA>
23599 void split(
23600 container &c,
23601 const std::basic_string<charT, ST, SA> &s,
23602 const std::size_t limit = static_cast<std::size_t>(-1)
23603 ) const
23604 {
23605 typedef typename container::value_type::iterator BidiIter;
23606 this->template do_split<MatchResults>(c, re_detail::pos0_<charT>(s, BidiIter()), re_detail::pos1_<charT>(s, BidiIter()), limit);
23607 }
23608
23609 template <typename MatchResults, typename container, typename BidirectionalIterator>
23610 void split(
23611 container &c,
23612 const BidirectionalIterator begin, // The same as or convertible to MatchResults::value_type::iterator and container::value_type::iterator.
23613 const BidirectionalIterator end,
23614 const std::size_t limit = static_cast<std::size_t>(-1)
23615 ) const
23616 {
23617 typedef typename container::value_type::iterator const_iterator;
23618
23619 this->template do_split<MatchResults>(c, static_cast<const_iterator>(begin), static_cast<const_iterator>(end), limit);
23620 }
23621
23622 template <typename MatchResults, typename container>
23623 void split(
23624 container &c,
23625 const charT *const str,
23626 const std::size_t limit = static_cast<std::size_t>(-1)
23627 ) const
23628 {
23629 this->template do_split<MatchResults>(c, str, str + std::char_traits<charT>::length(str), limit);
23630 }
23631
23632 private:
23633
23634 typedef re_detail::re_object<charT, traits> base_type;
23635
23636 #endif // !defined(SRELL_NO_APIEXT)
23637 };
23638 template <class charT, class traits>
23639 const regex_constants::syntax_option_type basic_regex<charT, traits>::icase;
23640 template <class charT, class traits>
23641 const regex_constants::syntax_option_type basic_regex<charT, traits>::nosubs;
23642 template <class charT, class traits>
23643 const regex_constants::syntax_option_type basic_regex<charT, traits>::optimize;
23644 template <class charT, class traits>
23645 const regex_constants::syntax_option_type basic_regex<charT, traits>::collate;
23646 template <class charT, class traits>
23647 const regex_constants::syntax_option_type basic_regex<charT, traits>::ECMAScript;
23648 template <class charT, class traits>
23649 const regex_constants::syntax_option_type basic_regex<charT, traits>::basic;
23650 template <class charT, class traits>
23651 const regex_constants::syntax_option_type basic_regex<charT, traits>::extended;
23652 template <class charT, class traits>
23653 const regex_constants::syntax_option_type basic_regex<charT, traits>::awk;
23654 template <class charT, class traits>
23655 const regex_constants::syntax_option_type basic_regex<charT, traits>::grep;
23656 template <class charT, class traits>
23657 const regex_constants::syntax_option_type basic_regex<charT, traits>::egrep;
23658 template <class charT, class traits>
23659 const regex_constants::syntax_option_type basic_regex<charT, traits>::multiline;
23660
23661 template <class charT, class traits>
23662 const regex_constants::syntax_option_type basic_regex<charT, traits>::dotall;
23663 template <class charT, class traits>
23664 const regex_constants::syntax_option_type basic_regex<charT, traits>::unicodesets;
23665
23666 // 28.8.6, basic_regex swap:
23667 template <class charT, class traits>
23668 void swap(basic_regex<charT, traits> &lhs, basic_regex<charT, traits> &rhs)
23669 {
23670 lhs.swap(rhs);
23671 }
23672
23673 typedef basic_regex<char> regex;
23674 typedef basic_regex<wchar_t> wregex;
23675
23676 typedef basic_regex<char, u8regex_traits<char> > u8cregex;
23677
23678 #if defined(WCHAR_MAX)
23679 #if WCHAR_MAX >= 0x10ffff
23680 typedef wregex u32wregex;
23681 typedef u32wregex u1632wregex;
23682 #elif WCHAR_MAX >= 0xffff
23683 typedef basic_regex<wchar_t, u16regex_traits<wchar_t> > u16wregex;
23684 typedef u16wregex u1632wregex;
23685 #endif
23686 #endif
23687
23688 #if defined(SRELL_CPP11_CHAR1632_ENABLED)
23689 typedef basic_regex<char16_t> u16regex;
23690 typedef basic_regex<char32_t> u32regex;
23691 #endif
23692
23693 #if defined(SRELL_CPP20_CHAR8_ENABLED)
23694 typedef basic_regex<char8_t> u8regex;
23695 #else
23696 typedef u8cregex u8regex;
23697 #endif
23698
23699 // ... "basic_regex.hpp"]
23700 // ["regex_iterator.hpp" ...
23701
23702 // 28.12.1, class template regex_iterator:
23703 template <class BidirectionalIterator, class charT = typename std::iterator_traits<BidirectionalIterator>::value_type, class traits = regex_traits<charT> >
23704 class regex_iterator
23705 {
23706 public:
23707
23708 typedef basic_regex<charT, traits> regex_type;
23709 typedef match_results<BidirectionalIterator> value_type;
23710 typedef std::ptrdiff_t difference_type;
23711 typedef const value_type *pointer;
23712 typedef const value_type &reference;
23713 typedef std::forward_iterator_tag iterator_category;
23714
23715 regex_iterator()
23716 {
23717 // 28.12.1.1: Constructs an end-of-sequence iterator.
23718 }
23719
23720 regex_iterator(
23721 const BidirectionalIterator a,
23722 const BidirectionalIterator b,
23723 const regex_type &re,
23724 const regex_constants::match_flag_type m = regex_constants::match_default)
23725 : begin(a), end(b), pregex(&re), flags(m)
23726 {
23727 regex_search(begin, end, begin, match, *pregex, flags);
23728 // 28.12.1.1: If this call returns false the constructor
23729 // sets *this to the end-of-sequence iterator.
23730 }
23731
23732 regex_iterator(const regex_iterator &that)
23733 {
23734 operator=(that);
23735 }
23736
23737 regex_iterator &operator=(const regex_iterator &that)
23738 {
23739 if (this != &that)
23740 {
23741 this->match = that.match;
23742 if (this->match.size() > 0)
23743 {
23744 this->begin = that.begin;
23745 this->end = that.end;
23746 this->pregex = that.pregex;
23747 this->flags = that.flags;
23748 }
23749 }
23750 return *this;
23751 }
23752
23753 bool operator==(const regex_iterator &right) const
23754 {
23755 if (right.match.size() == 0 || this->match.size() == 0)
23756 return this->match.size() == right.match.size();
23757
23758 return this->begin == right.begin
23759 && this->end == right.end
23760 && this->pregex == right.pregex
23761 && this->flags == right.flags
23762 && this->match[0] == right.match[0];
23763 }
23764
23765 bool operator!=(const regex_iterator &right) const
23766 {
23767 return !(*this == right);
23768 }
23769
23770 const value_type &operator*() const
23771 {
23772 return match;
23773 }
23774
23775 const value_type *operator->() const
23776 {
23777 return &match;
23778 }
23779
23780 regex_iterator &operator++()
23781 {
23782 if (this->match.size())
23783 {
23784 BidirectionalIterator start = match[0].second;
23785
23786 if (match[0].first == start) // The iterator holds a 0-length match.
23787 {
23788 if (start == end)
23789 {
23790 match.clear_();
23791 // 28.12.1.4.2: If the iterator holds a zero-length match and
23792 // start == end the operator sets *this to the end-ofsequence
23793 // iterator and returns *this.
23794 }
23795 else
23796 {
23797 // 28.12.1.4.3: Otherwise, if the iterator holds a zero-length match
23798 // the operator calls regex_search(start, end, match, *pregex, flags
23799 // | regex_constants::match_not_null | regex_constants::match_continuous).
23800 // If the call returns true the operator returns *this. [Cont...]
23801
23802 if (!regex_search(start, end, begin, match, *pregex, flags | regex_constants::match_not_null | regex_constants::match_continuous))
23803 {
23804 const BidirectionalIterator prevend = start;
23805
23806 // [...Cont] Otherwise the operator increments start and continues
23807 // as if the most recent match was not a zero-length match.
23808 // ++start;
23809 utf_traits::codepoint_inc(start, end);
23810
23811 flags |= regex_constants::match_prev_avail;
23812
23813 if (regex_search(start, end, begin, match, *pregex, flags))
23814 {
23815 // 28.12.1.4.5-6: In all cases in which the call to regex_search
23816 // returns true, match.prefix().first shall be equal to the previous
23817 // value of match[0].second, ... match[i].position() shall return
23818 // distance(begin, match[i].first).
23819 // This means that match[i].position() gives the offset from the
23820 // beginning of the target sequence, which is often not the same as
23821 // the offset from the sequence passed in the call to regex_search.
23822 //
23823 // To satisfy this:
23824 match.update_prefix1_(prevend);
23825 }
23826 }
23827 }
23828 }
23829 else
23830 {
23831 // 28.12.1.4.4: If the most recent match was not a zero-length match,
23832 // the operator sets flags to flags | regex_constants::match_prev_avail
23833 // and calls regex_search(start, end, match, *pregex, flags). [Cont...]
23834 flags |= regex_constants::match_prev_avail;
23835
23836 regex_search(start, end, begin, match, *pregex, flags);
23837 // [...Cont] If the call returns false the iterator sets *this to
23838 // the end-of-sequence iterator. The iterator then returns *this.
23839 //
23840 // 28.12.1.4.5-6: In all cases in which the call to regex_search
23841 // returns true, match.prefix().first shall be equal to the previous
23842 // value of match[0].second, ... match[i].position() shall return
23843 // distance(begin, match[i].first).
23844 // This means that match[i].position() gives the offset from the
23845 // beginning of the target sequence, which is often not the same as
23846 // the offset from the sequence passed in the call to regex_search.
23847 //
23848 // These should already be done in regex_search.
23849 }
23850 }
23851 return *this;
23852 }
23853
23854 regex_iterator operator++(int)
23855 {
23856 const regex_iterator tmp = *this;
23857 ++(*this);
23858 return tmp;
23859 }
23860
23861 private:
23862
23863 BidirectionalIterator begin;
23864 BidirectionalIterator end;
23865 const regex_type *pregex;
23866 regex_constants::match_flag_type flags;
23867 match_results<BidirectionalIterator> match;
23868
23869 typedef typename traits::utf_traits utf_traits;
23870 };
23871
23872 typedef regex_iterator<const char *> cregex_iterator;
23873 typedef regex_iterator<const wchar_t *> wcregex_iterator;
23874 typedef regex_iterator<std::string::const_iterator> sregex_iterator;
23875 typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator;
23876
23877 typedef regex_iterator<const char *, typename std::iterator_traits<const char *>::value_type, u8regex_traits<typename std::iterator_traits<const char *>::value_type> > u8ccregex_iterator;
23878 typedef regex_iterator<std::string::const_iterator, typename std::iterator_traits<std::string::const_iterator>::value_type, u8regex_traits<typename std::iterator_traits<std::string::const_iterator>::value_type> > u8csregex_iterator;
23879
23880 #if defined(WCHAR_MAX)
23881 #if WCHAR_MAX >= 0x10ffff
23882 typedef wcregex_iterator u32wcregex_iterator;
23883 typedef wsregex_iterator u32wsregex_iterator;
23884 typedef u32wcregex_iterator u1632wcregex_iterator;
23885 typedef u32wsregex_iterator u1632wsregex_iterator;
23886 #elif WCHAR_MAX >= 0xffff
23887 typedef regex_iterator<const wchar_t *, typename std::iterator_traits<const wchar_t *>::value_type, u16regex_traits<typename std::iterator_traits<const wchar_t *>::value_type> > u16wcregex_iterator;
23888 typedef regex_iterator<std::wstring::const_iterator, typename std::iterator_traits<std::wstring::const_iterator>::value_type, u16regex_traits<typename std::iterator_traits<std::wstring::const_iterator>::value_type> > u16wsregex_iterator;
23889 typedef u16wcregex_iterator u1632wcregex_iterator;
23890 typedef u16wsregex_iterator u1632wsregex_iterator;
23891 #endif
23892 #endif
23893
23894 #if defined(SRELL_CPP11_CHAR1632_ENABLED)
23895 typedef regex_iterator<const char16_t *> u16cregex_iterator;
23896 typedef regex_iterator<const char32_t *> u32cregex_iterator;
23897 typedef regex_iterator<std::u16string::const_iterator> u16sregex_iterator;
23898 typedef regex_iterator<std::u32string::const_iterator> u32sregex_iterator;
23899 #endif
23900
23901 #if defined(SRELL_CPP20_CHAR8_ENABLED)
23902 typedef regex_iterator<const char8_t *> u8cregex_iterator;
23903 #else
23904 typedef u8ccregex_iterator u8cregex_iterator;
23905 #endif
23906 #if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2
23907 typedef regex_iterator<std::u8string::const_iterator> u8sregex_iterator;
23908 #else // !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2
23909 typedef u8csregex_iterator u8sregex_iterator;
23910 #endif
23911
23912 #if !defined(SRELL_NO_APIEXT)
23913
23914 template <typename BidirectionalIterator, typename BasicRegex = basic_regex<typename std::iterator_traits<BidirectionalIterator>::value_type, regex_traits<typename std::iterator_traits<BidirectionalIterator>::value_type> >, typename MatchResults = match_results<BidirectionalIterator> >
23915 class regex_iterator2
23916 {
23917 public:
23918
23919 typedef typename std::iterator_traits<BidirectionalIterator>::value_type char_type;
23920 typedef BasicRegex regex_type;
23921 typedef MatchResults value_type;
23922 typedef std::ptrdiff_t difference_type;
23923 typedef const value_type *pointer;
23924 typedef const value_type &reference;
23925 typedef std::input_iterator_tag iterator_category;
23926
23927 regex_iterator2() {}
23928
23929 regex_iterator2(
23930 const BidirectionalIterator b,
23931 const BidirectionalIterator e,
23932 const regex_type &re,
23933 const regex_constants::match_flag_type m = regex_constants::match_default)
23934 : begin_(b), end_(e), pregex_(&re)
23935 {
23936 rewind(m);
23937 }
23938
23939 template <typename ST, typename SA>
23940 regex_iterator2(
23941 const std::basic_string<char_type, ST, SA> &s,
23942 const regex_type &re,
23943 const regex_constants::match_flag_type m = regex_constants::match_default)
23944 : begin_(re_detail::pos0_<char_type>(s, BidirectionalIterator()))
23945 , end_(re_detail::pos1_<char_type>(s, BidirectionalIterator()))
23946 , pregex_(&re)
23947 {
23948 rewind(m);
23949 }
23950
23951 regex_iterator2(const regex_iterator2 &right)
23952 {
23953 operator=(right);
23954 }
23955
23956 regex_iterator2 &operator=(const regex_iterator2 &right)
23957 {
23958 if (this != &right)
23959 {
23960 this->match_ = right.match_;
23961 if (this->match_.size() > 0)
23962 {
23963 this->begin_ = right.begin_;
23964 this->end_ = right.end_;
23965 this->pregex_ = right.pregex_;
23966 this->flags_ = right.flags_;
23967 this->prevmatch_empty_ = right.prevmatch_empty_;
23968 this->submatch_ = right.submatch_;
23969 }
23970 }
23971 return *this;
23972 }
23973
23974 bool operator==(const regex_iterator2 &right) const
23975 {
23976 if (right.match_.size() == 0 || this->match_.size() == 0)
23977 return this->match_.size() == right.match_.size();
23978
23979 return this->begin_ == right.begin_
23980 && this->end_ == right.end_
23981 && this->pregex_ == right.pregex_
23982 && this->flags_ == right.flags_
23983 && this->match_[0] == right.match_[0];
23984 }
23985
23986 bool operator!=(const regex_iterator2 &right) const
23987 {
23988 // return !(*this == right);
23989 return !operator==(right);
23990 }
23991
23992 const value_type &operator*() const
23993 {
23994 return match_;
23995 }
23996
23997 const value_type *operator->() const
23998 {
23999 return &match_;
24000 }
24001
24002 bool done() const
24003 {
24004 return match_.size() == 0;
24005 }
24006
24007 bool empty() const
24008 {
24009 return begin_ == end_;
24010 }
24011
24012 void assign(
24013 const BidirectionalIterator b,
24014 const BidirectionalIterator e,
24015 const regex_type &re,
24016 const regex_constants::match_flag_type m = regex_constants::match_default)
24017 {
24018 begin_ = b;
24019 end_ = e;
24020 pregex_ = &re;
24021 rewind(m);
24022 }
24023 template <typename ST, typename SA>
24024 void assign(
24025 const std::basic_string<char_type, ST, SA> &s,
24026 const regex_type &re,
24027 const regex_constants::match_flag_type m = regex_constants::match_default)
24028 {
24029 begin_ = re_detail::pos0_<char_type>(s, BidirectionalIterator());
24030 end_ = re_detail::pos1_<char_type>(s, BidirectionalIterator());
24031 pregex_ = &re;
24032 rewind(m);
24033 }
24034 void assign(const regex_iterator2 &right)
24035 {
24036 operator=(right);
24037 }
24038
24039 void rewind(const regex_constants::match_flag_type m = regex_constants::match_default)
24040 {
24041 flags_ = m;
24042
24043 if (regex_search(begin_, end_, begin_, match_, *pregex_, flags_))
24044 {
24045 prevmatch_empty_ = match_[0].first == match_[0].second;
24046 }
24047 else
24048 match_.set_prefix1_(begin_);
24049
24050 submatch_ = 0u;
24051 }
24052
24053 regex_iterator2 &operator++()
24054 {
24055 if (match_.size())
24056 {
24057 const BidirectionalIterator prevend = match_[0].second;
24058 BidirectionalIterator start = prevend;
24059
24060 if (prevmatch_empty_)
24061 {
24062 if (start == end_)
24063 {
24064 match_.clear_();
24065 return *this;
24066 }
24067 utf_traits::codepoint_inc(start, end_);
24068 }
24069
24070 flags_ |= regex_constants::match_prev_avail;
24071 if (regex_search(start, end_, begin_, match_, *pregex_, flags_))
24072 prevmatch_empty_ = match_[0].first == match_[0].second;
24073
24074 match_.update_prefix1_(prevend);
24075 }
24076 return *this;
24077 }
24078
24079 regex_iterator2 operator++(int)
24080 {
24081 const regex_iterator2 tmp = *this;
24082 ++(*this);
24083 return tmp;
24084 }
24085
24086 // For replace.
24087
24088 // Replaces [match_[0].first, match_[0].second) in
24089 // [entire_string.begin(), entire_string.end()) with replacement,
24090 // and adjusts all the internal iterators accordingly.
24091 template <typename ST, typename SA>
24092 void replace(std::basic_string<char_type, ST, SA> &entire_string, const std::basic_string<char_type, ST, SA> &replacement)
24093 {
24094 typedef std::basic_string<char_type, ST, SA> string_type;
24095
24096 if (match_.size())
24097 {
24098 const BidirectionalIterator oldbegin = re_detail::pos0_<char_type>(entire_string, BidirectionalIterator());
24099 const typename string_type::size_type oldbeginoffset = begin_ - oldbegin;
24100 const typename string_type::size_type oldendoffset = end_ - oldbegin;
24101 const typename string_type::size_type pos = match_[0].first - oldbegin;
24102 const typename string_type::size_type count = match_[0].second - match_[0].first;
24103 const typename match_type::difference_type addition = replacement.size() - match_.length(0);
24104
24105 entire_string.replace(pos, count, replacement);
24106
24107 const BidirectionalIterator newbegin = re_detail::pos0_<char_type>(entire_string, BidirectionalIterator());
24108
24109 begin_ = newbegin + oldbeginoffset;
24110 end_ = newbegin + (oldendoffset + addition); // VC checks if an iterator exceeds end().
24111
24112 match_.update_m0_(newbegin + pos, newbegin + (pos + count + addition));
24113
24114 prevmatch_empty_ = count == 0;
24115 }
24116 }
24117
24118 template <typename ST, typename SA>
24119 void replace(std::basic_string<char_type, ST, SA> &entire_string, const BidirectionalIterator b, const BidirectionalIterator e)
24120 {
24121 typedef std::basic_string<char_type, ST, SA> string_type;
24122
24123 replace(entire_string, string_type(b, e));
24124 }
24125
24126 template <typename ST, typename SA>
24127 void replace(std::basic_string<char_type, ST, SA> &entire_string, const char_type *const replacement)
24128 {
24129 typedef std::basic_string<char_type, ST, SA> string_type;
24130
24131 replace(entire_string, string_type(replacement));
24132 }
24133
24134 // For split.
24135
24136 // 1. Until done() returns true, gather this->prefix() when
24137 // split_ready() returns true,
24138 // 2. Once done() becomes true, get remainder().
24139
24140 // Returns if this->prefix() holds a range that is worthy of being
24141 // treated as a split substring.
24142 bool split_ready() //const
24143 {
24144 if (match_.size())
24145 {
24146 if (match_[0].first != end_)
24147 return match_.prefix().first != match_[0].second;
24148
24149 // [end_, end_) is not appropriate as a split range. Invalidates the current match.
24150 match_.clear_();
24151 }
24152 return false; // Iterating complete.
24153 }
24154
24155 // When the only_after_match parameter is false, returns
24156 // [prefix().first, end); otherwise (when true) returns
24157 // [match_[0].second, end).
24158 // This function is intended to be called after iterating is
24159 // finished, to receive the range of suffix() of the last match.
24160 // If iterating is aborted during processing (e.g. pushing to a
24161 // list container) a captured subsequence (match_[n] where n >= 1),
24162 // then should be called with only_after_match being true,
24163 // otherwise [prefix().first, prefix().second) would be duplicated.
24164 const typename value_type::value_type &remainder(const bool only_after_match = false)
24165 {
24166 if (only_after_match && match_.size())
24167 match_.set_prefix1_(match_[0].second);
24168
24169 match_.update_prefix2_(end_);
24170 return match_.prefix();
24171 }
24172
24173 // The following 4 split_* functions are intended to be used
24174 // together, as follows:
24175 //
24176 // for (it.split_begin(); !it.done(); it.split_next()) {
24177 // if (++count == LIMIT)
24178 // break;
24179 // list.push_back(it.split_range());
24180 // }
24181 // list.push_back(it.split_remainder());
24182
24183 // Moves to a first subsequence for which split_ready() returns
24184 // true. This should be called only once before beginning iterating
24185 // (or after calling rewind()).
24186 bool split_begin()
24187 {
24188 if (split_ready())
24189 return true;
24190
24191 operator++();
24192 return split_ready();
24193 }
24194
24195 // Moves to a next subsequence for which split_ready() returns
24196 // true.
24197 // This function is intended to be used instead of the ordinary
24198 // increment operator (++).
24199 bool split_next()
24200 {
24201 if (++submatch_ >= match_.size())
24202 {
24203 submatch_ = 0u;
24204 operator++();
24205 return split_begin();
24206 }
24207 return !done();
24208 }
24209
24210 // Returns a current subsequence to which the iterator points.
24211 const typename value_type::value_type &split_range() const
24212 {
24213 return submatch_ == 0u ? match_.prefix() : match_[submatch_];
24214 }
24215
24216 // Returns the final subsequence immediately following the last
24217 // match range. This should be called after iterating is complete
24218 // or aborted.
24219 // Unlike remainder() above, a boolean value corresponding to
24220 // only_after_match is automatically calculated.
24221 const typename value_type::value_type &split_remainder()
24222 {
24223 if (submatch_ > 0u)
24224 match_.set_prefix1_(match_[0].second);
24225
24226 match_.update_prefix2_(end_);
24227 return match_.prefix();
24228 }
24229
24230 private:
24231
24232 typedef match_results<BidirectionalIterator> match_type;
24233 typedef typename regex_type::traits_type::utf_traits utf_traits;
24234
24235 BidirectionalIterator begin_;
24236 BidirectionalIterator end_;
24237 const regex_type *pregex_;
24238 regex_constants::match_flag_type flags_;
24239 match_type match_;
24240 bool prevmatch_empty_;
24241 typename match_type::size_type submatch_;
24242
24243 };
24244
24245 typedef regex_iterator2<const char *> cregex_iterator2;
24246 typedef regex_iterator2<const wchar_t *> wcregex_iterator2;
24247 typedef regex_iterator2<std::string::const_iterator> sregex_iterator2;
24248 typedef regex_iterator2<std::wstring::const_iterator> wsregex_iterator2;
24249
24250 typedef regex_iterator2<const char *, u8cregex> u8ccregex_iterator2;
24251 typedef regex_iterator2<std::string::const_iterator, u8cregex> u8csregex_iterator2;
24252
24253 #if defined(WCHAR_MAX)
24254 #if (WCHAR_MAX >= 0x10ffff)
24255 typedef wcregex_iterator2 u32wcregex_iterator2;
24256 typedef wsregex_iterator2 u32wsregex_iterator2;
24257 typedef u32wcregex_iterator2 u1632wcregex_iterator2;
24258 typedef u32wsregex_iterator2 u1632wsregex_iterator2;
24259 #elif (WCHAR_MAX >= 0xffff)
24260 typedef regex_iterator2<const wchar_t *, u16wregex> u16wcregex_iterator2;
24261 typedef regex_iterator2<std::wstring::const_iterator, u16wregex> u16wsregex_iterator2;
24262 typedef u16wcregex_iterator2 u1632wcregex_iterator2;
24263 typedef u16wsregex_iterator2 u1632wsregex_iterator2;
24264 #endif
24265 #endif
24266
24267 #if defined(SRELL_CPP11_CHAR1632_ENABLED)
24268 typedef regex_iterator2<const char16_t *> u16cregex_iterator2;
24269 typedef regex_iterator2<const char32_t *> u32cregex_iterator2;
24270 typedef regex_iterator2<std::u16string::const_iterator> u16sregex_iterator2;
24271 typedef regex_iterator2<std::u32string::const_iterator> u32sregex_iterator2;
24272 #endif
24273
24274 #if defined(SRELL_CPP20_CHAR8_ENABLED)
24275 typedef regex_iterator2<const char8_t *> u8cregex_iterator2;
24276 #else
24277 typedef u8ccregex_iterator2 u8cregex_iterator2;
24278 #endif
24279 #if defined(SRELL_CPP20_CHAR8_ENABLED) && (SRELL_CPP20_CHAR8_ENABLED >= 2)
24280 typedef regex_iterator2<std::u8string::const_iterator> u8sregex_iterator2;
24281 #else // !defined(SRELL_CPP20_CHAR8_ENABLED) || (SRELL_CPP20_CHAR8_ENABLED < 2)
24282 typedef u8csregex_iterator2 u8sregex_iterator2;
24283 #endif
24284
24285 #endif // !defined(SRELL_NO_APIEXT)
24286
24287 // ... "regex_iterator.hpp"]
24288 // ["regex_algorithm.hpp" ...
24289
24290 // 28.11.2, function template regex_match:
24291 // [7.11.2] Function template regex_match
24292 template <class BidirectionalIterator, class Allocator, class charT, class traits>
24293 bool regex_match(
24294 const BidirectionalIterator first,
24295 const BidirectionalIterator last,
24296 match_results<BidirectionalIterator, Allocator> &m,
24297 const basic_regex<charT, traits> &e,
24298 const regex_constants::match_flag_type flags = regex_constants::match_default
24299 )
24300 {
24301 return e.search(first, last, first, m, flags | regex_constants::match_continuous | regex_constants::match_match_);
24302 }
24303
24304 template <class BidirectionalIterator, class charT, class traits>
24305 bool regex_match(
24306 const BidirectionalIterator first,
24307 const BidirectionalIterator last,
24308 const basic_regex<charT, traits> &e,
24309 const regex_constants::match_flag_type flags = regex_constants::match_default
24310 )
24311 {
24312 // 4 Effects: Behaves "as if" by constructing an instance of
24313 // match_results<BidirectionalIterator> what, and then returning the
24314 // result of regex_match(first, last, what, e, flags).
24315
24316 match_results<BidirectionalIterator> what;
24317
24318 return regex_match(first, last, what, e, flags);
24319 }
24320
24321 template <class charT, class Allocator, class traits>
24322 bool regex_match(
24323 const charT *const str,
24324 match_results<const charT *, Allocator> &m,
24325 const basic_regex<charT, traits> &e,
24326 const regex_constants::match_flag_type flags = regex_constants::match_default
24327 )
24328 {
24329 return regex_match(str, str + std::char_traits<charT>::length(str), m, e, flags);
24330 }
24331
24332 template <class ST, class SA, class Allocator, class charT, class traits>
24333 bool regex_match(
24334 const std::basic_string<charT, ST, SA> &s,
24335 match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator> &m,
24336 const basic_regex<charT, traits> &e,
24337 const regex_constants::match_flag_type flags = regex_constants::match_default
24338 )
24339 {
24340 return regex_match(s.begin(), s.end(), m, e, flags);
24341 }
24342
24343 template <class charT, class traits>
24344 bool regex_match(
24345 const charT *const str,
24346 const basic_regex<charT, traits> &e,
24347 const regex_constants::match_flag_type flags = regex_constants::match_default
24348 )
24349 {
24350 return regex_match(str, str + std::char_traits<charT>::length(str), e, flags);
24351 }
24352
24353 template <class ST, class SA, class charT, class traits>
24354 bool regex_match(
24355 const std::basic_string<charT, ST, SA> &s,
24356 const basic_regex<charT, traits> &e,
24357 const regex_constants::match_flag_type flags = regex_constants::match_default
24358 )
24359 {
24360 return regex_match(s.begin(), s.end(), e, flags);
24361 }
24362
24363 template <class BidirectionalIterator, class Allocator, class charT, class traits>
24364 bool regex_search(
24365 const BidirectionalIterator first,
24366 const BidirectionalIterator last,
24367 const BidirectionalIterator lookbehind_limit,
24368 match_results<BidirectionalIterator, Allocator> &m,
24369 const basic_regex<charT, traits> &e,
24370 const regex_constants::match_flag_type flags = regex_constants::match_default
24371 )
24372 {
24373 return e.search(first, last, lookbehind_limit, m, flags);
24374 }
24375
24376 template <class BidirectionalIterator, class charT, class traits>
24377 bool regex_search(
24378 const BidirectionalIterator first,
24379 const BidirectionalIterator last,
24380 const BidirectionalIterator lookbehind_limit,
24381 const basic_regex<charT, traits> &e,
24382 const regex_constants::match_flag_type flags = regex_constants::match_default
24383 )
24384 {
24385 // 6 Effects: Behaves "as if" by constructing an object what of type
24386 // match_results<iterator> and then returning the result of
24387 // regex_search(first, last, what, e, flags).
24388
24389 match_results<BidirectionalIterator> what;
24390 return regex_search(first, last, lookbehind_limit, what, e, flags);
24391 }
24392
24393 // 28.11.3, function template regex_search:
24394 // 7.11.3 regex_search [tr.re.alg.search]
24395 template <class BidirectionalIterator, class Allocator, class charT, class traits>
24396 bool regex_search(
24397 const BidirectionalIterator first,
24398 const BidirectionalIterator last,
24399 match_results<BidirectionalIterator, Allocator> &m,
24400 const basic_regex<charT, traits> &e,
24401 const regex_constants::match_flag_type flags = regex_constants::match_default
24402 )
24403 {
24404 return e.search(first, last, first, m, flags);
24405 }
24406
24407 template <class BidirectionalIterator, class charT, class traits>
24408 bool regex_search(
24409 const BidirectionalIterator first,
24410 const BidirectionalIterator last,
24411 const basic_regex<charT, traits> &e,
24412 const regex_constants::match_flag_type flags = regex_constants::match_default
24413 )
24414 {
24415 // 6 Effects: Behaves "as if" by constructing an object what of type
24416 // match_results<iterator> and then returning the result of
24417 // regex_search(first, last, what, e, flags).
24418
24419 match_results<BidirectionalIterator> what;
24420 return regex_search(first, last, what, e, flags);
24421 }
24422
24423 template <class charT, class Allocator, class traits>
24424 bool regex_search(
24425 const charT *const str,
24426 match_results<const charT *, Allocator> &m,
24427 const basic_regex<charT, traits> &e,
24428 const regex_constants::match_flag_type flags = regex_constants::match_default
24429 )
24430 {
24431 return regex_search(str, str + std::char_traits<charT>::length(str), m, e, flags);
24432 }
24433
24434 template <class charT, class traits>
24435 bool regex_search(
24436 const charT *const str,
24437 const basic_regex<charT, traits> &e,
24438 const regex_constants::match_flag_type flags = regex_constants::match_default
24439 )
24440 {
24441 return regex_search(str, str + std::char_traits<charT>::length(str), e, flags);
24442 }
24443
24444 template <class ST, class SA, class charT, class traits>
24445 bool regex_search(
24446 const std::basic_string<charT, ST, SA> &s,
24447 const basic_regex<charT, traits> &e,
24448 const regex_constants::match_flag_type flags = regex_constants::match_default
24449 )
24450 {
24451 return regex_search(s.begin(), s.end(), e, flags);
24452 }
24453
24454 template <class ST, class SA, class Allocator, class charT, class traits>
24455 bool regex_search(
24456 const std::basic_string<charT, ST, SA> &s,
24457 match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator> &m,
24458 const basic_regex<charT, traits> &e,
24459 const regex_constants::match_flag_type flags = regex_constants::match_default
24460 )
24461 {
24462 return regex_search(s.begin(), s.end(), m, e, flags);
24463 }
24464
24465 // 28.11.4, function template regex_replace:
24466 // [7.11.4] Function template regex_replace
24467 template <class OutputIterator, class BidirectionalIterator, class traits, class charT, class ST, class SA>
24468 OutputIterator regex_replace(
24469 OutputIterator out,
24470 const BidirectionalIterator first,
24471 const BidirectionalIterator last,
24472 const basic_regex<charT, traits> &e,
24473 const std::basic_string<charT, ST, SA> &fmt,
24474 const regex_constants::match_flag_type flags = regex_constants::match_default
24475 )
24476 {
24477 typedef regex_iterator<BidirectionalIterator, charT, traits> iterator_type;
24478
24479 const bool do_copy = !(flags & regex_constants::format_no_copy);
24480 const iterator_type eos;
24481 iterator_type i(first, last, e, flags);
24482 typename iterator_type::value_type::value_type last_m_suffix;
24483
24484 last_m_suffix.first = first;
24485 last_m_suffix.second = last;
24486
24487 for (; i != eos; ++i)
24488 {
24489 if (do_copy)
24490 out = std::copy(i->prefix().first, i->prefix().second, out);
24491
24492 out = i->format(out, fmt, flags);
24493 last_m_suffix = i->suffix();
24494
24495 if (flags & regex_constants::format_first_only)
24496 break;
24497 }
24498
24499 if (do_copy)
24500 out = std::copy(last_m_suffix.first, last_m_suffix.second, out);
24501
24502 return out;
24503 }
24504
24505 template <class OutputIterator, class BidirectionalIterator, class traits, class charT>
24506 OutputIterator regex_replace(
24507 OutputIterator out,
24508 const BidirectionalIterator first,
24509 const BidirectionalIterator last,
24510 const basic_regex<charT, traits> &e,
24511 const charT *const fmt,
24512 const regex_constants::match_flag_type flags = regex_constants::match_default
24513 )
24514 {
24515 // Strictly speaking, this should be implemented as a version different
24516 // from the above with changing the line i->format(out, fmt, flags) to
24517 // i->format(out, fmt, fmt + char_traits<charT>::length(fmt), flags).
24518
24519 const std::basic_string<charT> fs(fmt, fmt + std::char_traits<charT>::length(fmt));
24520
24521 return regex_replace(out, first, last, e, fs, flags);
24522 }
24523
24524 template <class traits, class charT, class ST, class SA, class FST, class FSA>
24525 std::basic_string<charT, ST, SA> regex_replace(
24526 const std::basic_string<charT, ST, SA> &s,
24527 const basic_regex<charT, traits> &e,
24528 const std::basic_string<charT, FST, FSA> &fmt,
24529 const regex_constants::match_flag_type flags = regex_constants::match_default
24530 )
24531 {
24532 std::basic_string<charT, ST, SA> result;
24533
24534 regex_replace(std::back_inserter(result), s.begin(), s.end(), e, fmt, flags);
24535 return result;
24536 }
24537
24538 template <class traits, class charT, class ST, class SA>
24539 std::basic_string<charT, ST, SA> regex_replace(
24540 const std::basic_string<charT, ST, SA> &s,
24541 const basic_regex<charT, traits> &e,
24542 const charT *const fmt,
24543 const regex_constants::match_flag_type flags = regex_constants::match_default
24544 )
24545 {
24546 std::basic_string<charT, ST, SA> result;
24547
24548 regex_replace(std::back_inserter(result), s.begin(), s.end(), e, fmt, flags);
24549 return result;
24550 }
24551
24552 template <class traits, class charT, class ST, class SA>
24553 std::basic_string<charT> regex_replace(
24554 const charT *const s,
24555 const basic_regex<charT, traits> &e,
24556 const std::basic_string<charT, ST, SA> &fmt,
24557 const regex_constants::match_flag_type flags = regex_constants::match_default
24558 )
24559 {
24560 std::basic_string<charT> result;
24561
24562 regex_replace(std::back_inserter(result), s, s + std::char_traits<charT>::length(s), e, fmt, flags);
24563 return result;
24564 }
24565
24566 template <class traits, class charT>
24567 std::basic_string<charT> regex_replace(
24568 const charT *const s,
24569 const basic_regex<charT, traits> &e,
24570 const charT *const fmt,
24571 const regex_constants::match_flag_type flags = regex_constants::match_default
24572 )
24573 {
24574 std::basic_string<charT> result;
24575
24576 regex_replace(std::back_inserter(result), s, s + std::char_traits<charT>::length(s), e, fmt, flags);
24577 return result;
24578 }
24579
24580 #if !defined(SRELL_NO_APIEXT)
24581
24582 template <typename BasicStringLike>
24583 struct str_clip
24584 {
24585 public:
24586
24587 typedef BasicStringLike string_type;
24588 typedef typename string_type::traits_type traits_type;
24589 typedef typename string_type::allocator_type allocator_type;
24590 typedef typename string_type::size_type size_type;
24591 typedef typename string_type::iterator iterator;
24592 typedef typename string_type::const_iterator const_iterator;
24593 typedef typename string_type::const_pointer const_pointer;
24594
24595 str_clip(const str_clip &s)
24596 : ptr_(s.ptr_), offset_(s.offset_), roffset_(s.roffset_)
24597 {
24598 }
24599
24600 str_clip(string_type &s)
24601 : ptr_(&s), offset_(0), roffset_(0)
24602 {
24603 }
24604
24605 str_clip(string_type &s, const size_type pos, const size_type count = string_type::npos)
24606 : ptr_(&s), offset_(pos)
24607 {
24608 const size_type remainder = s.size() - pos;
24609
24610 roffset_ = count < remainder ? remainder - count : 0;
24611 }
24612
24613 str_clip(string_type &s, const_iterator b, const_iterator e)
24614 : ptr_(&s), offset_(b - s.begin()), roffset_(s.end() - e)
24615 {
24616 }
24617
24618 const str_clip &clip(const size_type pos, const size_type count = string_type::npos)
24619 {
24620 const size_type remainder = ptr_->size() - pos;
24621
24622 offset_ = pos;
24623 roffset_ = count < remainder ? remainder - count : 0;
24624 return *this;
24625 }
24626
24627 const str_clip &clip(const_iterator b, const_iterator e)
24628 {
24629 offset_ = b - ptr_->begin();
24630 roffset_ = ptr_->end() - e;
24631 return *this;
24632 }
24633
24634 const_pointer data() const
24635 {
24636 return ptr_->data() + offset_;
24637 }
24638
24639 size_type size() const
24640 {
24641 return ptr_->size() - offset_ - roffset_;
24642 }
24643
24644 iterator begin() const
24645 {
24646 return ptr_->begin() + offset_;
24647 }
24648
24649 iterator end() const
24650 {
24651 return ptr_->end() - roffset_;
24652 }
24653
24654 void replace(const size_type pos, const size_type count, const string_type &r) const
24655 {
24656 ptr_->replace(pos + offset_, count, r);
24657 }
24658
24659 private:
24660
24661 string_type *ptr_;
24662 size_type offset_;
24663 size_type roffset_;
24664 };
24665
24666 #endif // !defined(SRELL_NO_APIEXT)
24667
24668 // ... "regex_algorithm.hpp"]
24669 // ["regex_token_iterator.hpp" ...
24670
24671 // 28.12.2, class template regex_token_iterator:
24672 template <class BidirectionalIterator, class charT = typename std::iterator_traits<BidirectionalIterator>::value_type, class traits = regex_traits<charT> >
24673 class regex_token_iterator
24674 {
24675 public:
24676
24677 typedef basic_regex<charT, traits> regex_type;
24678 typedef sub_match<BidirectionalIterator> value_type;
24679 typedef std::ptrdiff_t difference_type;
24680 typedef const value_type *pointer;
24681 typedef const value_type &reference;
24682 typedef std::forward_iterator_tag iterator_category;
24683
24684 regex_token_iterator() : result_(NULL)
24685 {
24686 // Constructs the end-of-sequence iterator.
24687 }
24688
24689 regex_token_iterator(
24690 const BidirectionalIterator a,
24691 const BidirectionalIterator b,
24692 const regex_type &re,
24693 int submatch = 0,
24694 regex_constants::match_flag_type m = regex_constants::match_default
24695 ) : position_(a, b, re, m), result_(NULL), subs_(1, submatch)
24696 {
24697 post_constructor_(a, b);
24698 }
24699
24700 regex_token_iterator(
24701 const BidirectionalIterator a,
24702 const BidirectionalIterator b,
24703 const regex_type &re,
24704 const std::vector<int> &submatches,
24705 regex_constants::match_flag_type m = regex_constants::match_default
24706 ) : position_(a, b, re, m), result_(NULL), subs_(submatches)
24707 {
24708 post_constructor_(a, b);
24709 }
24710
24711 #if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED)
24712 regex_token_iterator(
24713 const BidirectionalIterator a,
24714 const BidirectionalIterator b,
24715 const regex_type &re,
24716 std::initializer_list<int> submatches,
24717 regex_constants::match_flag_type m = regex_constants::match_default
24718 ) : position_(a, b, re, m), result_(NULL), subs_(submatches)
24719 {
24720 post_constructor_(a, b);
24721 }
24722 #endif
24723
24724 template <std::size_t N> // Was R in TR1.
24725 regex_token_iterator(
24726 const BidirectionalIterator a,
24727 const BidirectionalIterator b,
24728 const regex_type &re,
24729 const int (&submatches)[N],
24730 regex_constants::match_flag_type m = regex_constants::match_default
24731 ) : position_(a, b, re, m), result_(NULL), subs_(submatches, submatches + N)
24732 {
24733 post_constructor_(a, b);
24734 }
24735
24736 regex_token_iterator(const regex_token_iterator &that)
24737 {
24738 operator=(that);
24739 }
24740
24741 regex_token_iterator &operator=(const regex_token_iterator &that)
24742 {
24743 if (this != &that)
24744 {
24745 this->result_ = that.result_;
24746 if (this->result_)
24747 {
24748 this->position_ = that.position_;
24749 this->suffix_ = that.suffix_;
24750 this->N_ = that.N_;
24751 this->subs_ = that.subs_;
24752 }
24753 }
24754 return *this;
24755 }
24756
24757 bool operator==(const regex_token_iterator &right)
24758 {
24759 if (right.result_ == NULL || this->result_ == NULL)
24760 return this->result_ == right.result_;
24761
24762 if (this->result_ == &this->suffix_ || right.result_ == &right.suffix_)
24763 return this->suffix_ == right.suffix_;
24764
24765 return this->position_ == right.position_
24766 && this->N_ == right.N_
24767 && this->subs_ == right.subs_;
24768 }
24769
24770 bool operator!=(const regex_token_iterator &right)
24771 {
24772 return !(*this == right);
24773 }
24774
24775 const value_type &operator*()
24776 {
24777 return *result_;
24778 }
24779
24780 const value_type *operator->()
24781 {
24782 return result_;
24783 }
24784
24785 regex_token_iterator &operator++()
24786 {
24787 if (result_ == &suffix_)
24788 result_ = NULL;
24789 else if (result_ != NULL)
24790 {
24791 if (++this->N_ >= subs_.size())
24792 {
24793 position_iterator eos_iterator;
24794
24795 this->N_ = 0;
24796 suffix_ = position_->suffix();
24797 if (++position_ == eos_iterator)
24798 {
24799 result_ = (suffix_.matched && minus1_in_subs_()) ? &suffix_ : NULL;
24800 return *this;
24801 }
24802 }
24803 result_ = subs_[this->N_] != -1 ? &((*position_)[subs_[this->N_]]) : &((*position_).prefix());
24804 }
24805 return *this;
24806 }
24807
24808 regex_token_iterator operator++(int)
24809 {
24810 const regex_token_iterator tmp(*this);
24811 ++(*this);
24812 return tmp;
24813 }
24814
24815 private:
24816
24817 void post_constructor_(const BidirectionalIterator a, const BidirectionalIterator b)
24818 {
24819 position_iterator eos_iterator;
24820
24821 this->N_ = 0;
24822
24823 if (position_ != eos_iterator && subs_.size())
24824 {
24825 result_ = subs_[this->N_] != -1 ? &((*position_)[subs_[this->N_]]) : &((*position_).prefix());
24826 return;
24827 }
24828
24829 if (minus1_in_subs_())
24830 {
24831 suffix_.matched = a != b;
24832
24833 if (suffix_.matched)
24834 {
24835 suffix_.first = a;
24836 suffix_.second = b;
24837 result_ = &suffix_;
24838 return;
24839 }
24840 }
24841 result_ = NULL;
24842 }
24843
24844 bool minus1_in_subs_() const
24845 {
24846 for (std::size_t i = 0; i < subs_.size(); ++i)
24847 if (subs_[i] == -1)
24848 return true;
24849
24850 return false;
24851 }
24852
24853 private:
24854
24855 typedef regex_iterator<BidirectionalIterator, charT, traits> position_iterator;
24856 position_iterator position_;
24857 const value_type *result_;
24858 value_type suffix_;
24859 std::size_t N_;
24860 std::vector<int> subs_;
24861 };
24862
24863 typedef regex_token_iterator<const char *> cregex_token_iterator;
24864 typedef regex_token_iterator<const wchar_t *> wcregex_token_iterator;
24865 typedef regex_token_iterator<std::string::const_iterator> sregex_token_iterator;
24866 typedef regex_token_iterator<std::wstring::const_iterator> wsregex_token_iterator;
24867
24868 typedef regex_token_iterator<const char *, typename std::iterator_traits<const char *>::value_type, u8regex_traits<typename std::iterator_traits<const char *>::value_type> > u8ccregex_token_iterator;
24869 typedef regex_token_iterator<std::string::const_iterator, typename std::iterator_traits<std::string::const_iterator>::value_type, u8regex_traits<typename std::iterator_traits<std::string::const_iterator>::value_type> > u8csregex_token_iterator;
24870
24871 #if defined(WCHAR_MAX)
24872 #if WCHAR_MAX >= 0x10ffff
24873 typedef wcregex_token_iterator u32wcregex_token_iterator;
24874 typedef wsregex_token_iterator u32wsregex_token_iterator;
24875 typedef u32wcregex_token_iterator u1632wcregex_token_iterator;
24876 typedef u32wsregex_token_iterator u1632wsregex_token_iterator;
24877 #elif WCHAR_MAX >= 0xffff
24878 typedef regex_token_iterator<const wchar_t *, typename std::iterator_traits<const wchar_t *>::value_type, u16regex_traits<typename std::iterator_traits<const wchar_t *>::value_type> > u16wcregex_token_iterator;
24879 typedef regex_token_iterator<std::wstring::const_iterator, typename std::iterator_traits<std::wstring::const_iterator>::value_type, u16regex_traits<typename std::iterator_traits<std::wstring::const_iterator>::value_type> > u16wsregex_token_iterator;
24880 typedef u16wcregex_token_iterator u1632wcregex_token_iterator;
24881 typedef u16wsregex_token_iterator u1632wsregex_token_iterator;
24882 #endif
24883 #endif
24884
24885 #if defined(SRELL_CPP11_CHAR1632_ENABLED)
24886 typedef regex_token_iterator<const char16_t *> u16cregex_token_iterator;
24887 typedef regex_token_iterator<const char32_t *> u32cregex_token_iterator;
24888 typedef regex_token_iterator<std::u16string::const_iterator> u16sregex_token_iterator;
24889 typedef regex_token_iterator<std::u32string::const_iterator> u32sregex_token_iterator;
24890 #endif
24891
24892 #if defined(SRELL_CPP20_CHAR8_ENABLED)
24893 typedef regex_token_iterator<const char8_t *> u8cregex_token_iterator;
24894 #else
24895 typedef u8ccregex_token_iterator u8cregex_token_iterator;
24896 #endif
24897 #if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2
24898 typedef regex_token_iterator<std::u8string::const_iterator> u8sregex_token_iterator;
24899 #else // !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2
24900 typedef u8csregex_token_iterator u8sregex_token_iterator;
24901 #endif
24902
24903 // ... "regex_token_iterator.hpp"]
24904
24905 } // namespace srell
24906 #endif // SRELL_REGEX_TEMPLATE_LIBRARY