PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.0.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.0.1
11.1.1 11.1.0 11.0.5 11.0.4 11.0.3 11.0.2 11.0.1 11.0.0 10.11.1 10.11.0 10.10.2 10.10.1 10.10.0 10.9.1 trunk 10.0.0 10.0.1 10.1.0 10.1.1 10.1.2 10.1.3 10.1.4 10.2.0 10.2.1 10.2.2 All 62 releases
acymailing / back / Core / AcymPunycode.php

AcymPunycode.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.0.1, at back/Core/AcymPunycode.php

2,555 lines 78.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Core;
4
5 class AcymPunycode
6 {
7 protected $_punycode_prefix = 'xn--';
8 protected $_max_ucs = 0x10FFFF;
9 protected $_base = 36;
10 protected $_tmin = 1;
11 protected $_tmax = 26;
12 protected $_skew = 38;
13 protected $_damp = 700;
14 protected $_initial_bias = 72;
15 protected $_initial_n = 0x80;
16 protected $_sbase = 0xAC00;
17 protected $_lbase = 0x1100;
18 protected $_vbase = 0x1161;
19 protected $_tbase = 0x11A7;
20 protected $_lcount = 19;
21 protected $_vcount = 21;
22 protected $_tcount = 28;
23 protected $_ncount = 588;
24 protected $_scount = 11172;
25
26 protected static $_mb_string_overload = null;
27
28 protected $_api_encoding = 'utf8';
29 protected $_allow_overlong = false;
30 protected $_strict_mode = false;
31 protected $_idn_version = 2003;
32
33 public function __construct()
34 {
35 if (self::$_mb_string_overload === null) {
36 self::$_mb_string_overload = (extension_loaded('mbstring') && (ini_get('mbstring.func_overload') & 0x02) === 0x02);
37 }
38 }
39
40 protected function _error($error = '')
41 {
42 acym_enqueueMessage($error);
43 }
44
45 protected static function byteLength($string)
46 {
47 if (self::$_mb_string_overload) {
48 return mb_strlen($string, '8bit');
49 }
50
51 return strlen((binary)$string);
52 }
53
54 protected function _decode_digit($cp)
55 {
56 $cp = ord($cp);
57
58 return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
59 }
60
61 protected function _ucs4_to_ucs4_string($input)
62 {
63 $output = '';
64 foreach ($input as $v) {
65 $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255);
66 }
67
68 return $output;
69 }
70
71 protected function _utf8_to_ucs4($input)
72 {
73 $output = [];
74 $out_len = 0;
75 $inp_len = self::byteLength($input);
76 $mode = 'next';
77 $test = 'none';
78 for ($k = 0 ; $k < $inp_len ; ++$k) {
79 $v = ord($input[$k]); // Extract byte from input string
80 if ($v < 128) { // We found an ASCII char - put into stirng as is
81 $output[$out_len] = $v;
82 ++$out_len;
83 if ('add' == $mode) {
84 return false;
85 }
86 continue;
87 }
88 if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
89 $start_byte = $v;
90 $mode = 'add';
91 $test = 'range';
92 if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
93 $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
94 $v = ($v - 192) << 6;
95 } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
96 $next_byte = 1;
97 $v = ($v - 224) << 12;
98 } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
99 $next_byte = 2;
100 $v = ($v - 240) << 18;
101 } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
102 $next_byte = 3;
103 $v = ($v - 248) << 24;
104 } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
105 $next_byte = 4;
106 $v = ($v - 252) << 30;
107 } else {
108 return false;
109 }
110 if ('add' == $mode) {
111 $output[$out_len] = (int)$v;
112 ++$out_len;
113 continue;
114 }
115 }
116 if ('add' == $mode) {
117 if (!$this->_allow_overlong && $test == 'range') {
118 $test = 'none';
119 if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
120 return false;
121 }
122 }
123 if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
124 $v = ($v - 128) << ($next_byte * 6);
125 $output[($out_len - 1)] += $v;
126 --$next_byte;
127 } else {
128 return false;
129 }
130 if ($next_byte < 0) {
131 $mode = 'next';
132 }
133 }
134 } // for
135
136 return $output;
137 }
138
139 public function emailToUTF8($input, $one_time_encoding = false)
140 {
141 if ($one_time_encoding) {
142 switch ($one_time_encoding) {
143 case 'utf8':
144 case 'ucs4_string':
145 case 'ucs4_array':
146 break;
147 default:
148 $this->_error('Unknown encoding '.$one_time_encoding);
149
150 return false;
151 }
152 }
153 $input = trim($input);
154
155 if (strpos($input, '@')) { // Maybe it is an email address
156 if ($this->_strict_mode) {
157 return false;
158 }
159 list ($email_pref, $input) = explode('@', $input, 2);
160 $arr = explode('.', $input);
161 foreach ($arr as $k => $v) {
162 if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
163 $conv = $this->_decode($v);
164 if ($conv) $arr[$k] = $conv;
165 }
166 }
167 $input = join('.', $arr);
168 $arr = explode('.', $email_pref);
169 foreach ($arr as $k => $v) {
170 if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
171 $conv = $this->_decode($v);
172 if ($conv) $arr[$k] = $conv;
173 }
174 }
175 $email_pref = join('.', $arr);
176 $return = $email_pref.'@'.$input;
177 } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
178 if ($this->_strict_mode) {
179 return false;
180 }
181 $parsed = parse_url($input);
182 if (isset($parsed['host'])) {
183 $arr = explode('.', $parsed['host']);
184 foreach ($arr as $k => $v) {
185 $conv = $this->_decode($v);
186 if ($conv) $arr[$k] = $conv;
187 }
188 $parsed['host'] = join('.', $arr);
189 $return = (empty($parsed['scheme'])
190 ? ''
191 : $parsed['scheme'].(strtolower(
192 $parsed['scheme']
193 ) == 'mailto' ? ':' : '://')).(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@').$parsed['host'].(empty($parsed['port']) ? '' : ':'.$parsed['port']).(empty($parsed['path']) ? '' : $parsed['path']).(empty($parsed['query']) ? '' : '?'.$parsed['query']).(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
194 } else {
195 $arr = explode('.', $input);
196 foreach ($arr as $k => $v) {
197 $conv = $this->_decode($v);
198 $arr[$k] = ($conv) ? $conv : $v;
199 }
200 $return = join('.', $arr);
201 }
202 } else {
203 $return = $this->_decode($input);
204 if (!$return) $return = $input;
205 }
206 switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
207 case 'utf8':
208 return $return;
209 break;
210 case 'ucs4_string':
211 return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
212 break;
213 case 'ucs4_array':
214 return $this->_utf8_to_ucs4($return);
215 break;
216 default:
217 $this->_error('Unsupported output format');
218
219 return false;
220 }
221 }
222
223 protected function _decode($encoded)
224 {
225 $decoded = [];
226 if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) {
227 return false;
228 }
229 $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded);
230 if (!$encode_test) {
231 return false;
232 }
233 $delim_pos = strrpos($encoded, '-');
234 if ($delim_pos > self::byteLength($this->_punycode_prefix)) {
235 for ($k = self::byteLength($this->_punycode_prefix) ; $k < $delim_pos ; ++$k) {
236 $decoded[] = ord($encoded[$k]);
237 }
238 }
239 $deco_len = count($decoded);
240 $enco_len = self::byteLength($encoded);
241
242 $is_first = true;
243 $bias = $this->_initial_bias;
244 $idx = 0;
245 $char = $this->_initial_n;
246
247 for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0 ; $enco_idx < $enco_len ; ++$deco_len) {
248 for ($old_idx = $idx, $w = 1, $k = $this->_base ; 1 ; $k += $this->_base) {
249 $digit = $this->_decode_digit($encoded[$enco_idx++]);
250 $idx += $digit * $w;
251 $t = ($k <= $bias) ? $this->_tmin : (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
252 if ($digit < $t) break;
253 $w = (int)($w * ($this->_base - $t));
254 }
255 $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
256 $is_first = false;
257 $char += (int)($idx / ($deco_len + 1));
258 $idx %= ($deco_len + 1);
259 if ($deco_len > 0) {
260 for ($i = $deco_len ; $i > $idx ; $i--) {
261 $decoded[$i] = $decoded[($i - 1)];
262 }
263 }
264 $decoded[$idx++] = $char;
265 }
266
267 return $this->_ucs4_to_utf8($decoded);
268 }
269
270 public function emailToPunycode($decoded, $one_time_encoding = false)
271 {
272 switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
273 case 'utf8':
274 $decoded = $this->_utf8_to_ucs4($decoded);
275 break;
276 case 'ucs4_string':
277 $decoded = $this->_ucs4_string_to_ucs4($decoded);
278 case 'ucs4_array':
279 break;
280 default:
281 $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
282
283 return false;
284 }
285
286 if (empty($decoded)) return '';
287
288 $last_begin = 0;
289 $output = '';
290 foreach ($decoded as $k => $v) {
291 switch ($v) {
292 case 0x3002:
293 case 0xFF0E:
294 case 0xFF61:
295 $decoded[$k] = 0x2E;
296 case 0x2E:
297 case 0x2F:
298 case 0x3A:
299 case 0x3F:
300 case 0x40:
301 if ($this->_strict_mode) {
302 return false;
303 } else {
304 if ($k) {
305 $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k) - $last_begin)));
306 if ($encoded) {
307 $output .= $encoded;
308 } else {
309 $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k) - $last_begin)));
310 }
311 $output .= chr($decoded[$k]);
312 }
313 $last_begin = $k + 1;
314 }
315 }
316 }
317 if ($last_begin) {
318 $inp_len = sizeof($decoded);
319 $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
320 if ($encoded) {
321 $output .= $encoded;
322 } else {
323 $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
324 }
325
326 return $output;
327 } else {
328 if ($output = $this->_encode($decoded)) {
329 return $output;
330 } else {
331 return $this->_ucs4_to_utf8($decoded);
332 }
333 }
334 }
335
336 protected function _encode($decoded)
337 {
338 $extract = self::byteLength($this->_punycode_prefix);
339 $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
340 $check_deco = array_slice($decoded, 0, $extract);
341
342 if ($check_pref == $check_deco) return false;
343 $encodable = false;
344 foreach ($decoded as $k => $v) {
345 if ($v > 0x7a) {
346 $encodable = true;
347 break;
348 }
349 }
350 if (!$encodable) return false;
351
352 $decoded = $this->_nameprep($decoded);
353 if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed
354 $deco_len = count($decoded);
355 if (!$deco_len) return false; // Empty array
356 $codecount = 0; // How many chars have been consumed
357 $encoded = '';
358 for ($i = 0 ; $i < $deco_len ; ++$i) {
359 $test = $decoded[$i];
360 if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
361 $encoded .= chr($decoded[$i]);
362 $codecount++;
363 }
364 }
365 if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones
366
367 $encoded = $this->_punycode_prefix.$encoded;
368 if ($codecount) $encoded .= '-';
369 $is_first = true;
370 $cur_code = $this->_initial_n;
371 $bias = $this->_initial_bias;
372 $delta = 0;
373 while ($codecount < $deco_len) {
374 for ($i = 0, $next_code = $this->_max_ucs ; $i < $deco_len ; $i++) {
375 if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
376 $next_code = $decoded[$i];
377 }
378 }
379 $delta += ($next_code - $cur_code) * ($codecount + 1);
380 $cur_code = $next_code;
381
382 for ($i = 0 ; $i < $deco_len ; $i++) {
383 if ($decoded[$i] < $cur_code) {
384 $delta++;
385 } elseif ($decoded[$i] == $cur_code) {
386 for ($q = $delta, $k = $this->_base ; 1 ; $k += $this->_base) {
387 $t = ($k <= $bias) ? $this->_tmin : (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
388 if ($q < $t) break;
389 $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
390 $q = (int)(($q - $t) / ($this->_base - $t));
391 }
392 $encoded .= $this->_encode_digit($q);
393 $bias = $this->_adapt($delta, $codecount + 1, $is_first);
394 $codecount++;
395 $delta = 0;
396 $is_first = false;
397 }
398 }
399 $delta++;
400 $cur_code++;
401 }
402
403 return $encoded;
404 }
405
406 protected function _adapt($delta, $npoints, $is_first)
407 {
408 $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
409 $delta += intval($delta / $npoints);
410 for ($k = 0 ; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2 ; $k += $this->_base) {
411 $delta = intval($delta / ($this->_base - $this->_tmin));
412 }
413
414 return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
415 }
416
417 protected function _encode_digit($d)
418 {
419 return chr($d + 22 + 75 * ($d < 26));
420 }
421
422 protected function _nameprep($input)
423 {
424 $output = [];
425 foreach ($input as $v) {
426 if (in_array($v, self::$NP['map_nothing'])) continue;
427 if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) {
428 return false;
429 }
430 foreach (self::$NP['prohibit_ranges'] as $range) {
431 if ($range[0] <= $v && $v <= $range[1]) {
432 return false;
433 }
434 }
435
436 if (0xAC00 <= $v && $v <= 0xD7AF) {
437 foreach ($this->_hangul_decompose($v) as $out) {
438 $output[] = (int)$out;
439 }
440 } elseif (($this->_idn_version == '2003') && isset(self::$NP['replacemaps'][$v])) {
441 foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps'][$v]) as $out) {
442 $output[] = (int)$out;
443 }
444 } else {
445 $output[] = (int)$v;
446 }
447 }
448 $output = $this->_hangul_compose($output);
449 $last_class = 0;
450 $last_starter = 0;
451 $out_len = count($output);
452 for ($i = 0 ; $i < $out_len ; ++$i) {
453 $class = $this->_get_combining_class($output[$i]);
454 if ((!$last_class || $last_class > $class) && $class) {
455 $seq_len = $i - $last_starter;
456 $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
457 if ($out) {
458 $output[$last_starter] = $out;
459 if (count($out) != $seq_len) {
460 for ($j = $i + 1 ; $j < $out_len ; ++$j) {
461 $output[$j - 1] = $output[$j];
462 }
463 unset($output[$out_len]);
464 }
465 $i--;
466 $out_len--;
467 $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i - 1]);
468 continue;
469 }
470 }
471 if (!$class) $last_starter = $i;
472 $last_class = $class;
473 }
474
475 return $output;
476 }
477
478 protected function _hangul_decompose($char)
479 {
480 $sindex = (int)$char - $this->_sbase;
481 if ($sindex < 0 || $sindex >= $this->_scount) return [$char];
482 $result = [];
483 $result[] = (int)$this->_lbase + $sindex / $this->_ncount;
484 $result[] = (int)$this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
485 $T = intval($this->_tbase + $sindex % $this->_tcount);
486 if ($T != $this->_tbase) $result[] = $T;
487
488 return $result;
489 }
490
491 protected function _hangul_compose($input)
492 {
493 $inp_len = count($input);
494 if (!$inp_len) return [];
495 $result = [];
496 $last = (int)$input[0];
497 $result[] = $last; // copy first char from input to output
498
499 for ($i = 1 ; $i < $inp_len ; ++$i) {
500 $char = (int)$input[$i];
501 $sindex = $last - $this->_sbase;
502 $lindex = $last - $this->_lbase;
503 $vindex = $char - $this->_vbase;
504 $tindex = $char - $this->_tbase;
505 if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) && 0 <= $tindex && $tindex <= $this->_tcount) {
506 $last += $tindex;
507 $result[(count($result) - 1)] = $last; // reset last
508 continue; // discard char
509 }
510 if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
511 $last = (int)$this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
512 $result[(count($result) - 1)] = $last; // reset last
513 continue; // discard char
514 }
515 $last = $char;
516 $result[] = $char;
517 }
518
519 return $result;
520 }
521
522 protected function _get_combining_class($char)
523 {
524 return isset(self::$NP['norm_combcls'][$char]) ? self::$NP['norm_combcls'][$char] : 0;
525 }
526
527 protected function _apply_cannonical_ordering($input)
528 {
529 $swap = true;
530 $size = count($input);
531 while ($swap) {
532 $swap = false;
533 $last = $this->_get_combining_class(intval($input[0]));
534 for ($i = 0 ; $i < $size - 1 ; ++$i) {
535 $next = $this->_get_combining_class(intval($input[$i + 1]));
536 if ($next != 0 && $last > $next) {
537 for ($j = $i + 1 ; $j > 0 ; --$j) {
538 if ($this->_get_combining_class(intval($input[$j - 1])) <= $next) break;
539 $t = intval($input[$j]);
540 $input[$j] = intval($input[$j - 1]);
541 $input[$j - 1] = $t;
542 $swap = true;
543 }
544 $next = $last;
545 }
546 $last = $next;
547 }
548 }
549
550 return $input;
551 }
552
553 protected function _combine($input)
554 {
555 $inp_len = count($input);
556 foreach (self::$NP['replacemaps'] as $np_src => $np_target) {
557 if ($np_target[0] != $input[0]) continue;
558 if (count($np_target) != $inp_len) continue;
559 $hit = false;
560 foreach ($input as $k2 => $v2) {
561 if ($v2 == $np_target[$k2]) {
562 $hit = true;
563 } else {
564 $hit = false;
565 break;
566 }
567 }
568 if ($hit) return $np_src;
569 }
570
571 return false;
572 }
573
574 protected function _ucs4_to_utf8($input)
575 {
576 $output = '';
577 foreach ($input as $k => $v) {
578 if ($v < 128) { // 7bit are transferred literally
579 $output .= chr($v);
580 } elseif ($v < (1 << 11)) { // 2 bytes
581 $output .= chr(192 + ($v >> 6)).chr(128 + ($v & 63));
582 } elseif ($v < (1 << 16)) { // 3 bytes
583 $output .= chr(224 + ($v >> 12)).chr(128 + (($v >> 6) & 63)).chr(128 + ($v & 63));
584 } elseif ($v < (1 << 21)) { // 4 bytes
585 $output .= chr(240 + ($v >> 18)).chr(128 + (($v >> 12) & 63)).chr(128 + (($v >> 6) & 63)).chr(128 + ($v & 63));
586 } elseif (self::$safe_mode) {
587 $output .= self::$safe_char;
588 } else {
589 return false;
590 }
591 }
592
593 return $output;
594 }
595
596 protected function _ucs4_string_to_ucs4($input)
597 {
598 $output = [];
599 $inp_len = self::byteLength($input);
600 if ($inp_len % 4) {
601 return false;
602 }
603 if (!$inp_len) return $output;
604 for ($i = 0, $out_len = -1 ; $i < $inp_len ; ++$i) {
605 if (!($i % 4)) {
606 $out_len++;
607 $output[$out_len] = 0;
608 }
609 $output[$out_len] += ord($input[$i]) << (8 * (3 - ($i % 4)));
610 }
611
612 return $output;
613 }
614
615 protected static $NP = [
616 'map_nothing' => [
617 0xAD,
618 0x34F,
619 0x1806,
620 0x180B,
621 0x180C,
622 0x180D,
623 0x200B,
624 0x200C,
625 0x200D,
626 0x2060,
627 0xFE00,
628 0xFE01,
629 0xFE02,
630 0xFE03,
631 0xFE04,
632 0xFE05,
633 0xFE06,
634 0xFE07,
635 0xFE08,
636 0xFE09,
637 0xFE0A,
638 0xFE0B,
639 0xFE0C,
640 0xFE0D,
641 0xFE0E,
642 0xFE0F,
643 0xFEFF,
644 ],
645 'general_prohibited' => [
646 0,
647 1,
648 2,
649 3,
650 4,
651 5,
652 6,
653 7,
654 8,
655 9,
656 10,
657 11,
658 12,
659 13,
660 14,
661 15,
662 16,
663 17,
664 18,
665 19,
666 20,
667 21,
668 22,
669 23,
670 24,
671 25,
672 26,
673 27,
674 28,
675 29,
676 30,
677 31,
678 32,
679 33,
680 34,
681 35,
682 36,
683 37,
684 38,
685 39,
686 40,
687 41,
688 42,
689 43,
690 44,
691 47,
692 59,
693 60,
694 61,
695 62,
696 63,
697 64,
698 91,
699 92,
700 93,
701 94,
702 95,
703 96,
704 123,
705 124,
706 125,
707 126,
708 127,
709 0x3002,
710 ],
711 'prohibit' => [
712 0xA0,
713 0x340,
714 0x341,
715 0x6DD,
716 0x70F,
717 0x1680,
718 0x180E,
719 0x2000,
720 0x2001,
721 0x2002,
722 0x2003,
723 0x2004,
724 0x2005,
725 0x2006,
726 0x2007,
727 0x2008,
728 0x2009,
729 0x200A,
730 0x200B,
731 0x200C,
732 0x200D,
733 0x200E,
734 0x200F,
735 0x2028,
736 0x2029,
737 0x202A,
738 0x202B,
739 0x202C,
740 0x202D,
741 0x202E,
742 0x202F,
743 0x205F,
744 0x206A,
745 0x206B,
746 0x206C,
747 0x206D,
748 0x206E,
749 0x206F,
750 0x3000,
751 0xFEFF,
752 0xFFF9,
753 0xFFFA,
754 0xFFFB,
755 0xFFFC,
756 0xFFFD,
757 0xFFFE,
758 0xFFFF,
759 0x1FFFE,
760 0x1FFFF,
761 0x2FFFE,
762 0x2FFFF,
763 0x3FFFE,
764 0x3FFFF,
765 0x4FFFE,
766 0x4FFFF,
767 0x5FFFE,
768 0x5FFFF,
769 0x6FFFE,
770 0x6FFFF,
771 0x7FFFE,
772 0x7FFFF,
773 0x8FFFE,
774 0x8FFFF,
775 0x9FFFE,
776 0x9FFFF,
777 0xAFFFE,
778 0xAFFFF,
779 0xBFFFE,
780 0xBFFFF,
781 0xCFFFE,
782 0xCFFFF,
783 0xDFFFE,
784 0xDFFFF,
785 0xE0001,
786 0xEFFFE,
787 0xEFFFF,
788 0xFFFFE,
789 0xFFFFF,
790 0x10FFFE,
791 0x10FFFF,
792 ],
793 'prohibit_ranges' => [
794 [0x80, 0x9F],
795 [0x2060, 0x206F],
796 [0x1D173, 0x1D17A],
797 [0xE000, 0xF8FF],
798 [0xF0000, 0xFFFFD],
799 [0x100000, 0x10FFFD],
800 [0xFDD0, 0xFDEF],
801 [0xD800, 0xDFFF],
802 [0x2FF0, 0x2FFB],
803 [0xE0020, 0xE007F],
804 ],
805 'replacemaps' => [
806 0x41 => [0x61],
807 0x42 => [0x62],
808 0x43 => [0x63],
809 0x44 => [0x64],
810 0x45 => [0x65],
811 0x46 => [0x66],
812 0x47 => [0x67],
813 0x48 => [0x68],
814 0x49 => [0x69],
815 0x4A => [0x6A],
816 0x4B => [0x6B],
817 0x4C => [0x6C],
818 0x4D => [0x6D],
819 0x4E => [0x6E],
820 0x4F => [0x6F],
821 0x50 => [0x70],
822 0x51 => [0x71],
823 0x52 => [0x72],
824 0x53 => [0x73],
825 0x54 => [0x74],
826 0x55 => [0x75],
827 0x56 => [0x76],
828 0x57 => [0x77],
829 0x58 => [0x78],
830 0x59 => [0x79],
831 0x5A => [0x7A],
832 0xB5 => [0x3BC],
833 0xC0 => [0xE0],
834 0xC1 => [0xE1],
835 0xC2 => [0xE2],
836 0xC3 => [0xE3],
837 0xC4 => [0xE4],
838 0xC5 => [0xE5],
839 0xC6 => [0xE6],
840 0xC7 => [0xE7],
841 0xC8 => [0xE8],
842 0xC9 => [0xE9],
843 0xCA => [0xEA],
844 0xCB => [0xEB],
845 0xCC => [0xEC],
846 0xCD => [0xED],
847 0xCE => [0xEE],
848 0xCF => [0xEF],
849 0xD0 => [0xF0],
850 0xD1 => [0xF1],
851 0xD2 => [0xF2],
852 0xD3 => [0xF3],
853 0xD4 => [0xF4],
854 0xD5 => [0xF5],
855 0xD6 => [0xF6],
856 0xD8 => [0xF8],
857 0xD9 => [0xF9],
858 0xDA => [0xFA],
859 0xDB => [0xFB],
860 0xDC => [0xFC],
861 0xDD => [0xFD],
862 0xDE => [0xFE],
863 0xDF => [0x73, 0x73],
864 0x100 => [0x101],
865 0x102 => [0x103],
866 0x104 => [0x105],
867 0x106 => [0x107],
868 0x108 => [0x109],
869 0x10A => [0x10B],
870 0x10C => [0x10D],
871 0x10E => [0x10F],
872 0x110 => [0x111],
873 0x112 => [0x113],
874 0x114 => [0x115],
875 0x116 => [0x117],
876 0x118 => [0x119],
877 0x11A => [0x11B],
878 0x11C => [0x11D],
879 0x11E => [0x11F],
880 0x120 => [0x121],
881 0x122 => [0x123],
882 0x124 => [0x125],
883 0x126 => [0x127],
884 0x128 => [0x129],
885 0x12A => [0x12B],
886 0x12C => [0x12D],
887 0x12E => [0x12F],
888 0x130 => [0x69, 0x307],
889 0x132 => [0x133],
890 0x134 => [0x135],
891 0x136 => [0x137],
892 0x139 => [0x13A],
893 0x13B => [0x13C],
894 0x13D => [0x13E],
895 0x13F => [0x140],
896 0x141 => [0x142],
897 0x143 => [0x144],
898 0x145 => [0x146],
899 0x147 => [0x148],
900 0x149 => [0x2BC, 0x6E],
901 0x14A => [0x14B],
902 0x14C => [0x14D],
903 0x14E => [0x14F],
904 0x150 => [0x151],
905 0x152 => [0x153],
906 0x154 => [0x155],
907 0x156 => [0x157],
908 0x158 => [0x159],
909 0x15A => [0x15B],
910 0x15C => [0x15D],
911 0x15E => [0x15F],
912 0x160 => [0x161],
913 0x162 => [0x163],
914 0x164 => [0x165],
915 0x166 => [0x167],
916 0x168 => [0x169],
917 0x16A => [0x16B],
918 0x16C => [0x16D],
919 0x16E => [0x16F],
920 0x170 => [0x171],
921 0x172 => [0x173],
922 0x174 => [0x175],
923 0x176 => [0x177],
924 0x178 => [0xFF],
925 0x179 => [0x17A],
926 0x17B => [0x17C],
927 0x17D => [0x17E],
928 0x17F => [0x73],
929 0x181 => [0x253],
930 0x182 => [0x183],
931 0x184 => [0x185],
932 0x186 => [0x254],
933 0x187 => [0x188],
934 0x189 => [0x256],
935 0x18A => [0x257],
936 0x18B => [0x18C],
937 0x18E => [0x1DD],
938 0x18F => [0x259],
939 0x190 => [0x25B],
940 0x191 => [0x192],
941 0x193 => [0x260],
942 0x194 => [0x263],
943 0x196 => [0x269],
944 0x197 => [0x268],
945 0x198 => [0x199],
946 0x19C => [0x26F],
947 0x19D => [0x272],
948 0x19F => [0x275],
949 0x1A0 => [0x1A1],
950 0x1A2 => [0x1A3],
951 0x1A4 => [0x1A5],
952 0x1A6 => [0x280],
953 0x1A7 => [0x1A8],
954 0x1A9 => [0x283],
955 0x1AC => [0x1AD],
956 0x1AE => [0x288],
957 0x1AF => [0x1B0],
958 0x1B1 => [0x28A],
959 0x1B2 => [0x28B],
960 0x1B3 => [0x1B4],
961 0x1B5 => [0x1B6],
962 0x1B7 => [0x292],
963 0x1B8 => [0x1B9],
964 0x1BC => [0x1BD],
965 0x1C4 => [0x1C6],
966 0x1C5 => [0x1C6],
967 0x1C7 => [0x1C9],
968 0x1C8 => [0x1C9],
969 0x1CA => [0x1CC],
970 0x1CB => [0x1CC],
971 0x1CD => [0x1CE],
972 0x1CF => [0x1D0],
973 0x1D1 => [0x1D2],
974 0x1D3 => [0x1D4],
975 0x1D5 => [0x1D6],
976 0x1D7 => [0x1D8],
977 0x1D9 => [0x1DA],
978 0x1DB => [0x1DC],
979 0x1DE => [0x1DF],
980 0x1E0 => [0x1E1],
981 0x1E2 => [0x1E3],
982 0x1E4 => [0x1E5],
983 0x1E6 => [0x1E7],
984 0x1E8 => [0x1E9],
985 0x1EA => [0x1EB],
986 0x1EC => [0x1ED],
987 0x1EE => [0x1EF],
988 0x1F0 => [0x6A, 0x30C],
989 0x1F1 => [0x1F3],
990 0x1F2 => [0x1F3],
991 0x1F4 => [0x1F5],
992 0x1F6 => [0x195],
993 0x1F7 => [0x1BF],
994 0x1F8 => [0x1F9],
995 0x1FA => [0x1FB],
996 0x1FC => [0x1FD],
997 0x1FE => [0x1FF],
998 0x200 => [0x201],
999 0x202 => [0x203],
1000 0x204 => [0x205],
1001 0x206 => [0x207],
1002 0x208 => [0x209],
1003 0x20A => [0x20B],
1004 0x20C => [0x20D],
1005 0x20E => [0x20F],
1006 0x210 => [0x211],
1007 0x212 => [0x213],
1008 0x214 => [0x215],
1009 0x216 => [0x217],
1010 0x218 => [0x219],
1011 0x21A => [0x21B],
1012 0x21C => [0x21D],
1013 0x21E => [0x21F],
1014 0x220 => [0x19E],
1015 0x222 => [0x223],
1016 0x224 => [0x225],
1017 0x226 => [0x227],
1018 0x228 => [0x229],
1019 0x22A => [0x22B],
1020 0x22C => [0x22D],
1021 0x22E => [0x22F],
1022 0x230 => [0x231],
1023 0x232 => [0x233],
1024 0x345 => [0x3B9],
1025 0x37A => [0x20, 0x3B9],
1026 0x386 => [0x3AC],
1027 0x388 => [0x3AD],
1028 0x389 => [0x3AE],
1029 0x38A => [0x3AF],
1030 0x38C => [0x3CC],
1031 0x38E => [0x3CD],
1032 0x38F => [0x3CE],
1033 0x390 => [0x3B9, 0x308, 0x301],
1034 0x391 => [0x3B1],
1035 0x392 => [0x3B2],
1036 0x393 => [0x3B3],
1037 0x394 => [0x3B4],
1038 0x395 => [0x3B5],
1039 0x396 => [0x3B6],
1040 0x397 => [0x3B7],
1041 0x398 => [0x3B8],
1042 0x399 => [0x3B9],
1043 0x39A => [0x3BA],
1044 0x39B => [0x3BB],
1045 0x39C => [0x3BC],
1046 0x39D => [0x3BD],
1047 0x39E => [0x3BE],
1048 0x39F => [0x3BF],
1049 0x3A0 => [0x3C0],
1050 0x3A1 => [0x3C1],
1051 0x3A3 => [0x3C3],
1052 0x3A4 => [0x3C4],
1053 0x3A5 => [0x3C5],
1054 0x3A6 => [0x3C6],
1055 0x3A7 => [0x3C7],
1056 0x3A8 => [0x3C8],
1057 0x3A9 => [0x3C9],
1058 0x3AA => [0x3CA],
1059 0x3AB => [0x3CB],
1060 0x3B0 => [0x3C5, 0x308, 0x301],
1061 0x3C2 => [0x3C3],
1062 0x3D0 => [0x3B2],
1063 0x3D1 => [0x3B8],
1064 0x3D2 => [0x3C5],
1065 0x3D3 => [0x3CD],
1066 0x3D4 => [0x3CB],
1067 0x3D5 => [0x3C6],
1068 0x3D6 => [0x3C0],
1069 0x3D8 => [0x3D9],
1070 0x3DA => [0x3DB],
1071 0x3DC => [0x3DD],
1072 0x3DE => [0x3DF],
1073 0x3E0 => [0x3E1],
1074 0x3E2 => [0x3E3],
1075 0x3E4 => [0x3E5],
1076 0x3E6 => [0x3E7],
1077 0x3E8 => [0x3E9],
1078 0x3EA => [0x3EB],
1079 0x3EC => [0x3ED],
1080 0x3EE => [0x3EF],
1081 0x3F0 => [0x3BA],
1082 0x3F1 => [0x3C1],
1083 0x3F2 => [0x3C3],
1084 0x3F4 => [0x3B8],
1085 0x3F5 => [0x3B5],
1086 0x400 => [0x450],
1087 0x401 => [0x451],
1088 0x402 => [0x452],
1089 0x403 => [0x453],
1090 0x404 => [0x454],
1091 0x405 => [0x455],
1092 0x406 => [0x456],
1093 0x407 => [0x457],
1094 0x408 => [0x458],
1095 0x409 => [0x459],
1096 0x40A => [0x45A],
1097 0x40B => [0x45B],
1098 0x40C => [0x45C],
1099 0x40D => [0x45D],
1100 0x40E => [0x45E],
1101 0x40F => [0x45F],
1102 0x410 => [0x430],
1103 0x411 => [0x431],
1104 0x412 => [0x432],
1105 0x413 => [0x433],
1106 0x414 => [0x434],
1107 0x415 => [0x435],
1108 0x416 => [0x436],
1109 0x417 => [0x437],
1110 0x418 => [0x438],
1111 0x419 => [0x439],
1112 0x41A => [0x43A],
1113 0x41B => [0x43B],
1114 0x41C => [0x43C],
1115 0x41D => [0x43D],
1116 0x41E => [0x43E],
1117 0x41F => [0x43F],
1118 0x420 => [0x440],
1119 0x421 => [0x441],
1120 0x422 => [0x442],
1121 0x423 => [0x443],
1122 0x424 => [0x444],
1123 0x425 => [0x445],
1124 0x426 => [0x446],
1125 0x427 => [0x447],
1126 0x428 => [0x448],
1127 0x429 => [0x449],
1128 0x42A => [0x44A],
1129 0x42B => [0x44B],
1130 0x42C => [0x44C],
1131 0x42D => [0x44D],
1132 0x42E => [0x44E],
1133 0x42F => [0x44F],
1134 0x460 => [0x461],
1135 0x462 => [0x463],
1136 0x464 => [0x465],
1137 0x466 => [0x467],
1138 0x468 => [0x469],
1139 0x46A => [0x46B],
1140 0x46C => [0x46D],
1141 0x46E => [0x46F],
1142 0x470 => [0x471],
1143 0x472 => [0x473],
1144 0x474 => [0x475],
1145 0x476 => [0x477],
1146 0x478 => [0x479],
1147 0x47A => [0x47B],
1148 0x47C => [0x47D],
1149 0x47E => [0x47F],
1150 0x480 => [0x481],
1151 0x48A => [0x48B],
1152 0x48C => [0x48D],
1153 0x48E => [0x48F],
1154 0x490 => [0x491],
1155 0x492 => [0x493],
1156 0x494 => [0x495],
1157 0x496 => [0x497],
1158 0x498 => [0x499],
1159 0x49A => [0x49B],
1160 0x49C => [0x49D],
1161 0x49E => [0x49F],
1162 0x4A0 => [0x4A1],
1163 0x4A2 => [0x4A3],
1164 0x4A4 => [0x4A5],
1165 0x4A6 => [0x4A7],
1166 0x4A8 => [0x4A9],
1167 0x4AA => [0x4AB],
1168 0x4AC => [0x4AD],
1169 0x4AE => [0x4AF],
1170 0x4B0 => [0x4B1],
1171 0x4B2 => [0x4B3],
1172 0x4B4 => [0x4B5],
1173 0x4B6 => [0x4B7],
1174 0x4B8 => [0x4B9],
1175 0x4BA => [0x4BB],
1176 0x4BC => [0x4BD],
1177 0x4BE => [0x4BF],
1178 0x4C1 => [0x4C2],
1179 0x4C3 => [0x4C4],
1180 0x4C5 => [0x4C6],
1181 0x4C7 => [0x4C8],
1182 0x4C9 => [0x4CA],
1183 0x4CB => [0x4CC],
1184 0x4CD => [0x4CE],
1185 0x4D0 => [0x4D1],
1186 0x4D2 => [0x4D3],
1187 0x4D4 => [0x4D5],
1188 0x4D6 => [0x4D7],
1189 0x4D8 => [0x4D9],
1190 0x4DA => [0x4DB],
1191 0x4DC => [0x4DD],
1192 0x4DE => [0x4DF],
1193 0x4E0 => [0x4E1],
1194 0x4E2 => [0x4E3],
1195 0x4E4 => [0x4E5],
1196 0x4E6 => [0x4E7],
1197 0x4E8 => [0x4E9],
1198 0x4EA => [0x4EB],
1199 0x4EC => [0x4ED],
1200 0x4EE => [0x4EF],
1201 0x4F0 => [0x4F1],
1202 0x4F2 => [0x4F3],
1203 0x4F4 => [0x4F5],
1204 0x4F8 => [0x4F9],
1205 0x500 => [0x501],
1206 0x502 => [0x503],
1207 0x504 => [0x505],
1208 0x506 => [0x507],
1209 0x508 => [0x509],
1210 0x50A => [0x50B],
1211 0x50C => [0x50D],
1212 0x50E => [0x50F],
1213 0x531 => [0x561],
1214 0x532 => [0x562],
1215 0x533 => [0x563],
1216 0x534 => [0x564],
1217 0x535 => [0x565],
1218 0x536 => [0x566],
1219 0x537 => [0x567],
1220 0x538 => [0x568],
1221 0x539 => [0x569],
1222 0x53A => [0x56A],
1223 0x53B => [0x56B],
1224 0x53C => [0x56C],
1225 0x53D => [0x56D],
1226 0x53E => [0x56E],
1227 0x53F => [0x56F],
1228 0x540 => [0x570],
1229 0x541 => [0x571],
1230 0x542 => [0x572],
1231 0x543 => [0x573],
1232 0x544 => [0x574],
1233 0x545 => [0x575],
1234 0x546 => [0x576],
1235 0x547 => [0x577],
1236 0x548 => [0x578],
1237 0x549 => [0x579],
1238 0x54A => [0x57A],
1239 0x54B => [0x57B],
1240 0x54C => [0x57C],
1241 0x54D => [0x57D],
1242 0x54E => [0x57E],
1243 0x54F => [0x57F],
1244 0x550 => [0x580],
1245 0x551 => [0x581],
1246 0x552 => [0x582],
1247 0x553 => [0x583],
1248 0x554 => [0x584],
1249 0x555 => [0x585],
1250 0x556 => [0x586],
1251 0x587 => [0x565, 0x582],
1252 0xE33 => [0xE4D, 0xE32],
1253 0x1E00 => [0x1E01],
1254 0x1E02 => [0x1E03],
1255 0x1E04 => [0x1E05],
1256 0x1E06 => [0x1E07],
1257 0x1E08 => [0x1E09],
1258 0x1E0A => [0x1E0B],
1259 0x1E0C => [0x1E0D],
1260 0x1E0E => [0x1E0F],
1261 0x1E10 => [0x1E11],
1262 0x1E12 => [0x1E13],
1263 0x1E14 => [0x1E15],
1264 0x1E16 => [0x1E17],
1265 0x1E18 => [0x1E19],
1266 0x1E1A => [0x1E1B],
1267 0x1E1C => [0x1E1D],
1268 0x1E1E => [0x1E1F],
1269 0x1E20 => [0x1E21],
1270 0x1E22 => [0x1E23],
1271 0x1E24 => [0x1E25],
1272 0x1E26 => [0x1E27],
1273 0x1E28 => [0x1E29],
1274 0x1E2A => [0x1E2B],
1275 0x1E2C => [0x1E2D],
1276 0x1E2E => [0x1E2F],
1277 0x1E30 => [0x1E31],
1278 0x1E32 => [0x1E33],
1279 0x1E34 => [0x1E35],
1280 0x1E36 => [0x1E37],
1281 0x1E38 => [0x1E39],
1282 0x1E3A => [0x1E3B],
1283 0x1E3C => [0x1E3D],
1284 0x1E3E => [0x1E3F],
1285 0x1E40 => [0x1E41],
1286 0x1E42 => [0x1E43],
1287 0x1E44 => [0x1E45],
1288 0x1E46 => [0x1E47],
1289 0x1E48 => [0x1E49],
1290 0x1E4A => [0x1E4B],
1291 0x1E4C => [0x1E4D],
1292 0x1E4E => [0x1E4F],
1293 0x1E50 => [0x1E51],
1294 0x1E52 => [0x1E53],
1295 0x1E54 => [0x1E55],
1296 0x1E56 => [0x1E57],
1297 0x1E58 => [0x1E59],
1298 0x1E5A => [0x1E5B],
1299 0x1E5C => [0x1E5D],
1300 0x1E5E => [0x1E5F],
1301 0x1E60 => [0x1E61],
1302 0x1E62 => [0x1E63],
1303 0x1E64 => [0x1E65],
1304 0x1E66 => [0x1E67],
1305 0x1E68 => [0x1E69],
1306 0x1E6A => [0x1E6B],
1307 0x1E6C => [0x1E6D],
1308 0x1E6E => [0x1E6F],
1309 0x1E70 => [0x1E71],
1310 0x1E72 => [0x1E73],
1311 0x1E74 => [0x1E75],
1312 0x1E76 => [0x1E77],
1313 0x1E78 => [0x1E79],
1314 0x1E7A => [0x1E7B],
1315 0x1E7C => [0x1E7D],
1316 0x1E7E => [0x1E7F],
1317 0x1E80 => [0x1E81],
1318 0x1E82 => [0x1E83],
1319 0x1E84 => [0x1E85],
1320 0x1E86 => [0x1E87],
1321 0x1E88 => [0x1E89],
1322 0x1E8A => [0x1E8B],
1323 0x1E8C => [0x1E8D],
1324 0x1E8E => [0x1E8F],
1325 0x1E90 => [0x1E91],
1326 0x1E92 => [0x1E93],
1327 0x1E94 => [0x1E95],
1328 0x1E96 => [0x68, 0x331],
1329 0x1E97 => [0x74, 0x308],
1330 0x1E98 => [0x77, 0x30A],
1331 0x1E99 => [0x79, 0x30A],
1332 0x1E9A => [0x61, 0x2BE],
1333 0x1E9B => [0x1E61],
1334 0x1EA0 => [0x1EA1],
1335 0x1EA2 => [0x1EA3],
1336 0x1EA4 => [0x1EA5],
1337 0x1EA6 => [0x1EA7],
1338 0x1EA8 => [0x1EA9],
1339 0x1EAA => [0x1EAB],
1340 0x1EAC => [0x1EAD],
1341 0x1EAE => [0x1EAF],
1342 0x1EB0 => [0x1EB1],
1343 0x1EB2 => [0x1EB3],
1344 0x1EB4 => [0x1EB5],
1345 0x1EB6 => [0x1EB7],
1346 0x1EB8 => [0x1EB9],
1347 0x1EBA => [0x1EBB],
1348 0x1EBC => [0x1EBD],
1349 0x1EBE => [0x1EBF],
1350 0x1EC0 => [0x1EC1],
1351 0x1EC2 => [0x1EC3],
1352 0x1EC4 => [0x1EC5],
1353 0x1EC6 => [0x1EC7],
1354 0x1EC8 => [0x1EC9],
1355 0x1ECA => [0x1ECB],
1356 0x1ECC => [0x1ECD],
1357 0x1ECE => [0x1ECF],
1358 0x1ED0 => [0x1ED1],
1359 0x1ED2 => [0x1ED3],
1360 0x1ED4 => [0x1ED5],
1361 0x1ED6 => [0x1ED7],
1362 0x1ED8 => [0x1ED9],
1363 0x1EDA => [0x1EDB],
1364 0x1EDC => [0x1EDD],
1365 0x1EDE => [0x1EDF],
1366 0x1EE0 => [0x1EE1],
1367 0x1EE2 => [0x1EE3],
1368 0x1EE4 => [0x1EE5],
1369 0x1EE6 => [0x1EE7],
1370 0x1EE8 => [0x1EE9],
1371 0x1EEA => [0x1EEB],
1372 0x1EEC => [0x1EED],
1373 0x1EEE => [0x1EEF],
1374 0x1EF0 => [0x1EF1],
1375 0x1EF2 => [0x1EF3],
1376 0x1EF4 => [0x1EF5],
1377 0x1EF6 => [0x1EF7],
1378 0x1EF8 => [0x1EF9],
1379 0x1F08 => [0x1F00],
1380 0x1F09 => [0x1F01],
1381 0x1F0A => [0x1F02],
1382 0x1F0B => [0x1F03],
1383 0x1F0C => [0x1F04],
1384 0x1F0D => [0x1F05],
1385 0x1F0E => [0x1F06],
1386 0x1F0F => [0x1F07],
1387 0x1F18 => [0x1F10],
1388 0x1F19 => [0x1F11],
1389 0x1F1A => [0x1F12],
1390 0x1F1B => [0x1F13],
1391 0x1F1C => [0x1F14],
1392 0x1F1D => [0x1F15],
1393 0x1F28 => [0x1F20],
1394 0x1F29 => [0x1F21],
1395 0x1F2A => [0x1F22],
1396 0x1F2B => [0x1F23],
1397 0x1F2C => [0x1F24],
1398 0x1F2D => [0x1F25],
1399 0x1F2E => [0x1F26],
1400 0x1F2F => [0x1F27],
1401 0x1F38 => [0x1F30],
1402 0x1F39 => [0x1F31],
1403 0x1F3A => [0x1F32],
1404 0x1F3B => [0x1F33],
1405 0x1F3C => [0x1F34],
1406 0x1F3D => [0x1F35],
1407 0x1F3E => [0x1F36],
1408 0x1F3F => [0x1F37],
1409 0x1F48 => [0x1F40],
1410 0x1F49 => [0x1F41],
1411 0x1F4A => [0x1F42],
1412 0x1F4B => [0x1F43],
1413 0x1F4C => [0x1F44],
1414 0x1F4D => [0x1F45],
1415 0x1F50 => [0x3C5, 0x313],
1416 0x1F52 => [0x3C5, 0x313, 0x300],
1417 0x1F54 => [0x3C5, 0x313, 0x301],
1418 0x1F56 => [0x3C5, 0x313, 0x342],
1419 0x1F59 => [0x1F51],
1420 0x1F5B => [0x1F53],
1421 0x1F5D => [0x1F55],
1422 0x1F5F => [0x1F57],
1423 0x1F68 => [0x1F60],
1424 0x1F69 => [0x1F61],
1425 0x1F6A => [0x1F62],
1426 0x1F6B => [0x1F63],
1427 0x1F6C => [0x1F64],
1428 0x1F6D => [0x1F65],
1429 0x1F6E => [0x1F66],
1430 0x1F6F => [0x1F67],
1431 0x1F80 => [0x1F00, 0x3B9],
1432 0x1F81 => [0x1F01, 0x3B9],
1433 0x1F82 => [0x1F02, 0x3B9],
1434 0x1F83 => [0x1F03, 0x3B9],
1435 0x1F84 => [0x1F04, 0x3B9],
1436 0x1F85 => [0x1F05, 0x3B9],
1437 0x1F86 => [0x1F06, 0x3B9],
1438 0x1F87 => [0x1F07, 0x3B9],
1439 0x1F88 => [0x1F00, 0x3B9],
1440 0x1F89 => [0x1F01, 0x3B9],
1441 0x1F8A => [0x1F02, 0x3B9],
1442 0x1F8B => [0x1F03, 0x3B9],
1443 0x1F8C => [0x1F04, 0x3B9],
1444 0x1F8D => [0x1F05, 0x3B9],
1445 0x1F8E => [0x1F06, 0x3B9],
1446 0x1F8F => [0x1F07, 0x3B9],
1447 0x1F90 => [0x1F20, 0x3B9],
1448 0x1F91 => [0x1F21, 0x3B9],
1449 0x1F92 => [0x1F22, 0x3B9],
1450 0x1F93 => [0x1F23, 0x3B9],
1451 0x1F94 => [0x1F24, 0x3B9],
1452 0x1F95 => [0x1F25, 0x3B9],
1453 0x1F96 => [0x1F26, 0x3B9],
1454 0x1F97 => [0x1F27, 0x3B9],
1455 0x1F98 => [0x1F20, 0x3B9],
1456 0x1F99 => [0x1F21, 0x3B9],
1457 0x1F9A => [0x1F22, 0x3B9],
1458 0x1F9B => [0x1F23, 0x3B9],
1459 0x1F9C => [0x1F24, 0x3B9],
1460 0x1F9D => [0x1F25, 0x3B9],
1461 0x1F9E => [0x1F26, 0x3B9],
1462 0x1F9F => [0x1F27, 0x3B9],
1463 0x1FA0 => [0x1F60, 0x3B9],
1464 0x1FA1 => [0x1F61, 0x3B9],
1465 0x1FA2 => [0x1F62, 0x3B9],
1466 0x1FA3 => [0x1F63, 0x3B9],
1467 0x1FA4 => [0x1F64, 0x3B9],
1468 0x1FA5 => [0x1F65, 0x3B9],
1469 0x1FA6 => [0x1F66, 0x3B9],
1470 0x1FA7 => [0x1F67, 0x3B9],
1471 0x1FA8 => [0x1F60, 0x3B9],
1472 0x1FA9 => [0x1F61, 0x3B9],
1473 0x1FAA => [0x1F62, 0x3B9],
1474 0x1FAB => [0x1F63, 0x3B9],
1475 0x1FAC => [0x1F64, 0x3B9],
1476 0x1FAD => [0x1F65, 0x3B9],
1477 0x1FAE => [0x1F66, 0x3B9],
1478 0x1FAF => [0x1F67, 0x3B9],
1479 0x1FB2 => [0x1F70, 0x3B9],
1480 0x1FB3 => [0x3B1, 0x3B9],
1481 0x1FB4 => [0x3AC, 0x3B9],
1482 0x1FB6 => [0x3B1, 0x342],
1483 0x1FB7 => [0x3B1, 0x342, 0x3B9],
1484 0x1FB8 => [0x1FB0],
1485 0x1FB9 => [0x1FB1],
1486 0x1FBA => [0x1F70],
1487 0x1FBB => [0x1F71],
1488 0x1FBC => [0x3B1, 0x3B9],
1489 0x1FBE => [0x3B9],
1490 0x1FC2 => [0x1F74, 0x3B9],
1491 0x1FC3 => [0x3B7, 0x3B9],
1492 0x1FC4 => [0x3AE, 0x3B9],
1493 0x1FC6 => [0x3B7, 0x342],
1494 0x1FC7 => [0x3B7, 0x342, 0x3B9],
1495 0x1FC8 => [0x1F72],
1496 0x1FC9 => [0x1F73],
1497 0x1FCA => [0x1F74],
1498 0x1FCB => [0x1F75],
1499 0x1FCC => [0x3B7, 0x3B9],
1500 0x1FD2 => [0x3B9, 0x308, 0x300],
1501 0x1FD3 => [0x3B9, 0x308, 0x301],
1502 0x1FD6 => [0x3B9, 0x342],
1503 0x1FD7 => [0x3B9, 0x308, 0x342],
1504 0x1FD8 => [0x1FD0],
1505 0x1FD9 => [0x1FD1],
1506 0x1FDA => [0x1F76],
1507 0x1FDB => [0x1F77],
1508 0x1FE2 => [0x3C5, 0x308, 0x300],
1509 0x1FE3 => [0x3C5, 0x308, 0x301],
1510 0x1FE4 => [0x3C1, 0x313],
1511 0x1FE6 => [0x3C5, 0x342],
1512 0x1FE7 => [0x3C5, 0x308, 0x342],
1513 0x1FE8 => [0x1FE0],
1514 0x1FE9 => [0x1FE1],
1515 0x1FEA => [0x1F7A],
1516 0x1FEB => [0x1F7B],
1517 0x1FEC => [0x1FE5],
1518 0x1FF2 => [0x1F7C, 0x3B9],
1519 0x1FF3 => [0x3C9, 0x3B9],
1520 0x1FF4 => [0x3CE, 0x3B9],
1521 0x1FF6 => [0x3C9, 0x342],
1522 0x1FF7 => [0x3C9, 0x342, 0x3B9],
1523 0x1FF8 => [0x1F78],
1524 0x1FF9 => [0x1F79],
1525 0x1FFA => [0x1F7C],
1526 0x1FFB => [0x1F7D],
1527 0x1FFC => [0x3C9, 0x3B9],
1528 0x20A8 => [0x72, 0x73],
1529 0x2102 => [0x63],
1530 0x2103 => [0xB0, 0x63],
1531 0x2107 => [0x25B],
1532 0x2109 => [0xB0, 0x66],
1533 0x210B => [0x68],
1534 0x210C => [0x68],
1535 0x210D => [0x68],
1536 0x2110 => [0x69],
1537 0x2111 => [0x69],
1538 0x2112 => [0x6C],
1539 0x2115 => [0x6E],
1540 0x2116 => [0x6E, 0x6F],
1541 0x2119 => [0x70],
1542 0x211A => [0x71],
1543 0x211B => [0x72],
1544 0x211C => [0x72],
1545 0x211D => [0x72],
1546 0x2120 => [0x73, 0x6D],
1547 0x2121 => [0x74, 0x65, 0x6C],
1548 0x2122 => [0x74, 0x6D],
1549 0x2124 => [0x7A],
1550 0x2126 => [0x3C9],
1551 0x2128 => [0x7A],
1552 0x212A => [0x6B],
1553 0x212B => [0xE5],
1554 0x212C => [0x62],
1555 0x212D => [0x63],
1556 0x2130 => [0x65],
1557 0x2131 => [0x66],
1558 0x2133 => [0x6D],
1559 0x213E => [0x3B3],
1560 0x213F => [0x3C0],
1561 0x2145 => [0x64],
1562 0x2160 => [0x2170],
1563 0x2161 => [0x2171],
1564 0x2162 => [0x2172],
1565 0x2163 => [0x2173],
1566 0x2164 => [0x2174],
1567 0x2165 => [0x2175],
1568 0x2166 => [0x2176],
1569 0x2167 => [0x2177],
1570 0x2168 => [0x2178],
1571 0x2169 => [0x2179],
1572 0x216A => [0x217A],
1573 0x216B => [0x217B],
1574 0x216C => [0x217C],
1575 0x216D => [0x217D],
1576 0x216E => [0x217E],
1577 0x216F => [0x217F],
1578 0x24B6 => [0x24D0],
1579 0x24B7 => [0x24D1],
1580 0x24B8 => [0x24D2],
1581 0x24B9 => [0x24D3],
1582 0x24BA => [0x24D4],
1583 0x24BB => [0x24D5],
1584 0x24BC => [0x24D6],
1585 0x24BD => [0x24D7],
1586 0x24BE => [0x24D8],
1587 0x24BF => [0x24D9],
1588 0x24C0 => [0x24DA],
1589 0x24C1 => [0x24DB],
1590 0x24C2 => [0x24DC],
1591 0x24C3 => [0x24DD],
1592 0x24C4 => [0x24DE],
1593 0x24C5 => [0x24DF],
1594 0x24C6 => [0x24E0],
1595 0x24C7 => [0x24E1],
1596 0x24C8 => [0x24E2],
1597 0x24C9 => [0x24E3],
1598 0x24CA => [0x24E4],
1599 0x24CB => [0x24E5],
1600 0x24CC => [0x24E6],
1601 0x24CD => [0x24E7],
1602 0x24CE => [0x24E8],
1603 0x24CF => [0x24E9],
1604 0x3371 => [0x68, 0x70, 0x61],
1605 0x3373 => [0x61, 0x75],
1606 0x3375 => [0x6F, 0x76],
1607 0x3380 => [0x70, 0x61],
1608 0x3381 => [0x6E, 0x61],
1609 0x3382 => [0x3BC, 0x61],
1610 0x3383 => [0x6D, 0x61],
1611 0x3384 => [0x6B, 0x61],
1612 0x3385 => [0x6B, 0x62],
1613 0x3386 => [0x6D, 0x62],
1614 0x3387 => [0x67, 0x62],
1615 0x338A => [0x70, 0x66],
1616 0x338B => [0x6E, 0x66],
1617 0x338C => [0x3BC, 0x66],
1618 0x3390 => [0x68, 0x7A],
1619 0x3391 => [0x6B, 0x68, 0x7A],
1620 0x3392 => [0x6D, 0x68, 0x7A],
1621 0x3393 => [0x67, 0x68, 0x7A],
1622 0x3394 => [0x74, 0x68, 0x7A],
1623 0x33A9 => [0x70, 0x61],
1624 0x33AA => [0x6B, 0x70, 0x61],
1625 0x33AB => [0x6D, 0x70, 0x61],
1626 0x33AC => [0x67, 0x70, 0x61],
1627 0x33B4 => [0x70, 0x76],
1628 0x33B5 => [0x6E, 0x76],
1629 0x33B6 => [0x3BC, 0x76],
1630 0x33B7 => [0x6D, 0x76],
1631 0x33B8 => [0x6B, 0x76],
1632 0x33B9 => [0x6D, 0x76],
1633 0x33BA => [0x70, 0x77],
1634 0x33BB => [0x6E, 0x77],
1635 0x33BC => [0x3BC, 0x77],
1636 0x33BD => [0x6D, 0x77],
1637 0x33BE => [0x6B, 0x77],
1638 0x33BF => [0x6D, 0x77],
1639 0x33C0 => [0x6B, 0x3C9],
1640 0x33C1 => [0x6D, 0x3C9] /*
1641 ,0x33C2 => array(0x61, 0x2E, 0x6D, 0x2E) */,
1642 0x33C3 => [0x62, 0x71],
1643 0x33C6 => [0x63, 0x2215, 0x6B, 0x67],
1644 0x33C7 => [0x63, 0x6F, 0x2E],
1645 0x33C8 => [0x64, 0x62],
1646 0x33C9 => [0x67, 0x79],
1647 0x33CB => [0x68, 0x70],
1648 0x33CD => [0x6B, 0x6B],
1649 0x33CE => [0x6B, 0x6D],
1650 0x33D7 => [0x70, 0x68],
1651 0x33D9 => [0x70, 0x70, 0x6D],
1652 0x33DA => [0x70, 0x72],
1653 0x33DC => [0x73, 0x76],
1654 0x33DD => [0x77, 0x62],
1655 0xFB00 => [0x66, 0x66],
1656 0xFB01 => [0x66, 0x69],
1657 0xFB02 => [0x66, 0x6C],
1658 0xFB03 => [0x66, 0x66, 0x69],
1659 0xFB04 => [0x66, 0x66, 0x6C],
1660 0xFB05 => [0x73, 0x74],
1661 0xFB06 => [0x73, 0x74],
1662 0xFB13 => [0x574, 0x576],
1663 0xFB14 => [0x574, 0x565],
1664 0xFB15 => [0x574, 0x56B],
1665 0xFB16 => [0x57E, 0x576],
1666 0xFB17 => [0x574, 0x56D],
1667 0xFF21 => [0xFF41],
1668 0xFF22 => [0xFF42],
1669 0xFF23 => [0xFF43],
1670 0xFF24 => [0xFF44],
1671 0xFF25 => [0xFF45],
1672 0xFF26 => [0xFF46],
1673 0xFF27 => [0xFF47],
1674 0xFF28 => [0xFF48],
1675 0xFF29 => [0xFF49],
1676 0xFF2A => [0xFF4A],
1677 0xFF2B => [0xFF4B],
1678 0xFF2C => [0xFF4C],
1679 0xFF2D => [0xFF4D],
1680 0xFF2E => [0xFF4E],
1681 0xFF2F => [0xFF4F],
1682 0xFF30 => [0xFF50],
1683 0xFF31 => [0xFF51],
1684 0xFF32 => [0xFF52],
1685 0xFF33 => [0xFF53],
1686 0xFF34 => [0xFF54],
1687 0xFF35 => [0xFF55],
1688 0xFF36 => [0xFF56],
1689 0xFF37 => [0xFF57],
1690 0xFF38 => [0xFF58],
1691 0xFF39 => [0xFF59],
1692 0xFF3A => [0xFF5A],
1693 0x10400 => [0x10428],
1694 0x10401 => [0x10429],
1695 0x10402 => [0x1042A],
1696 0x10403 => [0x1042B],
1697 0x10404 => [0x1042C],
1698 0x10405 => [0x1042D],
1699 0x10406 => [0x1042E],
1700 0x10407 => [0x1042F],
1701 0x10408 => [0x10430],
1702 0x10409 => [0x10431],
1703 0x1040A => [0x10432],
1704 0x1040B => [0x10433],
1705 0x1040C => [0x10434],
1706 0x1040D => [0x10435],
1707 0x1040E => [0x10436],
1708 0x1040F => [0x10437],
1709 0x10410 => [0x10438],
1710 0x10411 => [0x10439],
1711 0x10412 => [0x1043A],
1712 0x10413 => [0x1043B],
1713 0x10414 => [0x1043C],
1714 0x10415 => [0x1043D],
1715 0x10416 => [0x1043E],
1716 0x10417 => [0x1043F],
1717 0x10418 => [0x10440],
1718 0x10419 => [0x10441],
1719 0x1041A => [0x10442],
1720 0x1041B => [0x10443],
1721 0x1041C => [0x10444],
1722 0x1041D => [0x10445],
1723 0x1041E => [0x10446],
1724 0x1041F => [0x10447],
1725 0x10420 => [0x10448],
1726 0x10421 => [0x10449],
1727 0x10422 => [0x1044A],
1728 0x10423 => [0x1044B],
1729 0x10424 => [0x1044C],
1730 0x10425 => [0x1044D],
1731 0x1D400 => [0x61],
1732 0x1D401 => [0x62],
1733 0x1D402 => [0x63],
1734 0x1D403 => [0x64],
1735 0x1D404 => [0x65],
1736 0x1D405 => [0x66],
1737 0x1D406 => [0x67],
1738 0x1D407 => [0x68],
1739 0x1D408 => [0x69],
1740 0x1D409 => [0x6A],
1741 0x1D40A => [0x6B],
1742 0x1D40B => [0x6C],
1743 0x1D40C => [0x6D],
1744 0x1D40D => [0x6E],
1745 0x1D40E => [0x6F],
1746 0x1D40F => [0x70],
1747 0x1D410 => [0x71],
1748 0x1D411 => [0x72],
1749 0x1D412 => [0x73],
1750 0x1D413 => [0x74],
1751 0x1D414 => [0x75],
1752 0x1D415 => [0x76],
1753 0x1D416 => [0x77],
1754 0x1D417 => [0x78],
1755 0x1D418 => [0x79],
1756 0x1D419 => [0x7A],
1757 0x1D434 => [0x61],
1758 0x1D435 => [0x62],
1759 0x1D436 => [0x63],
1760 0x1D437 => [0x64],
1761 0x1D438 => [0x65],
1762 0x1D439 => [0x66],
1763 0x1D43A => [0x67],
1764 0x1D43B => [0x68],
1765 0x1D43C => [0x69],
1766 0x1D43D => [0x6A],
1767 0x1D43E => [0x6B],
1768 0x1D43F => [0x6C],
1769 0x1D440 => [0x6D],
1770 0x1D441 => [0x6E],
1771 0x1D442 => [0x6F],
1772 0x1D443 => [0x70],
1773 0x1D444 => [0x71],
1774 0x1D445 => [0x72],
1775 0x1D446 => [0x73],
1776 0x1D447 => [0x74],
1777 0x1D448 => [0x75],
1778 0x1D449 => [0x76],
1779 0x1D44A => [0x77],
1780 0x1D44B => [0x78],
1781 0x1D44C => [0x79],
1782 0x1D44D => [0x7A],
1783 0x1D468 => [0x61],
1784 0x1D469 => [0x62],
1785 0x1D46A => [0x63],
1786 0x1D46B => [0x64],
1787 0x1D46C => [0x65],
1788 0x1D46D => [0x66],
1789 0x1D46E => [0x67],
1790 0x1D46F => [0x68],
1791 0x1D470 => [0x69],
1792 0x1D471 => [0x6A],
1793 0x1D472 => [0x6B],
1794 0x1D473 => [0x6C],
1795 0x1D474 => [0x6D],
1796 0x1D475 => [0x6E],
1797 0x1D476 => [0x6F],
1798 0x1D477 => [0x70],
1799 0x1D478 => [0x71],
1800 0x1D479 => [0x72],
1801 0x1D47A => [0x73],
1802 0x1D47B => [0x74],
1803 0x1D47C => [0x75],
1804 0x1D47D => [0x76],
1805 0x1D47E => [0x77],
1806 0x1D47F => [0x78],
1807 0x1D480 => [0x79],
1808 0x1D481 => [0x7A],
1809 0x1D49C => [0x61],
1810 0x1D49E => [0x63],
1811 0x1D49F => [0x64],
1812 0x1D4A2 => [0x67],
1813 0x1D4A5 => [0x6A],
1814 0x1D4A6 => [0x6B],
1815 0x1D4A9 => [0x6E],
1816 0x1D4AA => [0x6F],
1817 0x1D4AB => [0x70],
1818 0x1D4AC => [0x71],
1819 0x1D4AE => [0x73],
1820 0x1D4AF => [0x74],
1821 0x1D4B0 => [0x75],
1822 0x1D4B1 => [0x76],
1823 0x1D4B2 => [0x77],
1824 0x1D4B3 => [0x78],
1825 0x1D4B4 => [0x79],
1826 0x1D4B5 => [0x7A],
1827 0x1D4D0 => [0x61],
1828 0x1D4D1 => [0x62],
1829 0x1D4D2 => [0x63],
1830 0x1D4D3 => [0x64],
1831 0x1D4D4 => [0x65],
1832 0x1D4D5 => [0x66],
1833 0x1D4D6 => [0x67],
1834 0x1D4D7 => [0x68],
1835 0x1D4D8 => [0x69],
1836 0x1D4D9 => [0x6A],
1837 0x1D4DA => [0x6B],
1838 0x1D4DB => [0x6C],
1839 0x1D4DC => [0x6D],
1840 0x1D4DD => [0x6E],
1841 0x1D4DE => [0x6F],
1842 0x1D4DF => [0x70],
1843 0x1D4E0 => [0x71],
1844 0x1D4E1 => [0x72],
1845 0x1D4E2 => [0x73],
1846 0x1D4E3 => [0x74],
1847 0x1D4E4 => [0x75],
1848 0x1D4E5 => [0x76],
1849 0x1D4E6 => [0x77],
1850 0x1D4E7 => [0x78],
1851 0x1D4E8 => [0x79],
1852 0x1D4E9 => [0x7A],
1853 0x1D504 => [0x61],
1854 0x1D505 => [0x62],
1855 0x1D507 => [0x64],
1856 0x1D508 => [0x65],
1857 0x1D509 => [0x66],
1858 0x1D50A => [0x67],
1859 0x1D50D => [0x6A],
1860 0x1D50E => [0x6B],
1861 0x1D50F => [0x6C],
1862 0x1D510 => [0x6D],
1863 0x1D511 => [0x6E],
1864 0x1D512 => [0x6F],
1865 0x1D513 => [0x70],
1866 0x1D514 => [0x71],
1867 0x1D516 => [0x73],
1868 0x1D517 => [0x74],
1869 0x1D518 => [0x75],
1870 0x1D519 => [0x76],
1871 0x1D51A => [0x77],
1872 0x1D51B => [0x78],
1873 0x1D51C => [0x79],
1874 0x1D538 => [0x61],
1875 0x1D539 => [0x62],
1876 0x1D53B => [0x64],
1877 0x1D53C => [0x65],
1878 0x1D53D => [0x66],
1879 0x1D53E => [0x67],
1880 0x1D540 => [0x69],
1881 0x1D541 => [0x6A],
1882 0x1D542 => [0x6B],
1883 0x1D543 => [0x6C],
1884 0x1D544 => [0x6D],
1885 0x1D546 => [0x6F],
1886 0x1D54A => [0x73],
1887 0x1D54B => [0x74],
1888 0x1D54C => [0x75],
1889 0x1D54D => [0x76],
1890 0x1D54E => [0x77],
1891 0x1D54F => [0x78],
1892 0x1D550 => [0x79],
1893 0x1D56C => [0x61],
1894 0x1D56D => [0x62],
1895 0x1D56E => [0x63],
1896 0x1D56F => [0x64],
1897 0x1D570 => [0x65],
1898 0x1D571 => [0x66],
1899 0x1D572 => [0x67],
1900 0x1D573 => [0x68],
1901 0x1D574 => [0x69],
1902 0x1D575 => [0x6A],
1903 0x1D576 => [0x6B],
1904 0x1D577 => [0x6C],
1905 0x1D578 => [0x6D],
1906 0x1D579 => [0x6E],
1907 0x1D57A => [0x6F],
1908 0x1D57B => [0x70],
1909 0x1D57C => [0x71],
1910 0x1D57D => [0x72],
1911 0x1D57E => [0x73],
1912 0x1D57F => [0x74],
1913 0x1D580 => [0x75],
1914 0x1D581 => [0x76],
1915 0x1D582 => [0x77],
1916 0x1D583 => [0x78],
1917 0x1D584 => [0x79],
1918 0x1D585 => [0x7A],
1919 0x1D5A0 => [0x61],
1920 0x1D5A1 => [0x62],
1921 0x1D5A2 => [0x63],
1922 0x1D5A3 => [0x64],
1923 0x1D5A4 => [0x65],
1924 0x1D5A5 => [0x66],
1925 0x1D5A6 => [0x67],
1926 0x1D5A7 => [0x68],
1927 0x1D5A8 => [0x69],
1928 0x1D5A9 => [0x6A],
1929 0x1D5AA => [0x6B],
1930 0x1D5AB => [0x6C],
1931 0x1D5AC => [0x6D],
1932 0x1D5AD => [0x6E],
1933 0x1D5AE => [0x6F],
1934 0x1D5AF => [0x70],
1935 0x1D5B0 => [0x71],
1936 0x1D5B1 => [0x72],
1937 0x1D5B2 => [0x73],
1938 0x1D5B3 => [0x74],
1939 0x1D5B4 => [0x75],
1940 0x1D5B5 => [0x76],
1941 0x1D5B6 => [0x77],
1942 0x1D5B7 => [0x78],
1943 0x1D5B8 => [0x79],
1944 0x1D5B9 => [0x7A],
1945 0x1D5D4 => [0x61],
1946 0x1D5D5 => [0x62],
1947 0x1D5D6 => [0x63],
1948 0x1D5D7 => [0x64],
1949 0x1D5D8 => [0x65],
1950 0x1D5D9 => [0x66],
1951 0x1D5DA => [0x67],
1952 0x1D5DB => [0x68],
1953 0x1D5DC => [0x69],
1954 0x1D5DD => [0x6A],
1955 0x1D5DE => [0x6B],
1956 0x1D5DF => [0x6C],
1957 0x1D5E0 => [0x6D],
1958 0x1D5E1 => [0x6E],
1959 0x1D5E2 => [0x6F],
1960 0x1D5E3 => [0x70],
1961 0x1D5E4 => [0x71],
1962 0x1D5E5 => [0x72],
1963 0x1D5E6 => [0x73],
1964 0x1D5E7 => [0x74],
1965 0x1D5E8 => [0x75],
1966 0x1D5E9 => [0x76],
1967 0x1D5EA => [0x77],
1968 0x1D5EB => [0x78],
1969 0x1D5EC => [0x79],
1970 0x1D5ED => [0x7A],
1971 0x1D608 => [0x61],
1972 0x1D609 => [0x62],
1973 0x1D60A => [0x63],
1974 0x1D60B => [0x64],
1975 0x1D60C => [0x65],
1976 0x1D60D => [0x66],
1977 0x1D60E => [0x67],
1978 0x1D60F => [0x68],
1979 0x1D610 => [0x69],
1980 0x1D611 => [0x6A],
1981 0x1D612 => [0x6B],
1982 0x1D613 => [0x6C],
1983 0x1D614 => [0x6D],
1984 0x1D615 => [0x6E],
1985 0x1D616 => [0x6F],
1986 0x1D617 => [0x70],
1987 0x1D618 => [0x71],
1988 0x1D619 => [0x72],
1989 0x1D61A => [0x73],
1990 0x1D61B => [0x74],
1991 0x1D61C => [0x75],
1992 0x1D61D => [0x76],
1993 0x1D61E => [0x77],
1994 0x1D61F => [0x78],
1995 0x1D620 => [0x79],
1996 0x1D621 => [0x7A],
1997 0x1D63C => [0x61],
1998 0x1D63D => [0x62],
1999 0x1D63E => [0x63],
2000 0x1D63F => [0x64],
2001 0x1D640 => [0x65],
2002 0x1D641 => [0x66],
2003 0x1D642 => [0x67],
2004 0x1D643 => [0x68],
2005 0x1D644 => [0x69],
2006 0x1D645 => [0x6A],
2007 0x1D646 => [0x6B],
2008 0x1D647 => [0x6C],
2009 0x1D648 => [0x6D],
2010 0x1D649 => [0x6E],
2011 0x1D64A => [0x6F],
2012 0x1D64B => [0x70],
2013 0x1D64C => [0x71],
2014 0x1D64D => [0x72],
2015 0x1D64E => [0x73],
2016 0x1D64F => [0x74],
2017 0x1D650 => [0x75],
2018 0x1D651 => [0x76],
2019 0x1D652 => [0x77],
2020 0x1D653 => [0x78],
2021 0x1D654 => [0x79],
2022 0x1D655 => [0x7A],
2023 0x1D670 => [0x61],
2024 0x1D671 => [0x62],
2025 0x1D672 => [0x63],
2026 0x1D673 => [0x64],
2027 0x1D674 => [0x65],
2028 0x1D675 => [0x66],
2029 0x1D676 => [0x67],
2030 0x1D677 => [0x68],
2031 0x1D678 => [0x69],
2032 0x1D679 => [0x6A],
2033 0x1D67A => [0x6B],
2034 0x1D67B => [0x6C],
2035 0x1D67C => [0x6D],
2036 0x1D67D => [0x6E],
2037 0x1D67E => [0x6F],
2038 0x1D67F => [0x70],
2039 0x1D680 => [0x71],
2040 0x1D681 => [0x72],
2041 0x1D682 => [0x73],
2042 0x1D683 => [0x74],
2043 0x1D684 => [0x75],
2044 0x1D685 => [0x76],
2045 0x1D686 => [0x77],
2046 0x1D687 => [0x78],
2047 0x1D688 => [0x79],
2048 0x1D689 => [0x7A],
2049 0x1D6A8 => [0x3B1],
2050 0x1D6A9 => [0x3B2],
2051 0x1D6AA => [0x3B3],
2052 0x1D6AB => [0x3B4],
2053 0x1D6AC => [0x3B5],
2054 0x1D6AD => [0x3B6],
2055 0x1D6AE => [0x3B7],
2056 0x1D6AF => [0x3B8],
2057 0x1D6B0 => [0x3B9],
2058 0x1D6B1 => [0x3BA],
2059 0x1D6B2 => [0x3BB],
2060 0x1D6B3 => [0x3BC],
2061 0x1D6B4 => [0x3BD],
2062 0x1D6B5 => [0x3BE],
2063 0x1D6B6 => [0x3BF],
2064 0x1D6B7 => [0x3C0],
2065 0x1D6B8 => [0x3C1],
2066 0x1D6B9 => [0x3B8],
2067 0x1D6BA => [0x3C3],
2068 0x1D6BB => [0x3C4],
2069 0x1D6BC => [0x3C5],
2070 0x1D6BD => [0x3C6],
2071 0x1D6BE => [0x3C7],
2072 0x1D6BF => [0x3C8],
2073 0x1D6C0 => [0x3C9],
2074 0x1D6D3 => [0x3C3],
2075 0x1D6E2 => [0x3B1],
2076 0x1D6E3 => [0x3B2],
2077 0x1D6E4 => [0x3B3],
2078 0x1D6E5 => [0x3B4],
2079 0x1D6E6 => [0x3B5],
2080 0x1D6E7 => [0x3B6],
2081 0x1D6E8 => [0x3B7],
2082 0x1D6E9 => [0x3B8],
2083 0x1D6EA => [0x3B9],
2084 0x1D6EB => [0x3BA],
2085 0x1D6EC => [0x3BB],
2086 0x1D6ED => [0x3BC],
2087 0x1D6EE => [0x3BD],
2088 0x1D6EF => [0x3BE],
2089 0x1D6F0 => [0x3BF],
2090 0x1D6F1 => [0x3C0],
2091 0x1D6F2 => [0x3C1],
2092 0x1D6F3 => [0x3B8],
2093 0x1D6F4 => [0x3C3],
2094 0x1D6F5 => [0x3C4],
2095 0x1D6F6 => [0x3C5],
2096 0x1D6F7 => [0x3C6],
2097 0x1D6F8 => [0x3C7],
2098 0x1D6F9 => [0x3C8],
2099 0x1D6FA => [0x3C9],
2100 0x1D70D => [0x3C3],
2101 0x1D71C => [0x3B1],
2102 0x1D71D => [0x3B2],
2103 0x1D71E => [0x3B3],
2104 0x1D71F => [0x3B4],
2105 0x1D720 => [0x3B5],
2106 0x1D721 => [0x3B6],
2107 0x1D722 => [0x3B7],
2108 0x1D723 => [0x3B8],
2109 0x1D724 => [0x3B9],
2110 0x1D725 => [0x3BA],
2111 0x1D726 => [0x3BB],
2112 0x1D727 => [0x3BC],
2113 0x1D728 => [0x3BD],
2114 0x1D729 => [0x3BE],
2115 0x1D72A => [0x3BF],
2116 0x1D72B => [0x3C0],
2117 0x1D72C => [0x3C1],
2118 0x1D72D => [0x3B8],
2119 0x1D72E => [0x3C3],
2120 0x1D72F => [0x3C4],
2121 0x1D730 => [0x3C5],
2122 0x1D731 => [0x3C6],
2123 0x1D732 => [0x3C7],
2124 0x1D733 => [0x3C8],
2125 0x1D734 => [0x3C9],
2126 0x1D747 => [0x3C3],
2127 0x1D756 => [0x3B1],
2128 0x1D757 => [0x3B2],
2129 0x1D758 => [0x3B3],
2130 0x1D759 => [0x3B4],
2131 0x1D75A => [0x3B5],
2132 0x1D75B => [0x3B6],
2133 0x1D75C => [0x3B7],
2134 0x1D75D => [0x3B8],
2135 0x1D75E => [0x3B9],
2136 0x1D75F => [0x3BA],
2137 0x1D760 => [0x3BB],
2138 0x1D761 => [0x3BC],
2139 0x1D762 => [0x3BD],
2140 0x1D763 => [0x3BE],
2141 0x1D764 => [0x3BF],
2142 0x1D765 => [0x3C0],
2143 0x1D766 => [0x3C1],
2144 0x1D767 => [0x3B8],
2145 0x1D768 => [0x3C3],
2146 0x1D769 => [0x3C4],
2147 0x1D76A => [0x3C5],
2148 0x1D76B => [0x3C6],
2149 0x1D76C => [0x3C7],
2150 0x1D76D => [0x3C8],
2151 0x1D76E => [0x3C9],
2152 0x1D781 => [0x3C3],
2153 0x1D790 => [0x3B1],
2154 0x1D791 => [0x3B2],
2155 0x1D792 => [0x3B3],
2156 0x1D793 => [0x3B4],
2157 0x1D794 => [0x3B5],
2158 0x1D795 => [0x3B6],
2159 0x1D796 => [0x3B7],
2160 0x1D797 => [0x3B8],
2161 0x1D798 => [0x3B9],
2162 0x1D799 => [0x3BA],
2163 0x1D79A => [0x3BB],
2164 0x1D79B => [0x3BC],
2165 0x1D79C => [0x3BD],
2166 0x1D79D => [0x3BE],
2167 0x1D79E => [0x3BF],
2168 0x1D79F => [0x3C0],
2169 0x1D7A0 => [0x3C1],
2170 0x1D7A1 => [0x3B8],
2171 0x1D7A2 => [0x3C3],
2172 0x1D7A3 => [0x3C4],
2173 0x1D7A4 => [0x3C5],
2174 0x1D7A5 => [0x3C6],
2175 0x1D7A6 => [0x3C7],
2176 0x1D7A7 => [0x3C8],
2177 0x1D7A8 => [0x3C9],
2178 0x1D7BB => [0x3C3],
2179 0x3F9 => [0x3C3],
2180 0x1D2C => [0x61],
2181 0x1D2D => [0xE6],
2182 0x1D2E => [0x62],
2183 0x1D30 => [0x64],
2184 0x1D31 => [0x65],
2185 0x1D32 => [0x1DD],
2186 0x1D33 => [0x67],
2187 0x1D34 => [0x68],
2188 0x1D35 => [0x69],
2189 0x1D36 => [0x6A],
2190 0x1D37 => [0x6B],
2191 0x1D38 => [0x6C],
2192 0x1D39 => [0x6D],
2193 0x1D3A => [0x6E],
2194 0x1D3C => [0x6F],
2195 0x1D3D => [0x223],
2196 0x1D3E => [0x70],
2197 0x1D3F => [0x72],
2198 0x1D40 => [0x74],
2199 0x1D41 => [0x75],
2200 0x1D42 => [0x77],
2201 0x213B => [0x66, 0x61, 0x78],
2202 0x3250 => [0x70, 0x74, 0x65],
2203 0x32CC => [0x68, 0x67],
2204 0x32CE => [0x65, 0x76],
2205 0x32CF => [0x6C, 0x74, 0x64],
2206 0x337A => [0x69, 0x75],
2207 0x33DE => [0x76, 0x2215, 0x6D],
2208 0x33DF => [0x61, 0x2215, 0x6D],
2209 ],
2210 'norm_combcls' => [
2211 0x334 => 1,
2212 0x335 => 1,
2213 0x336 => 1,
2214 0x337 => 1,
2215 0x338 => 1,
2216 0x93C => 7,
2217 0x9BC => 7,
2218 0xA3C => 7,
2219 0xABC => 7,
2220 0xB3C => 7,
2221 0xCBC => 7,
2222 0x1037 => 7,
2223 0x3099 => 8,
2224 0x309A => 8,
2225 0x94D => 9,
2226 0x9CD => 9,
2227 0xA4D => 9,
2228 0xACD => 9,
2229 0xB4D => 9,
2230 0xBCD => 9,
2231 0xC4D => 9,
2232 0xCCD => 9,
2233 0xD4D => 9,
2234 0xDCA => 9,
2235 0xE3A => 9,
2236 0xF84 => 9,
2237 0x1039 => 9,
2238 0x1714 => 9,
2239 0x1734 => 9,
2240 0x17D2 => 9,
2241 0x5B0 => 10,
2242 0x5B1 => 11,
2243 0x5B2 => 12,
2244 0x5B3 => 13,
2245 0x5B4 => 14,
2246 0x5B5 => 15,
2247 0x5B6 => 16,
2248 0x5B7 => 17,
2249 0x5B8 => 18,
2250 0x5B9 => 19,
2251 0x5BB => 20,
2252 0x5Bc => 21,
2253 0x5BD => 22,
2254 0x5BF => 23,
2255 0x5C1 => 24,
2256 0x5C2 => 25,
2257 0xFB1E => 26,
2258 0x64B => 27,
2259 0x64C => 28,
2260 0x64D => 29,
2261 0x64E => 30,
2262 0x64F => 31,
2263 0x650 => 32,
2264 0x651 => 33,
2265 0x652 => 34,
2266 0x670 => 35,
2267 0x711 => 36,
2268 0xC55 => 84,
2269 0xC56 => 91,
2270 0xE38 => 103,
2271 0xE39 => 103,
2272 0xE48 => 107,
2273 0xE49 => 107,
2274 0xE4A => 107,
2275 0xE4B => 107,
2276 0xEB8 => 118,
2277 0xEB9 => 118,
2278 0xEC8 => 122,
2279 0xEC9 => 122,
2280 0xECA => 122,
2281 0xECB => 122,
2282 0xF71 => 129,
2283 0xF72 => 130,
2284 0xF7A => 130,
2285 0xF7B => 130,
2286 0xF7C => 130,
2287 0xF7D => 130,
2288 0xF80 => 130,
2289 0xF74 => 132,
2290 0x321 => 202,
2291 0x322 => 202,
2292 0x327 => 202,
2293 0x328 => 202,
2294 0x31B => 216,
2295 0xF39 => 216,
2296 0x1D165 => 216,
2297 0x1D166 => 216,
2298 0x1D16E => 216,
2299 0x1D16F => 216,
2300 0x1D170 => 216,
2301 0x1D171 => 216,
2302 0x1D172 => 216,
2303 0x302A => 218,
2304 0x316 => 220,
2305 0x317 => 220,
2306 0x318 => 220,
2307 0x319 => 220,
2308 0x31C => 220,
2309 0x31D => 220,
2310 0x31E => 220,
2311 0x31F => 220,
2312 0x320 => 220,
2313 0x323 => 220,
2314 0x324 => 220,
2315 0x325 => 220,
2316 0x326 => 220,
2317 0x329 => 220,
2318 0x32A => 220,
2319 0x32B => 220,
2320 0x32C => 220,
2321 0x32D => 220,
2322 0x32E => 220,
2323 0x32F => 220,
2324 0x330 => 220,
2325 0x331 => 220,
2326 0x332 => 220,
2327 0x333 => 220,
2328 0x339 => 220,
2329 0x33A => 220,
2330 0x33B => 220,
2331 0x33C => 220,
2332 0x347 => 220,
2333 0x348 => 220,
2334 0x349 => 220,
2335 0x34D => 220,
2336 0x34E => 220,
2337 0x353 => 220,
2338 0x354 => 220,
2339 0x355 => 220,
2340 0x356 => 220,
2341 0x591 => 220,
2342 0x596 => 220,
2343 0x59B => 220,
2344 0x5A3 => 220,
2345 0x5A4 => 220,
2346 0x5A5 => 220,
2347 0x5A6 => 220,
2348 0x5A7 => 220,
2349 0x5AA => 220,
2350 0x655 => 220,
2351 0x656 => 220,
2352 0x6E3 => 220,
2353 0x6EA => 220,
2354 0x6ED => 220,
2355 0x731 => 220,
2356 0x734 => 220,
2357 0x737 => 220,
2358 0x738 => 220,
2359 0x739 => 220,
2360 0x73B => 220,
2361 0x73C => 220,
2362 0x73E => 220,
2363 0x742 => 220,
2364 0x744 => 220,
2365 0x746 => 220,
2366 0x748 => 220,
2367 0x952 => 220,
2368 0xF18 => 220,
2369 0xF19 => 220,
2370 0xF35 => 220,
2371 0xF37 => 220,
2372 0xFC6 => 220,
2373 0x193B => 220,
2374 0x20E8 => 220,
2375 0x1D17B => 220,
2376 0x1D17C => 220,
2377 0x1D17D => 220,
2378 0x1D17E => 220,
2379 0x1D17F => 220,
2380 0x1D180 => 220,
2381 0x1D181 => 220,
2382 0x1D182 => 220,
2383 0x1D18A => 220,
2384 0x1D18B => 220,
2385 0x59A => 222,
2386 0x5AD => 222,
2387 0x1929 => 222,
2388 0x302D => 222,
2389 0x302E => 224,
2390 0x302F => 224,
2391 0x1D16D => 226,
2392 0x5AE => 228,
2393 0x18A9 => 228,
2394 0x302B => 228,
2395 0x300 => 230,
2396 0x301 => 230,
2397 0x302 => 230,
2398 0x303 => 230,
2399 0x304 => 230,
2400 0x305 => 230,
2401 0x306 => 230,
2402 0x307 => 230,
2403 0x308 => 230,
2404 0x309 => 230,
2405 0x30A => 230,
2406 0x30B => 230,
2407 0x30C => 230,
2408 0x30D => 230,
2409 0x30E => 230,
2410 0x30F => 230,
2411 0x310 => 230,
2412 0x311 => 230,
2413 0x312 => 230,
2414 0x313 => 230,
2415 0x314 => 230,
2416 0x33D => 230,
2417 0x33E => 230,
2418 0x33F => 230,
2419 0x340 => 230,
2420 0x341 => 230,
2421 0x342 => 230,
2422 0x343 => 230,
2423 0x344 => 230,
2424 0x346 => 230,
2425 0x34A => 230,
2426 0x34B => 230,
2427 0x34C => 230,
2428 0x350 => 230,
2429 0x351 => 230,
2430 0x352 => 230,
2431 0x357 => 230,
2432 0x363 => 230,
2433 0x364 => 230,
2434 0x365 => 230,
2435 0x366 => 230,
2436 0x367 => 230,
2437 0x368 => 230,
2438 0x369 => 230,
2439 0x36A => 230,
2440 0x36B => 230,
2441 0x36C => 230,
2442 0x36D => 230,
2443 0x36E => 230,
2444 0x36F => 230,
2445 0x483 => 230,
2446 0x484 => 230,
2447 0x485 => 230,
2448 0x486 => 230,
2449 0x592 => 230,
2450 0x593 => 230,
2451 0x594 => 230,
2452 0x595 => 230,
2453 0x597 => 230,
2454 0x598 => 230,
2455 0x599 => 230,
2456 0x59C => 230,
2457 0x59D => 230,
2458 0x59E => 230,
2459 0x59F => 230,
2460 0x5A0 => 230,
2461 0x5A1 => 230,
2462 0x5A8 => 230,
2463 0x5A9 => 230,
2464 0x5AB => 230,
2465 0x5AC => 230,
2466 0x5AF => 230,
2467 0x5C4 => 230,
2468 0x610 => 230,
2469 0x611 => 230,
2470 0x612 => 230,
2471 0x613 => 230,
2472 0x614 => 230,
2473 0x615 => 230,
2474 0x653 => 230,
2475 0x654 => 230,
2476 0x657 => 230,
2477 0x658 => 230,
2478 0x6D6 => 230,
2479 0x6D7 => 230,
2480 0x6D8 => 230,
2481 0x6D9 => 230,
2482 0x6DA => 230,
2483 0x6DB => 230,
2484 0x6DC => 230,
2485 0x6DF => 230,
2486 0x6E0 => 230,
2487 0x6E1 => 230,
2488 0x6E2 => 230,
2489 0x6E4 => 230,
2490 0x6E7 => 230,
2491 0x6E8 => 230,
2492 0x6EB => 230,
2493 0x6EC => 230,
2494 0x730 => 230,
2495 0x732 => 230,
2496 0x733 => 230,
2497 0x735 => 230,
2498 0x736 => 230,
2499 0x73A => 230,
2500 0x73D => 230,
2501 0x73F => 230,
2502 0x740 => 230,
2503 0x741 => 230,
2504 0x743 => 230,
2505 0x745 => 230,
2506 0x747 => 230,
2507 0x749 => 230,
2508 0x74A => 230,
2509 0x951 => 230,
2510 0x953 => 230,
2511 0x954 => 230,
2512 0xF82 => 230,
2513 0xF83 => 230,
2514 0xF86 => 230,
2515 0xF87 => 230,
2516 0x170D => 230,
2517 0x193A => 230,
2518 0x20D0 => 230,
2519 0x20D1 => 230,
2520 0x20D4 => 230,
2521 0x20D5 => 230,
2522 0x20D6 => 230,
2523 0x20D7 => 230,
2524 0x20DB => 230,
2525 0x20DC => 230,
2526 0x20E1 => 230,
2527 0x20E7 => 230,
2528 0x20E9 => 230,
2529 0xFE20 => 230,
2530 0xFE21 => 230,
2531 0xFE22 => 230,
2532 0xFE23 => 230,
2533 0x1D185 => 230,
2534 0x1D186 => 230,
2535 0x1D187 => 230,
2536 0x1D189 => 230,
2537 0x1D188 => 230,
2538 0x1D1AA => 230,
2539 0x1D1AB => 230,
2540 0x1D1AC => 230,
2541 0x1D1AD => 230,
2542 0x315 => 232,
2543 0x31A => 232,
2544 0x302C => 232,
2545 0x35F => 233,
2546 0x362 => 233,
2547 0x35D => 234,
2548 0x35E => 234,
2549 0x360 => 234,
2550 0x361 => 234,
2551 0x345 => 240,
2552 ],
2553 ];
2554 }
2555