summaryrefslogtreecommitdiff
path: root/enc/unicode
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-30 23:57:45 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-30 23:57:45 +0000
commitc39e659263b9a988c39ff97aca3ffde9a482e4e4 (patch)
tree81778db8f4ee13b6e1933a1c88227074b7e87dcf /enc/unicode
parent88eae35862f3b228443f116234cbf09057c361c8 (diff)
case-folding.rb: perfect hash for case folding
* enc/unicode/case-folding.rb (lookup_hash): make perfect hash to lookup case folding table. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enc/unicode')
-rwxr-xr-xenc/unicode/case-folding.rb62
-rw-r--r--enc/unicode/casefold.h1501
2 files changed, 1556 insertions, 7 deletions
diff --git a/enc/unicode/case-folding.rb b/enc/unicode/case-folding.rb
index f1faaeb..0ccc822 100755
--- a/enc/unicode/case-folding.rb
+++ b/enc/unicode/case-folding.rb
@@ -13,21 +13,23 @@ class CaseFolding
end
def print_table_1(dest, data)
- for k, v in data.sort
+ for k, v in data = data.sort
sk = (Array === k and k.length > 1) ? "{#{hex_seq(k)}}" : ("0x%04x" % k)
dest.print(" {#{sk}, {#{v.length}, {#{hex_seq(v)}}}},\n")
end
+ data
end
def print_table(dest, type, data)
dest.print("static const #{type}_Type #{type}_Table[] = {\n")
i = 0
- data.each do |n, d|
+ ret = data.inject([]) do |a, (n, d)|
dest.print("#define #{n} (*(#{type}_Type (*)[#{d.size}])(#{type}_Table+#{i}))\n")
i += d.size
- print_table_1(dest, d)
+ a.concat(print_table_1(dest, d))
end
dest.print("};\n\n")
+ ret
end
end
@@ -76,6 +78,55 @@ class CaseFolding
self
end
+ def lookup_hash(key, type, data)
+ hash = "onigenc_unicode_#{key}_hash"
+ lookup = "onigenc_unicode_#{key}_lookup"
+ gperf = %W"gperf -7 -k1,2,3 -F,-1 -c -j1 -i1 -t -T -E -C -H #{hash} -N #{lookup}"
+ argname = "code"
+ argdecl = "const OnigCodePoint #{argname}"
+ n = 7
+ m = (1 << n) - 1
+ min, max = data.map {|c, *|c}.minmax
+ src = IO.popen(gperf, "r+") {|f|
+ f << "short\n%%\n"
+ data.each_with_index {|(k, _), i|
+ ks = [(k >> n*2) & m, (k >> n) & m, (k) & m].map {|c| "\\x%.2x" % c}.join("")
+ f.printf "\"%s\", ::::/*0x%.4x*/ %d\n", ks, k, i
+ }
+ f << "%%\n"
+ f.close_write
+ f.read
+ }
+ src.sub!(/^(#{hash})\s*\(.*?\).*?\n\{\n(.*)^\}/m) {
+ name = $1
+ body = $2
+ body.gsub!(/\(unsigned char\)str\[(\d+)\]/, "bits_of(#{argname}, \\1)")
+ "#{name}(#{argdecl})\n{\n#{body}}"
+ }
+ src.sub!(/const short *\*\n^(#{lookup})\s*\(.*?\).*?\n\{\n(.*)^\}/m) {
+ name = $1
+ body = $2
+ body.sub!(/\benum\s+\{(\n[ \t]+)/, "\\&MIN_CODE_VALUE = 0x#{min.to_s(16)},\\1""MAX_CODE_VALUE = 0x#{max.to_s(16)},\\1")
+ body.gsub!(/(#{hash})\s*\(.*?\)/, '\1(code)')
+ body.gsub!(/\{"",-1}/, "-1")
+ body.gsub!(/\{"(?:[^"]|\\")+", *::::(.*)\}/, '\1')
+ body.sub!(/(\s+if\s)\(len\b.*\)/) {"#$1(code <= MAX_CODE_VALUE && code >= MIN_CODE_VALUE)"}
+ v = nil
+ body.sub!(/(if\s*\(.*MAX_HASH_VALUE.*\)\n([ \t]*))\{(.*?)\n\2\}/m) {
+ pre = $1
+ indent = $2
+ s = $3
+ s.sub!(/const char *\* *(\w+)( *= *wordlist\[\w+\]).\w+/, 'short \1 = wordlist[key]')
+ v = $1
+ s.sub!(/\bif *\(.*\)/, "if (#{v} >= 0 && code1_equal(#{argname}, #{key}_Table[#{v}].from))")
+ "#{pre}{#{s}\n#{indent}}"
+ }
+ body.sub!(/\b(return\s+&)([^;]+);/, '\1'"#{key}_Table[#{v}].to;")
+ "static const #{type} *\n#{name}(#{argdecl})\n{\n#{body}}"
+ }
+ src
+ end
+
def display(dest)
# print the header
dest.print("/* DO NOT EDIT THIS FILE. */\n")
@@ -85,7 +136,8 @@ class CaseFolding
# CaseFold + CaseFold_Locale
name = "CaseFold_11"
- print_table(dest, name, "CaseFold"=>fold, "CaseFold_Locale"=>fold_locale)
+ data = print_table(dest, name, "CaseFold"=>fold, "CaseFold_Locale"=>fold_locale)
+ dest.print lookup_hash(name, "CodePointList3", data)
# print unfolding data
@@ -102,8 +154,6 @@ class CaseFolding
print_table(dest, name, name=>unfold[2])
# table sizes
- fold_table_size = fold.size + fold_locale.size
- dest.printf("#define FOLD_TABLE_SIZE\t\t%d\n", (fold_table_size * 1.2))
unfold1_table_size = unfold[0].size + unfold_locale[0].size
dest.printf("#define UNFOLD1_TABLE_SIZE\t%d\n", (unfold1_table_size * 1.2))
unfold2_table_size = unfold[1].size + unfold_locale[1].size
diff --git a/enc/unicode/casefold.h b/enc/unicode/casefold.h
index a433a22..fb8d50a 100644
--- a/enc/unicode/casefold.h
+++ b/enc/unicode/casefold.h
@@ -1137,6 +1137,1506 @@ static const CaseFold_11_Type CaseFold_11_Table[] = {
{0x0130, {2, {0x0069, 0x0307}}},
};
+/* C code produced by gperf version 3.0.4 */
+/* Command-line: gperf -7 -k1,2,3 -F,-1 -c -j1 -i1 -t -T -E -C -H onigenc_unicode_CaseFold_11_hash -N onigenc_unicode_CaseFold_11_lookup */
+
+/* maximum key range = 1741, duplicates = 0 */
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__cplusplus) || defined(__GNUC_STDC_INLINE__)
+inline
+#elif defined(__GNUC__)
+__inline
+#endif
+/*ARGSUSED*/
+static unsigned int
+onigenc_unicode_CaseFold_11_hash(const OnigCodePoint code)
+{
+ static const unsigned short asso_values[] =
+ {
+ 20, 359, 4, 197, 8, 1760, 112, 10, 6, 172,
+ 13, 5, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+ 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+ 1760, 1760, 1760, 411, 1760, 1760, 1760, 1760, 1760, 1760,
+ 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+ 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+ 2, 1, 263, 3, 1760, 291, 311, 245, 1287, 269,
+ 540, 82, 574, 350, 1307, 178, 471, 38, 309, 25,
+ 1297, 60, 1326, 104, 494, 165, 1320, 152, 11, 5,
+ 1286, 383, 1262, 363, 828, 783, 608, 210, 1247, 232,
+ 1233, 139, 1215, 126, 1178, 337, 972, 324, 1122, 409,
+ 1092, 397, 1091, 1065, 109, 525, 671, 985, 242, 763,
+ 182, 676, 1157, 649, 1132, 959, 186, 874, 248, 718,
+ 1097, 704, 1028, 539, 1010, 924, 927, 511, 1103, 423,
+ 1032, 490, 1031, 750, 705, 796, 1235, 691, 636, 902,
+ 1200, 466, 287, 890, 47, 809, 224, 969, 159, 947,
+ 21, 665, 8, 450, 206, 630, 5, 736, 86, 606,
+ 195, 572, 470, 560, 196, 841, 107, 1082, 27, 999,
+ 1, 1018, 13, 1147, 69, 1174, 71, 1196, 99, 432,
+ 90, 1070, 48
+ };
+ return asso_values[bits_of(code, 2)+65] + asso_values[bits_of(code, 1)] + asso_values[bits_of(code, 0)];
+}
+
+#ifdef __GNUC__
+__inline
+#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
+#endif
+static const CodePointList3 *
+onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code)
+{
+ enum
+ {
+ MIN_CODE_VALUE = 0x41,
+ MAX_CODE_VALUE = 0x10427,
+ TOTAL_KEYWORDS = 1131,
+ MIN_WORD_LENGTH = 3,
+ MAX_WORD_LENGTH = 3,
+ MIN_HASH_VALUE = 19,
+ MAX_HASH_VALUE = 1759
+ };
+
+ static const short wordlist[] =
+ {
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0x10418*/ 1113,
+ -1, -1, -1, -1,
+ /*0x1ff3*/ 789,
+ /*0x10417*/ 1112,
+ /*0x1e98*/ 596,
+ /*0x1e18*/ 531,
+ /*0x1f98*/ 725,
+ /*0x0118*/ 69,
+ /*0x2c98*/ 919,
+ /*0x0418*/ 320,
+ /*0x1e97*/ 595,
+ /*0x0218*/ 202,
+ /*0x1f97*/ 724,
+ /*0x0398*/ 248,
+ /*0x2c18*/ 869,
+ /*0x0417*/ 319,
+ /*0x0518*/ 432,
+ /*0x1040e*/ 1103,
+ -1,
+ /*0x0397*/ 247,
+ /*0x2c17*/ 868,
+ /*0x03f5*/ 289,
+ /*0x2c75*/ 904,
+ -1,
+ /*0x1e8e*/ 590,
+ /*0x1e0e*/ 526,
+ /*0x1f8e*/ 715,
+ /*0x010e*/ 64,
+ /*0x2c8e*/ 914,
+ /*0x040e*/ 310,
+ /*0x1040c*/ 1101,
+ /*0x020e*/ 197,
+ -1,
+ /*0x038e*/ 238,
+ /*0x2c0e*/ 859,
+ /*0x03f1*/ 287,
+ /*0x050e*/ 427,
+ /*0x1e8c*/ 589,
+ /*0x1e0c*/ 525,
+ /*0x1f8c*/ 713,
+ /*0x010c*/ 63,
+ /*0x2c8c*/ 913,
+ /*0x040c*/ 308,
+ -1,
+ /*0x020c*/ 196,
+ /*0xa68e*/ 990,
+ /*0x038c*/ 237,
+ /*0x2c0c*/ 857,
+ /*0x1fd9*/ 775,
+ /*0x050c*/ 426,
+ /*0x017f*/ 120,
+ -1,
+ /*0x10410*/ 1105,
+ -1, -1, -1,
+ /*0x03ff*/ 295,
+ /*0x2c7f*/ 906,
+ /*0xa68c*/ 989,
+ /*0x1e90*/ 591,
+ /*0x1e10*/ 527,
+ /*0x1f90*/ 717,
+ /*0x0110*/ 65,
+ /*0x2c90*/ 915,
+ /*0x0410*/ 312,
+ /*0x0059*/ 23,
+ /*0x0210*/ 198,
+ /*0xa790*/ 1043,
+ /*0x0390*/ 240,
+ /*0x2c10*/ 861,
+ /*0x1ff7*/ 792,
+ /*0x0510*/ 428,
+ /*0x1ff9*/ 794,
+ /*0x0179*/ 117,
+ /*0x10406*/ 1095,
+ -1, -1,
+ /*0x03f7*/ 290,
+ -1,
+ /*0x03f9*/ 291,
+ /*0xa690*/ 991,
+ /*0x1e86*/ 586,
+ /*0x1e06*/ 522,
+ /*0x1f86*/ 707,
+ /*0x0106*/ 60,
+ /*0x2c86*/ 910,
+ /*0x0406*/ 302,
+ /*0x1fe7*/ 782,
+ /*0x0206*/ 193,
+ /*0xa786*/ 1040,
+ /*0x0386*/ 233,
+ /*0x2c06*/ 851,
+ /*0x017d*/ 119,
+ /*0x0506*/ 423,
+ -1,
+ /*0x2c67*/ 896,
+ /*0x10412*/ 1107,
+ -1,
+ /*0x03fd*/ 293,
+ -1,
+ /*0x1ffb*/ 796,
+ /*0x017b*/ 118,
+ /*0xa686*/ 986,
+ /*0x1e92*/ 592,
+ /*0x1e12*/ 528,
+ /*0x1f92*/ 719,
+ /*0x0112*/ 66,
+ /*0x2c92*/ 916,
+ /*0x0412*/ 314,
+ -1,
+ /*0x0212*/ 199,
+ /*0xa792*/ 1044,
+ /*0x0392*/ 242,
+ /*0x2c12*/ 863,
+ -1,
+ /*0x0512*/ 429,
+ /*0x2c6f*/ 901,
+ -1,
+ /*0x10426*/ 1127,
+ -1,
+ /*0x0531*/ 440,
+ -1, -1, -1,
+ /*0xa692*/ 992,
+ /*0x1ea6*/ 604,
+ /*0x1e26*/ 538,
+ /*0x1fa6*/ 739,
+ /*0x0126*/ 76,
+ /*0x2ca6*/ 926,
+ /*0x0426*/ 334,
+ /*0x10424*/ 1125,
+ /*0x0226*/ 209,
+ /*0xa7a6*/ 1048,
+ /*0x03a6*/ 261,
+ /*0x2c26*/ 883,
+ -1,
+ /*0x0526*/ 439,
+ /*0x1ea4*/ 603,
+ /*0x1e24*/ 537,
+ /*0x1fa4*/ 737,
+ /*0x0124*/ 75,
+ /*0x2ca4*/ 925,
+ /*0x0424*/ 332,
+ /*0x10416*/ 1111,
+ /*0x0224*/ 208,
+ /*0xa7a4*/ 1047,
+ /*0x03a4*/ 259,
+ /*0x2c24*/ 881,
+ -1,
+ /*0x0524*/ 438,
+ /*0x1e96*/ 594,
+ /*0x1e16*/ 530,
+ /*0x1f96*/ 723,
+ /*0x0116*/ 68,
+ /*0x2c96*/ 918,
+ /*0x0416*/ 318,
+ /*0x10414*/ 1109,
+ /*0x0216*/ 201,
+ -1,
+ /*0x0396*/ 246,
+ /*0x2c16*/ 867,
+ -1,
+ /*0x0516*/ 431,
+ /*0x1e94*/ 593,
+ /*0x1e14*/ 529,
+ /*0x1f94*/ 721,
+ /*0x0114*/ 67,
+ /*0x2c94*/ 917,
+ /*0x0414*/ 316,
+ /*0x1040a*/ 1099,
+ /*0x0214*/ 200,
+ /*0xa696*/ 994,
+ /*0x0394*/ 244,
+ /*0x2c14*/ 865,
+ /*0x0498*/ 368,
+ /*0x0514*/ 430,
+ /*0x1e8a*/ 588,
+ /*0x1e0a*/ 524,
+ /*0x1f8a*/ 711,
+ /*0x010a*/ 62,
+ /*0x2c8a*/ 912,
+ /*0x040a*/ 306,
+ /*0x1fb7*/ 753,
+ /*0x020a*/ 195,
+ /*0xa694*/ 993,
+ /*0x038a*/ 236,
+ /*0x2c0a*/ 855,
+ /*0x013d*/ 86,
+ /*0x050a*/ 425,
+ -1, -1,
+ /*0x023d*/ 218,
+ /*0x0537*/ 446,
+ -1,
+ /*0x048e*/ 363,
+ /*0x1fe9*/ 784,
+ /*0x053d*/ 452,
+ /*0xa68a*/ 988,
+ /*0x2ced*/ 958,
+ /*0x0198*/ 137,
+ -1,
+ /*0x10420*/ 1121,
+ -1,
+ /*0x2c69*/ 897,
+ /*0x2c6d*/ 899,
+ /*0x0197*/ 136,
+ /*0x1fe3*/ 779,
+ /*0x048c*/ 362,
+ /*0x1ea0*/ 601,
+ /*0x1e20*/ 535,
+ /*0x1fa0*/ 733,
+ /*0x0120*/ 73,
+ /*0x2ca0*/ 923,
+ /*0x0420*/ 328,
+ /*0x2c63*/ 894,
+ /*0x0220*/ 206,
+ /*0xa7a0*/ 1045,
+ /*0x03a0*/ 256,
+ /*0x2c20*/ 877,
+ /*0x018e*/ 129,
+ /*0x0520*/ 436,
+ /*0x01f1*/ 181,
+ -1,
+ /*0x10422*/ 1123,
+ /*0x1fdb*/ 777,
+ -1, -1, -1, -1,
+ /*0x0490*/ 364,
+ /*0x1ea2*/ 602,
+ /*0x1e22*/ 536,
+ /*0x1fa2*/ 735,
+ /*0x0122*/ 74,
+ /*0x2ca2*/ 924,
+ /*0x0422*/ 330,
+ /*0x10402*/ 1091,
+ /*0x0222*/ 207,
+ /*0xa7a2*/ 1046,
+ -1,
+ /*0x2c22*/ 879,
+ /*0x01d9*/ 169,
+ /*0x0522*/ 437,
+ /*0x1e82*/ 584,
+ /*0x1e02*/ 520,
+ /*0x1f82*/ 703,
+ /*0x0102*/ 58,
+ /*0x2c82*/ 908,
+ /*0x0402*/ 298,
+ /*0x013f*/ 87,
+ /*0x0202*/ 191,
+ /*0xa782*/ 1038,
+ /*0x0535*/ 444,
+ /*0x2c02*/ 847,
+ /*0x0190*/ 131,
+ /*0x0502*/ 421,
+ -1, -1,
+ /*0x053f*/ 454,
+ -1,
+ /*0x10404*/ 1093,
+ -1, -1,
+ /*0x01f7*/ 185,
+ /*0xa682*/ 984,
+ /*0x1f18*/ 657,
+ -1,
+ /*0x1e84*/ 585,
+ /*0x1e04*/ 521,
+ /*0x1f84*/ 705,
+ /*0x0104*/ 59,
+ /*0x2c84*/ 909,
+ /*0x0404*/ 300,
+ /*0x0492*/ 365,
+ /*0x0204*/ 192,
+ /*0xa784*/ 1039,
+ /*0x0186*/ 124,
+ /*0x2c04*/ 849,
+ -1,
+ /*0x0504*/ 422,
+ -1,
+ /*0x1f5f*/ 692,
+ /*0x10400*/ 1089,
+ -1, -1,
+ /*0x1f0e*/ 655,
+ -1,
+ /*0x1fd7*/ 773,
+ /*0xa684*/ 985,
+ /*0x1e80*/ 583,
+ /*0x1e00*/ 519,
+ /*0x1f80*/ 701,
+ /*0x0100*/ 57,
+ /*0x2c80*/ 907,
+ /*0x0400*/ 296,
+ /*0x04a6*/ 375,
+ /*0x0200*/ 190,
+ /*0xa780*/ 1037,
+ /*0x1f0c*/ 653,
+ /*0x2c00*/ 845,
+ /*0x1040d*/ 1102,
+ /*0x0500*/ 420,
+ /*0x10401*/ 1090,
+ /*0x01b1*/ 150,
+ /*0x0057*/ 21,
+ -1, -1,
+ /*0x1f59*/ 689,
+ /*0x04a4*/ 374,
+ /*0x1f8d*/ 714,
+ /*0xa680*/ 983,
+ /*0x1f81*/ 702,
+ /*0x040d*/ 309,
+ /*0x2165*/ 807,
+ /*0x0401*/ 297,
+ /*0xa78d*/ 1042,
+ /*0x2161*/ 803,
+ /*0x2c0d*/ 858,
+ -1,
+ /*0x2c01*/ 846,
+ /*0x01a6*/ 144,
+ /*0x0496*/ 367,
+ /*0x1eaa*/ 606,
+ /*0x1e2a*/ 540,
+ /*0x1faa*/ 743,
+ /*0x012a*/ 78,
+ /*0x2caa*/ 928,
+ /*0x042a*/ 338,
+ -1,
+ /*0x022a*/ 211,
+ /*0xa7aa*/ 1050,
+ /*0x03aa*/ 265,
+ /*0x2c2a*/ 887,
+ /*0x01a4*/ 143,
+ /*0x0494*/ 366,
+ /*0x1ea8*/ 605,
+ /*0x1e28*/ 539,
+ /*0x1fa8*/ 741,
+ /*0x0128*/ 77,
+ /*0x2ca8*/ 927,
+ /*0x0428*/ 336,
+ /*0x10408*/ 1097,
+ /*0x0228*/ 210,
+ /*0xa7a8*/ 1049,
+ /*0x03a8*/ 263,
+ /*0x2c28*/ 885,
+ /*0x0196*/ 135,
+ /*0x048a*/ 361,
+ /*0x1e88*/ 587,
+ /*0x1e08*/ 523,
+ /*0x1f88*/ 709,
+ /*0x0108*/ 61,
+ /*0x2c88*/ 911,
+ /*0x0408*/ 304,
+ /*0x1041c*/ 1117,
+ /*0x0208*/ 194,
+ -1,
+ /*0x0388*/ 234,
+ /*0x2c08*/ 853,
+ /*0x0194*/ 134,
+ /*0x0508*/ 424,
+ /*0xa779*/ 1033,
+ /*0x1e1c*/ 533,
+ /*0x1f9c*/ 729,
+ /*0x011c*/ 71,
+ /*0x2c9c*/ 921,
+ /*0x041c*/ 324,
+ /*0x1f6f*/ 700,
+ /*0x021c*/ 204,
+ /*0xa688*/ 987,
+ /*0x039c*/ 252,
+ /*0x2c1c*/ 873,
+ /*0x018a*/ 127,
+ /*0x051c*/ 434,
+ /*0x1041a*/ 1115,
+ -1,
+ /*0x01b7*/ 154,
+ /*0x00df*/ 56,
+ -1,
+ /*0x04a0*/ 372,
+ /*0xa77d*/ 1035,
+ /*0x1e9a*/ 598,
+ /*0x1e1a*/ 532,
+ /*0x1f9a*/ 727,
+ /*0x011a*/ 70,
+ /*0x2c9a*/ 920,
+ /*0x041a*/ 322,
+ -1,
+ /*0x021a*/ 203,
+ /*0xa77b*/ 1034,
+ /*0x039a*/ 250,
+ /*0x2c1a*/ 871,
+ -1,
+ /*0x051a*/ 433,
+ /*0x2167*/ 809,
+ /*0x1eae*/ 608,
+ /*0x1e2e*/ 542,
+ /*0x1fae*/ 747,
+ /*0x012e*/ 80,
+ /*0x2cae*/ 930,
+ /*0x042e*/ 342,
+ /*0x04a2*/ 373,
+ /*0x022e*/ 213,
+ /*0x00d9*/ 50,
+ /*0x01a0*/ 141,
+ /*0x2c2e*/ 891,
+ -1,
+ /*0x1eac*/ 607,
+ /*0x1e2c*/ 541,
+ /*0x1fac*/ 745,
+ /*0x012c*/ 79,
+ /*0x2cac*/ 929,
+ /*0x042c*/ 340,
+ -1,
+ /*0x022c*/ 212,
+ /*0x216f*/ 817,
+ /*0xa726*/ 997,
+ /*0x2c2c*/ 889,
+ /*0x01db*/ 170,
+ /*0x1f5d*/ 691,
+ -1,
+ /*0x1eca*/ 622,
+ /*0x1e4a*/ 556,
+ /*0x1fca*/ 767,
+ /*0x014a*/ 93,
+ /*0x2cca*/ 944,
+ /*0x01a2*/ 142,
+ /*0xfb17*/ 1062,
+ /*0x024a*/ 226,
+ /*0xa724*/ 996,
+ /*0x1efc*/ 647,
+ /*0x1e7c*/ 581,
+ /*0x1ffc*/ 797,
+ /*0x054a*/ 465,
+ /*0x2126*/ 798,
+ /*0x047c*/ 358,
+ /*0x01b5*/ 153,
+ -1,
+ /*0x1f0a*/ 651,
+ /*0x0182*/ 122,
+ /*0x004a*/ 8,
+ -1, -1, -1, -1, -1,
+ /*0x1f3d*/ 676,
+ -1,
+ /*0x1ee2*/ 634,
+ /*0x1e62*/ 568,
+ /*0x1fe2*/ 778,
+ /*0x0162*/ 105,
+ /*0x2ce2*/ 956,
+ /*0x0462*/ 345,
+ -1,
+ /*0x1f69*/ 694,
+ /*0x1f6d*/ 698,
+ /*0x03e2*/ 279,
+ /*0x2c62*/ 893,
+ -1,
+ /*0x0480*/ 360,
+ -1,
+ /*0x1040b*/ 1100,
+ /*0x0184*/ 123,
+ /*0x1ed6*/ 628,
+ /*0x1e56*/ 562,
+ /*0x1fd6*/ 772,
+ /*0x0156*/ 99,
+ /*0x2cd6*/ 950,
+ /*0xff31*/ 1079,
+ /*0x1feb*/ 786,
+ /*0x1f8b*/ 712,
+ /*0x2ceb*/ 957,
+ /*0x03d6*/ 273,
+ /*0x040b*/ 307,
+ -1,
+ /*0x0556*/ 477,
+ /*0xa78b*/ 1041,
+ /*0x2c6b*/ 898,
+ /*0x2c0b*/ 856,
+ -1,
+ /*0x01d7*/ 168,
+ -1,
+ /*0x0056*/ 20,
+ /*0x1f5b*/ 690,
+ /*0x10413*/ 1108,
+ /*0xff26*/ 1068,
+ -1,
+ /*0x1ecc*/ 623,
+ /*0x1e4c*/ 557,
+ /*0x1fcc*/ 769,
+ /*0x014c*/ 94,
+ /*0x2ccc*/ 945,
+ /*0x04aa*/ 377,
+ /*0x1f93*/ 720,
+ /*0x024c*/ 227,
+ -1,
+ /*0x0413*/ 315,
+ /*0xfb06*/ 1057,
+ /*0xff24*/ 1066,
+ /*0x054c*/ 467,
+ /*0x0393*/ 243,
+ /*0x2c13*/ 864,
+ /*0x2169*/ 811,
+ /*0x216d*/ 815,
+ /*0x0181*/ 121,
+ /*0x04a8*/ 376,
+ /*0x004c*/ 10,
+ /*0x1f3f*/ 678,
+ /*0x1ec8*/ 621,
+ /*0x1e48*/ 555,
+ /*0x1fc8*/ 765,
+ -1,
+ /*0x2cc8*/ 943,
+ /*0x2163*/ 805,
+ /*0x00dd*/ 54,
+ /*0x0248*/ 225,
+ /*0x10b1*/ 496,
+ -1, -1, -1,
+ /*0x0548*/ 463,
+ /*0xa722*/ 995,
+ /*0x1eb2*/ 610,
+ /*0x1e32*/ 544,
+ /*0x1fb2*/ 749,
+ /*0x0132*/ 81,
+ /*0x2cb2*/ 932,
+ /*0x0048*/ 7,
+ /*0x24b7*/ 820,
+ /*0x0232*/ 215,
+ /*0x10405*/ 1094,
+ /*0x049c*/ 370,
+ /*0x24bd*/ 826,
+ /*0x10a6*/ 485,
+ /*0x0532*/ 441,
+ -1,
+ /*0x1ec4*/ 619,
+ /*0x1e44*/ 553,
+ /*0x1fc4*/ 762,
+ /*0x1f85*/ 706,
+ /*0x2cc4*/ 941,
+ /*0xff37*/ 1085,
+ /*0x0405*/ 301,
+ /*0x0244*/ 222,
+ -1, -1,
+ /*0x10a4*/ 483,
+ /*0x2c05*/ 850,
+ /*0x0544*/ 459,
+ -1, -1,
+ /*0x049a*/ 369,
+ -1, -1, -1,
+ /*0x0044*/ 3,
+ /*0x019c*/ 138,
+ /*0x1eec*/ 639,
+ /*0x1e6c*/ 573,
+ /*0x1fec*/ 787,
+ /*0x016c*/ 110,
+ -1,
+ /*0x046c*/ 350,
+ -1,
+ /*0x10407*/ 1096,
+ /*0x04ae*/ 379,
+ /*0x03ec*/ 284,
+ /*0xfb16*/ 1061,
+ /*0x1f0d*/ 654,
+ /*0x1eea*/ 638,
+ /*0x1e6a*/ 572,
+ /*0x1fea*/ 785,
+ /*0x016a*/ 109,
+ /*0x1f87*/ 708,
+ /*0x046a*/ 349,
+ /*0x0587*/ 478,
+ /*0x0407*/ 303,
+ /*0x04ac*/ 378,
+ /*0x03ea*/ 283,
+ /*0x00db*/ 52,
+ /*0xfb14*/ 1059,
+ /*0x2c07*/ 852,
+ -1,
+ /*0x1f2a*/ 665,
+ -1, -1, -1, -1, -1,
+ /*0x10b7*/ 502,
+ /*0x01ae*/ 148,
+ /*0xff22*/ 1064,
+ -1,
+ /*0x10bd*/ 508,
+ /*0x24bf*/ 828,
+ -1,
+ /*0x1f28*/ 663,
+ /*0x00b5*/ 25,
+ /*0x1041f*/ 1120,
+ -1,
+ /*0x04fc*/ 418,
+ /*0xff35*/ 1083,
+ /*0x01ac*/ 147,
+ /*0x1ee8*/ 637,
+ /*0x1e68*/ 571,
+ /*0x1fe8*/ 783,
+ /*0x0168*/ 108,
+ /*0x1f9f*/ 732,
+ /*0x0468*/ 348,
+ /*0x1f08*/ 649,
+ /*0x041f*/ 327,
+ -1,
+ /*0x03e8*/ 282,
+ /*0xa72a*/ 999,
+ /*0x039f*/ 255,
+ /*0x2c1f*/ 876,
+ /*0x01ca*/ 161,
+ /*0x10a0*/ 479,
+ /*0x04e2*/ 405,
+ -1, -1, -1,
+ /*0x1f1c*/ 661,
+ -1, -1,
+ /*0x01fc*/ 188,
+ /*0xa728*/ 998,
+ /*0x1ee4*/ 635,
+ /*0x1e64*/ 569,
+ /*0x1fe4*/ 780,
+ /*0x0164*/ 106,
+ /*0x212a*/ 799,
+ /*0x0464*/ 346,
+ -1,
+ /*0x04d6*/ 399,
+ /*0x1fd3*/ 771,
+ /*0x03e4*/ 280,
+ /*0x2c64*/ 895,
+ -1,
+ /*0x10a2*/ 481,
+ -1, -1,
+ /*0x1f1a*/ 659,
+ /*0x01e2*/ 173,
+ -1,
+ /*0x0553*/ 474,
+ /*0x1eba*/ 614,
+ /*0x1e3a*/ 548,
+ /*0x1fba*/ 756,
+ /*0x10b5*/ 500,
+ /*0x2cba*/ 936,
+ -1,
+ /*0x0053*/ 17,
+ /*0x023a*/ 216,
+ -1,
+ /*0x10bf*/ 510,
+ /*0x1f2e*/ 669,
+ -1,
+ /*0x053a*/ 449,
+ -1,
+ /*0xfb02*/ 1053,
+ -1,
+ /*0x1ee0*/ 633,
+ /*0x1e60*/ 567,
+ /*0x018b*/ 128,
+ /*0x0160*/ 104,
+ /*0x2ce0*/ 955,
+ /*0x0460*/ 344,
+ /*0x1f2c*/ 667,
+ -1,
+ /*0x1fb3*/ 750,
+ /*0x03e0*/ 278,
+ /*0x2c60*/ 892,
+ /*0x1eb8*/ 613,
+ /*0x1e38*/ 547,
+ /*0x1fb8*/ 754,
+ -1,
+ /*0x2cb8*/ 935,
+ -1, -1,
+ /*0x0533*/ 442,
+ -1,
+ /*0x1f4a*/ 681,
+ /*0xff2a*/ 1072,
+ /*0xfb04*/ 1055,
+ /*0x0538*/ 447,
+ /*0xa72e*/ 1001,
+ /*0x0193*/ 133,
+ /*0x1ed2*/ 626,
+ /*0x1e52*/ 560,
+ /*0x1fd2*/ 770,
+ /*0x0152*/ 97,
+ /*0x2cd2*/ 948,
+ /*0x04b2*/ 381,
+ -1, -1,
+ /*0xff28*/ 1070,
+ -1,
+ /*0xa72c*/ 1000,
+ -1,
+ /*0x0552*/ 473,
+ /*0x1ec2*/ 618,
+ /*0x1e42*/ 552,
+ /*0x1fc2*/ 760,
+ /*0x01c8*/ 160,
+ /*0x2cc2*/ 940,
+ /*0xfb00*/ 1051,
+ /*0x0052*/ 16,
+ -1, -1,
+ /*0x03c2*/ 268,
+ /*0x03cf*/ 269,
+ /*0xa74a*/ 1014,
+ /*0x0542*/ 457,
+ /*0x054f*/ 470,
+ /*0x1ec0*/ 617,
+ /*0x1e40*/ 551,
+ -1,
+ /*0x01b2*/ 151,
+ /*0x2cc0*/ 939,
+ /*0x0042*/ 1,
+ /*0x004f*/ 13,
+ -1, -1, -1,
+ /*0x1f56*/ 688,
+ /*0xfb01*/ 1052,
+ /*0x0540*/ 455,
+ /*0x04ec*/ 410,
+ /*0x1f6b*/ 696,
+ /*0x1f0b*/ 652,
+ /*0x10aa*/ 489,
+ /*0x01c4*/ 157,
+ /*0x1ee6*/ 636,
+ /*0x1e66*/ 570,
+ /*0x1fe6*/ 781,
+ /*0x0166*/ 107,
+ -1,
+ /*0x0466*/ 347,
+ /*0xa762*/ 1026,
+ /*0x04ea*/ 409,
+ -1,
+ /*0x03e6*/ 281,
+ -1,
+ /*0x10a8*/ 487,
+ -1, -1,
+ /*0x1ece*/ 624,
+ /*0x1e4e*/ 558,
+ /*0x1f4c*/ 683,
+ /*0x014e*/ 95,
+ /*0x2cce*/ 946,
+ -1,
+ /*0x01ec*/ 178,
+ /*0x024e*/ 228,
+ /*0xa756*/ 1020,
+ /*0xff2e*/ 1076,
+ /*0x2162*/ 804,
+ -1,
+ /*0x054e*/ 469,
+ /*0x1eb6*/ 612,
+ /*0x1e36*/ 546,
+ /*0x1fb6*/ 752,
+ /*0x0136*/ 83,
+ /*0x2cb6*/ 934,
+ /*0x01ea*/ 177,
+ /*0x004e*/ 12,
+ /*0x0187*/ 125,
+ /*0xff2c*/ 1074,
+ /*0x24ca*/ 839,
+ /*0x1f48*/ 679,
+ -1,
+ /*0x0536*/ 445,
+ /*0x1041e*/ 1119,
+ /*0x04e8*/ 408,
+ -1, -1,
+ /*0x216b*/ 813,
+ /*0x00ca*/ 36,
+ /*0xa74c*/ 1015,
+ /*0x1e9e*/ 600,
+ /*0x1e1e*/ 534,
+ /*0x1f9e*/ 731,
+ /*0x011e*/ 72,
+ /*0x2c9e*/ 922,
+ /*0x041e*/ 326,
+ -1,
+ /*0x021e*/ 205,
+ -1,
+ /*0x039e*/ 254,
+ /*0x2c1e*/ 875,
+ -1,
+ /*0x051e*/ 435,
+ /*0x1ed0*/ 625,
+ /*0x1e50*/ 559,
+ -1,
+ /*0x0150*/ 96,
+ /*0x2cd0*/ 947,
+ /*0x04e4*/ 406,
+ /*0x01e8*/ 176,
+ /*0xa748*/ 1013,
+ /*0x019f*/ 140,
+ /*0x03d0*/ 270,
+ -1,
+ /*0x10ae*/ 493,
+ /*0x0550*/ 471,
+ /*0x1eda*/ 630,
+ /*0x1e5a*/ 564,
+ /*0x1fda*/ 776,
+ /*0x015a*/ 101,
+ /*0x2cda*/ 952,
+ -1,
+ /*0x0050*/ 14,
+ -1,
+ /*0xa732*/ 1002,
+ /*0x03da*/ 275,
+ /*0x10ac*/ 491,
+ /*0x04ba*/ 385,
+ /*0x1041d*/ 1118,
+ /*0x1f6c*/ 697,
+ -1,
+ /*0x00d6*/ 48,
+ -1,
+ /*0x01e4*/ 174,
+ -1,
+ /*0x005a*/ 24,
+ -1,
+ /*0x1f9d*/ 730,
+ /*0xa744*/ 1011,
+ /*0x01d3*/ 166,
+ /*0x041d*/ 325,
+ /*0x1f6a*/ 695,
+ /*0x2132*/ 801,
+ /*0x04e0*/ 404,
+ /*0x039d*/ 253,
+ /*0x2c1d*/ 874,
+ /*0x24cc*/ 841,
+ -1,
+ /*0x1eee*/ 640,
+ /*0x1e6e*/ 574,
+ -1,
+ /*0x016e*/ 111,
+ -1,
+ /*0x046e*/ 351,
+ /*0x04b8*/ 384,
+ /*0x00cc*/ 38,
+ -1,
+ /*0x03ee*/ 285,
+ /*0x2c6e*/ 900,
+ /*0xa76c*/ 1031,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0x24c8*/ 837,
+ /*0x01e0*/ 172,
+ /*0x04d2*/ 397,
+ -1,
+ /*0xa76a*/ 1030,
+ -1, -1,
+ /*0x01b3*/ 152,
+ /*0x1f68*/ 693,
+ /*0x00c8*/ 34,
+ /*0x216c*/ 814,
+ -1,
+ /*0x01b8*/ 155,
+ -1,
+ /*0x1ebe*/ 616,
+ /*0x1e3e*/ 550,
+ /*0x1fbe*/ 759,
+ /*0xa64a*/ 965,
+ /*0x2cbe*/ 938,
+ -1, -1,
+ /*0x023e*/ 219,
+ /*0x216a*/ 812,
+ -1, -1, -1,
+ /*0x053e*/ 453,
+ /*0xff32*/ 1080,
+ /*0x24c4*/ 833,
+ /*0x04c0*/ 388,
+ /*0x1ed8*/ 629,
+ /*0x1e58*/ 563,
+ /*0x1fd8*/ 774,
+ /*0x0158*/ 100,
+ /*0x2cd8*/ 951,
+ -1, -1,
+ /*0x00c4*/ 30,
+ /*0xa768*/ 1029,
+ /*0x03d8*/ 274,
+ -1,
+ /*0x01cf*/ 164,
+ /*0x1ed4*/ 627,
+ /*0x1e54*/ 561,
+ /*0xa662*/ 977,
+ /*0x0154*/ 98,
+ /*0x2cd4*/ 949,
+ /*0x04e6*/ 407,
+ -1,
+ /*0x0058*/ 22,
+ -1,
+ /*0x1f3a*/ 673,
+ /*0xfb13*/ 1058,
+ -1,
+ /*0x0554*/ 475,
+ -1,
+ /*0x2168*/ 810,
+ -1, -1, -1,
+ /*0xa656*/ 971,
+ /*0x0054*/ 18,
+ /*0xa764*/ 1027,
+ -1,
+ /*0x1ec6*/ 620,
+ /*0x1e46*/ 554,
+ /*0x1fc6*/ 763,
+ -1,
+ /*0x2cc6*/ 942,
+ /*0x1fc7*/ 764,
+ /*0x0147*/ 91,
+ /*0x0246*/ 224,
+ /*0x01e6*/ 175,
+ -1,
+ /*0x04b6*/ 383,
+ /*0x10b2*/ 497,
+ /*0x0546*/ 461,
+ -1,
+ /*0x1f38*/ 671,
+ /*0x0547*/ 462,
+ /*0x2164*/ 806,
+ /*0xa73a*/ 1006,
+ -1,
+ /*0x0046*/ 5,
+ /*0xa64c*/ 966,
+ -1,
+ /*0x0047*/ 6,
+ /*0x1ede*/ 632,
+ /*0x1e5e*/ 566,
+ /*0x10c4*/ 515,
+ /*0x015e*/ 103,
+ /*0x2cde*/ 954,
+ -1,
+ /*0x1f52*/ 686,
+ /*0x049e*/ 371,
+ -1,
+ /*0x03de*/ 277,
+ /*0xa760*/ 1025,
+ /*0xfb05*/ 1056,
+ /*0x1ebc*/ 615,
+ /*0x1e3c*/ 549,
+ /*0x1fbc*/ 758,
+ -1,
+ /*0x2cbc*/ 937,
+ -1,
+ /*0xa648*/ 964,
+ -1,
+ /*0x04d0*/ 396,
+ /*0xa738*/ 1005,
+ /*0x1edc*/ 631,
+ /*0x1e5c*/ 565,
+ /*0x053c*/ 451,
+ /*0x015c*/ 102,
+ /*0x2cdc*/ 953,
+ /*0x1fa9*/ 742,
+ /*0x2160*/ 802,
+ -1,
+ /*0x0429*/ 337,
+ /*0x03dc*/ 276,
+ -1,
+ /*0x04da*/ 401,
+ /*0x03a9*/ 264,
+ /*0x2c29*/ 886,
+ /*0xa752*/ 1018,
+ -1,
+ /*0x1eb4*/ 611,
+ /*0x1e34*/ 545,
+ /*0x1fb4*/ 751,
+ /*0x0134*/ 82,
+ /*0x2cb4*/ 933,
+ -1, -1, -1,
+ /*0xa644*/ 962,
+ /*0x00d3*/ 45,
+ -1,
+ /*0xa742*/ 1010,
+ /*0x0534*/ 443,
+ /*0x24ba*/ 823,
+ /*0x1ef2*/ 642,
+ /*0x1e72*/ 576,
+ /*0x1ff2*/ 788,
+ /*0x0172*/ 113,
+ /*0x2cf2*/ 959,
+ /*0x0472*/ 353,
+ -1, -1, -1, -1,
+ /*0x2c72*/ 903,
+ /*0xa740*/ 1009,
+ /*0xff3a*/ 1088,
+ /*0x04ee*/ 411,
+ /*0x0145*/ 90,
+ /*0xa66c*/ 982,
+ -1, -1,
+ /*0x0245*/ 223,
+ /*0x1ef4*/ 643,
+ /*0x1e74*/ 577,
+ /*0x1ff4*/ 790,
+ /*0x0174*/ 114,
+ /*0x0545*/ 460,
+ /*0x0474*/ 354,
+ /*0x019d*/ 139,
+ /*0x24b8*/ 821,
+ /*0xa66a*/ 981,
+ /*0x03f4*/ 288,
+ /*0xa766*/ 1028,
+ /*0x0045*/ 4,
+ /*0x1fc3*/ 761,
+ /*0x0143*/ 89,
+ -1,
+ /*0xff33*/ 1081,
+ /*0x1fcb*/ 768,
+ /*0x0243*/ 221,
+ -1,
+ /*0x01ee*/ 179,
+ /*0xff38*/ 1086,
+ -1,
+ /*0x0543*/ 458,
+ -1,
+ /*0xa74e*/ 1016,
+ /*0x054d*/ 468,
+ /*0x054b*/ 466,
+ /*0x04be*/ 387,
+ /*0x2166*/ 808,
+ /*0x0043*/ 2,
+ -1,
+ /*0x00d2*/ 44,
+ /*0x004d*/ 11,
+ /*0x004b*/ 9,
+ -1,
+ /*0x24c2*/ 831,
+ /*0x24cf*/ 844,
+ /*0xa736*/ 1004,
+ -1, -1,
+ /*0x1f50*/ 685,
+ /*0x10ba*/ 505,
+ /*0xa668*/ 980,
+ /*0x04d8*/ 400,
+ /*0x00c2*/ 28,
+ /*0x00cf*/ 41,
+ -1,
+ /*0x1eb0*/ 609,
+ /*0x1e30*/ 543,
+ /*0x24c0*/ 829,
+ /*0x0130*/ 1130,
+ /*0x2cb0*/ 931,
+ /*0x1efe*/ 648,
+ /*0x1e7e*/ 582,
+ /*0x0230*/ 214,
+ /*0x04d4*/ 398,
+ /*0x03b0*/ 267,
+ /*0x047e*/ 359,
+ /*0x00c0*/ 26,
+ -1, -1,
+ /*0x03fe*/ 294,
+ /*0x2c7e*/ 905,
+ /*0x10b3*/ 498,
+ /*0x1ef0*/ 641,
+ /*0x1e70*/ 575,
+ /*0xa664*/ 978,
+ /*0x0170*/ 112,
+ /*0x10b8*/ 503,
+ /*0x0470*/ 352,
+ /*0xa750*/ 1017,
+ -1,
+ /*0x1f1d*/ 662,
+ /*0x03f0*/ 286,
+ /*0x2c70*/ 902,
+ /*0x1faf*/ 748,
+ /*0x1fad*/ 746,
+ -1,
+ /*0x042f*/ 343,
+ /*0x042d*/ 341,
+ /*0x04c7*/ 392,
+ /*0x24ce*/ 843,
+ /*0x0141*/ 88,
+ /*0xa75a*/ 1022,
+ /*0x2c2d*/ 890,
+ /*0x1f6e*/ 699,
+ /*0x0241*/ 220,
+ /*0x1fc9*/ 766,
+ /*0x0149*/ 92,
+ -1,
+ /*0x00ce*/ 40,
+ /*0x0541*/ 456,
+ /*0x0372*/ 231,
+ -1,
+ /*0x24b6*/ 819,
+ -1,
+ /*0x10c2*/ 513,
+ /*0x0549*/ 464,
+ /*0x0041*/ 0,
+ -1,
+ /*0x04de*/ 403,
+ /*0xa660*/ 976,
+ -1,
+ /*0x0345*/ 229,
+ /*0x0049*/ 1129,
+ /*0x01c7*/ 159,
+ /*0x1fab*/ 744,
+ /*0xff36*/ 1084,
+ -1,
+ /*0x042b*/ 339,
+ /*0x10c0*/ 511,
+ -1,
+ /*0x04bc*/ 386,
+ /*0x03ab*/ 266,
+ /*0x2c2b*/ 888,
+ /*0xa76e*/ 1032,
+ /*0x1fbb*/ 757,
+ /*0x013b*/ 85,
+ /*0x1f3e*/ 677,
+ -1, -1,
+ /*0x023b*/ 217,
+ /*0x04dc*/ 402,
+ -1, -1,
+ /*0x01de*/ 171,
+ /*0x053b*/ 450,
+ /*0xa652*/ 969,
+ -1,
+ /*0x1ef6*/ 644,
+ /*0x1e76*/ 578,
+ /*0x1ff6*/ 791,
+ /*0x0176*/ 115,
+ /*0x216e*/ 816,
+ /*0x0476*/ 355,
+ -1,
+ /*0x00d0*/ 42,
+ /*0x01bc*/ 156,
+ /*0x04b4*/ 382,
+ -1,
+ /*0xa642*/ 961,
+ /*0x1fb9*/ 755,
+ /*0x0139*/ 84,
+ -1, -1, -1,
+ /*0x1f54*/ 687,
+ -1,
+ /*0xa73e*/ 1008,
+ /*0x00da*/ 51,
+ /*0x01a9*/ 146,
+ /*0x0539*/ 448,
+ /*0x04f2*/ 413,
+ /*0x10427*/ 1128,
+ /*0xa640*/ 960,
+ /*0x10b6*/ 501,
+ /*0x1ef8*/ 645,
+ /*0x1e78*/ 579,
+ /*0x1ff8*/ 793,
+ /*0x0178*/ 116,
+ -1,
+ /*0x0478*/ 356,
+ /*0x1fa7*/ 740,
+ /*0x04c5*/ 391,
+ /*0xa758*/ 1021,
+ /*0x0427*/ 335,
+ -1, -1, -1,
+ /*0x03a7*/ 262,
+ /*0x2c27*/ 884,
+ /*0x04f4*/ 414,
+ /*0xa666*/ 979,
+ -1, -1,
+ /*0x0370*/ 230,
+ /*0xa754*/ 1019,
+ /*0x01f2*/ 182,
+ /*0x1efa*/ 646,
+ /*0x1e7a*/ 580,
+ /*0x1ffa*/ 795,
+ /*0x04c3*/ 390,
+ -1,
+ /*0x047a*/ 357,
+ /*0x04cd*/ 395,
+ /*0x04cb*/ 394,
+ /*0xa64e*/ 967,
+ /*0x03fa*/ 292,
+ /*0x01c5*/ 158,
+ -1,
+ /*0x10425*/ 1126,
+ /*0x03d5*/ 272,
+ -1, -1,
+ /*0x0555*/ 476,
+ -1,
+ /*0x01f4*/ 183,
+ -1,
+ /*0xa746*/ 1012,
+ /*0x1fa5*/ 738,
+ -1,
+ /*0x0055*/ 19,
+ /*0x0425*/ 333,
+ /*0x1f3c*/ 675,
+ -1,
+ /*0x24be*/ 827,
+ /*0x03a5*/ 260,
+ /*0x2c25*/ 882,
+ /*0x10423*/ 1124,
+ /*0x01cd*/ 163,
+ /*0x01cb*/ 162,
+ -1, -1, -1, -1, -1,
+ /*0x1f29*/ 664,
+ /*0x1fa3*/ 736,
+ /*0x04b0*/ 380,
+ -1,
+ /*0x0423*/ 331,
+ /*0xa75e*/ 1024,
+ /*0x10421*/ 1122,
+ /*0x04fe*/ 419,
+ /*0x03a3*/ 258,
+ /*0x2c23*/ 880,
+ /*0x03d1*/ 271,
+ -1, -1,
+ /*0x0551*/ 472,
+ /*0x00d8*/ 49,
+ /*0x1fa1*/ 734,
+ /*0xa650*/ 968,
+ /*0xa73c*/ 1007,
+ /*0x0421*/ 329,
+ /*0x04f0*/ 412,
+ /*0x0051*/ 15,
+ /*0x1041b*/ 1116,
+ /*0x03a1*/ 257,
+ /*0x2c21*/ 878,
+ /*0x0376*/ 232,
+ -1,
+ /*0x00d4*/ 46,
+ /*0xa75c*/ 1023,
+ /*0x1e9b*/ 599,
+ /*0xa65a*/ 973,
+ /*0x1f9b*/ 728,
+ -1,
+ /*0x01fe*/ 189,
+ /*0x041b*/ 323,
+ /*0x04c1*/ 389,
+ -1, -1,
+ /*0x039b*/ 251,
+ /*0x2c1b*/ 872,
+ /*0x24c6*/ 835,
+ /*0x04c9*/ 393,
+ -1,
+ /*0x24c7*/ 836,
+ /*0xa734*/ 1003,
+ /*0x01f0*/ 180,
+ /*0x10419*/ 1114,
+ /*0x10403*/ 1092,
+ -1,
+ /*0x00c6*/ 32,
+ -1,
+ /*0x10be*/ 509,
+ /*0x00c7*/ 33,
+ /*0x1e99*/ 597,
+ /*0x01af*/ 149,
+ /*0x1f99*/ 726,
+ /*0x1f83*/ 704,
+ /*0x1040f*/ 1104,
+ /*0x0419*/ 321,
+ /*0x0403*/ 299,
+ /*0x1f4d*/ 684,
+ /*0x1f4b*/ 682,
+ /*0x0399*/ 249,
+ /*0x2c19*/ 870,
+ /*0x2c03*/ 848,
+ -1,
+ /*0x1f8f*/ 716,
+ /*0x10409*/ 1098,
+ -1,
+ /*0x040f*/ 311,
+ -1, -1,
+ /*0x00de*/ 55,
+ /*0x038f*/ 239,
+ /*0x2c0f*/ 860,
+ /*0x24bc*/ 825,
+ /*0x1f89*/ 710,
+ -1, -1,
+ /*0x0409*/ 305,
+ /*0x10415*/ 1110,
+ -1, -1,
+ /*0x0389*/ 235,
+ /*0x2c09*/ 854,
+ /*0x04f6*/ 415,
+ /*0x10411*/ 1106,
+ -1, -1,
+ /*0x1f95*/ 722,
+ -1, -1,
+ /*0x0415*/ 317,
+ -1,
+ /*0x00dc*/ 53,
+ /*0x1f91*/ 718,
+ /*0x0395*/ 245,
+ /*0x2c15*/ 866,
+ /*0x0411*/ 313,
+ -1, -1,
+ /*0xff29*/ 1071,
+ /*0x0391*/ 241,
+ /*0x2c11*/ 862,
+ /*0x10c7*/ 517,
+ -1, -1, -1, -1, -1,
+ /*0x01f6*/ 184,
+ /*0xa658*/ 972,
+ /*0x04f8*/ 416,
+ -1,
+ /*0xff34*/ 1082,
+ -1, -1, -1, -1, -1,
+ /*0x1f2f*/ 670,
+ /*0x1f2d*/ 668,
+ -1,
+ /*0xa654*/ 970,
+ -1, -1,
+ /*0x24c5*/ 834,
+ -1, -1,
+ /*0xa77e*/ 1036,
+ -1, -1,
+ /*0x1f49*/ 680,
+ -1,
+ /*0x04fa*/ 417,
+ /*0x00c5*/ 31,
+ /*0x10bc*/ 507,
+ /*0x01f8*/ 186,
+ -1, -1, -1,
+ /*0x01a7*/ 145,
+ -1, -1,
+ /*0x24c3*/ 832,
+ /*0xa646*/ 963,
+ -1,
+ /*0x24cd*/ 842,
+ /*0x24cb*/ 840,
+ /*0x10a9*/ 488,
+ -1,
+ /*0x1f2b*/ 666,
+ -1,
+ /*0x00c3*/ 29,
+ -1, -1,
+ /*0x00cd*/ 39,
+ /*0x00cb*/ 37,
+ -1,
+ /*0x01fa*/ 187,
+ -1,
+ /*0x1f3b*/ 674,
+ /*0x10b4*/ 499,
+ /*0x01d5*/ 167,
+ -1, -1, -1, -1,
+ /*0xa65e*/ 975,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,
+ /*0x1f39*/ 672,
+ /*0x10c5*/ 516,
+ -1, -1,
+ /*0xa65c*/ 974,
+ -1, -1, -1,
+ /*0xff30*/ 1078,
+ -1, -1, -1,
+ /*0x01d1*/ 165,
+ /*0x212b*/ 800,
+ -1, -1, -1, -1, -1,
+ /*0x10c3*/ 514,
+ -1, -1,
+ /*0x10cd*/ 518,
+ -1, -1, -1, -1,
+ /*0x24c1*/ 830,
+ -1, -1, -1, -1, -1,
+ /*0x24c9*/ 838,
+ /*0xff2f*/ 1077,
+ /*0xff2d*/ 1075,
+ /*0x00c1*/ 27,
+ -1, -1, -1, -1, -1,
+ /*0x00c9*/ 35,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0x10b0*/ 495,
+ -1, -1, -1, -1, -1,
+ /*0x24bb*/ 824,
+ -1, -1,
+ /*0xff2b*/ 1073,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1,
+ /*0x018f*/ 130,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0x10af*/ 494,
+ /*0x10ad*/ 492,
+ /*0x0189*/ 126,
+ -1, -1,
+ /*0x24b9*/ 822,
+ /*0x10c1*/ 512,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,
+ /*0xff39*/ 1087,
+ -1, -1,
+ /*0x0191*/ 132,
+ -1,
+ /*0x1f1b*/ 660,
+ -1, -1, -1, -1, -1, -1,
+ /*0x2183*/ 818,
+ /*0x10ab*/ 490,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0xff27*/ 1069,
+ -1,
+ /*0x10bb*/ 506,
+ -1, -1, -1, -1, -1,
+ /*0x1f19*/ 658,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1,
+ /*0x00d5*/ 47,
+ /*0x1f0f*/ 656,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0x10b9*/ 504,
+ -1,
+ /*0x1f09*/ 650,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0xff25*/ 1067,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,
+ /*0x10a7*/ 486,
+ -1, -1, -1, -1,
+ /*0x00d1*/ 43,
+ -1,
+ /*0xff23*/ 1065,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0xff21*/ 1063,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1,
+ /*0x10a5*/ 484,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,
+ /*0x10a3*/ 482,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1,
+ /*0x10a1*/ 480,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,
+ /*0xfb03*/ 1054,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1,
+ -1, -1,
+ /*0xfb15*/ 1060
+ };
+
+ if (code <= MAX_CODE_VALUE && code >= MIN_CODE_VALUE)
+ {
+ register int key = onigenc_unicode_CaseFold_11_hash(code);
+
+ if (key <= MAX_HASH_VALUE && key >= 0)
+ {
+ register short s = wordlist[key];
+
+ if (s >= 0 && code1_equal(code, CaseFold_11_Table[s].from))
+ return &CaseFold_11_Table[s].to;
+ }
+ }
+ return 0;
+}
+
static const CaseUnfold_11_Type CaseUnfold_11_Table[] = {
#define CaseUnfold_11 (*(CaseUnfold_11_Type (*)[1005])(CaseUnfold_11_Table+0))
{0x0061, {1, {0x0041}}},
@@ -2230,7 +3730,6 @@ static const CaseUnfold_13_Type CaseUnfold_13_Table[] = {
{{0x03c9, 0x0342, 0x03b9}, {1, {0x1ff7}}},
};
-#define FOLD_TABLE_SIZE 1357
#define UNFOLD1_TABLE_SIZE 1207
#define UNFOLD2_TABLE_SIZE 88
#define UNFOLD3_TABLE_SIZE 23