From fc7a3cca2df6dac4aba0c04d154ce526d21fd5ed Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 20 Sep 2024 12:43:57 +0200 Subject: [PATCH] unictype/scripts: Fix integer overflow in generated table. Reported by clang through a -Wconstant-conversion warning. * lib/gen-uni-tables.c (output_scripts): Generate a level2 array of 'unsigned short', not 'short', values. * lib/unictype/scripts.h: Regenerated. * lib/unictype/scripts.c (uc_script): Update accordingly. --- ChangeLog | 9 + lib/gen-uni-tables.c | 8 +- lib/unictype/scripts.c | 6 +- lib/unictype/scripts.h | 642 ++++++++++++++++++++--------------------- 4 files changed, 338 insertions(+), 327 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4c81f18ad8..18594c5125 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2024-09-20 Bruno Haible + + unictype/scripts: Fix integer overflow in generated table. + Reported by clang through a -Wconstant-conversion warning. + * lib/gen-uni-tables.c (output_scripts): Generate a level2 array of + 'unsigned short', not 'short', values. + * lib/unictype/scripts.h: Regenerated. + * lib/unictype/scripts.c (uc_script): Update accordingly. + 2024-09-20 KO Myung-Hun wait-process: Use waitpid() of LIBCx on OS/2 kLIBC if available. diff --git a/lib/gen-uni-tables.c b/lib/gen-uni-tables.c index 003d4d7b99..617af649f1 100644 --- a/lib/gen-uni-tables.c +++ b/lib/gen-uni-tables.c @@ -5356,7 +5356,7 @@ output_scripts (const char *version) fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); - fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); + fprintf (stream, " unsigned short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned char level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream, " }\n"); fprintf (stream, "u_script =\n"); @@ -5390,11 +5390,13 @@ output_scripts (const char *version) if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; + /* To make the level2 values fit in 16 bits, we use 'unsigned short' + instead of 'short' and add 1 to each value. */ if (offset == 0) - fprintf (stream, " %5d", -1); + fprintf (stream, " %5d", -1 + 1); else fprintf (stream, " %5zu", - (offset - level3_offset) / sizeof (uint8_t)); + (offset - level3_offset) / sizeof (uint8_t) + 1); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } diff --git a/lib/unictype/scripts.c b/lib/unictype/scripts.c index a226d8da28..1d9d13aaad 100644 --- a/lib/unictype/scripts.c +++ b/lib/unictype/scripts.c @@ -35,11 +35,11 @@ uc_script (ucs4_t uc) if (lookup1 >= 0) { unsigned int index2 = (uc >> script_header_2) & script_header_3; - int lookup2 = u_script.level2[lookup1 + index2]; - if (lookup2 >= 0) + unsigned int lookup2 = u_script.level2[lookup1 + index2]; + if (lookup2 > 0) { unsigned int index3 = (uc & script_header_4); - unsigned char lookup3 = u_script.level3[lookup2 + index3]; + unsigned char lookup3 = u_script.level3[(lookup2 - 1) + index3]; if (lookup3 != 0xff) return &scripts[lookup3]; diff --git a/lib/unictype/scripts.h b/lib/unictype/scripts.h index 0052dbaa70..0dbb7594f1 100644 --- a/lib/unictype/scripts.h +++ b/lib/unictype/scripts.h @@ -2368,7 +2368,7 @@ static const struct { int level1[15]; - short level2[5 << 9]; + unsigned short level2[5 << 9]; unsigned char level3[257 << 7]; } u_script = @@ -2378,326 +2378,326 @@ u_script = -1, -1, -1, -1, -1, -1, 2048 }, { - 0, 128, 256, 256, 256, 384, 512, 640, - 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, - 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, - 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, - 3840, 3968, 4096, 4096, 4224, 4352, 4480, 4608, - 4736, 4736, 4736, 4736, 4736, 4864, 4992, 5120, - 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, - 6272, 6400, 6528, 6656, 256, 256, 6784, 6912, - 7040, 7168, 7296, 7424, 7552, 7552, 7552, 7552, - 7680, 7552, 7552, 7552, 7552, 7552, 7552, 7552, - 7808, 7808, 7552, 7552, 7552, 7552, 7936, 8064, - 8192, 8320, 8448, 8576, 8704, 8832, 8960, 9088, - 9216, 9344, 9472, 9600, 9728, 9856, 9984, 7552, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 10112, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 10240, 10240, 10240, 10240, 10240, 10240, 10240, 10240, - 10240, 10368, 10496, 10496, 10624, 10752, 10880, 11008, - 11136, 11264, 11392, 11520, 11648, 11776, 11904, 12032, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 12160, - -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, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 8960, 8960, 12288, 12416, 12544, 12672, - 12800, 12800, 12928, 13056, 13184, 13312, 13440, 13568, - 13696, 13824, 13952, 14080, -1, 14208, 14336, 14464, - 14592, 14720, 14848, 14976, 15104, 15104, 15232, 15360, - 15488, 15616, 15744, 15872, 16000, 16128, 16256, 16384, - 16512, 16640, 16768, 16896, 17024, 17152, 17280, 17408, - 17536, 17664, 17792, 17920, 18048, 18176, 18304, 18432, - 18560, 18688, -1, 18816, 18944, 19072, 19200, -1, - 19328, 19456, 19584, 19712, 19840, 19968, 20096, 20224, - 20352, 20480, 20608, 20736, -1, 20864, 20992, 21120, - 21248, 21248, 21248, 21248, 21248, 21248, 21248, 21376, - 21504, 21248, 21632, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 21760, - 21888, 21888, 21888, 21888, 21888, 21888, 21888, 21888, - 22016, 21888, 21888, 21888, 21888, 21888, 21888, 21888, - 21888, 21888, 21888, 21888, 21888, 21888, 21888, 21888, - 21888, 21888, 21888, 21888, 21888, 21888, 21888, 21888, - 21888, 21888, 21888, 21888, 21888, 21888, 21888, 22144, - 22272, 22272, 22272, 22272, 22400, -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, -1, -1, -1, -1, - -1, -1, 22528, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 22656, 22656, 22656, 22656, 22784, 22912, 23040, 23168, - -1, -1, 23296, -1, 23424, 23552, 23680, 23808, - 23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936, - 23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936, - 23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936, - 23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936, - 23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936, - 23936, 23936, 23936, 23936, 23936, 23936, 23936, 24064, - 23936, 23936, 23936, 23936, 23936, 23936, 24192, 24192, - 24192, 24320, 24448, -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, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 24576, - 24704, 24832, 24960, 25088, 25088, 25216, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 25344, 25472, -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, - 7552, 25600, 7552, 7552, 7552, 25728, 25856, 25984, - 7552, 26112, 26240, 26368, 26496, 26624, 26752, -1, - 26880, 27008, 27136, 7552, 7552, 27264, 7552, 27392, - 27520, 27520, 27520, 27520, 27520, 27648, -1, -1, - -1, -1, -1, -1, -1, -1, 27776, -1, - 27904, 28032, 28160, -1, -1, 28288, -1, -1, - -1, 28416, -1, 28544, -1, -1, -1, 28672, - 28800, 28928, 29056, -1, -1, -1, -1, -1, - 29184, 29312, 29440, -1, 29568, 29696, -1, -1, - 29824, 29952, 7552, 30080, 30208, -1, 7552, 7552, - 7552, 7552, 7552, 7552, 7552, 30336, 30464, 30592, - 30720, 30848, 7552, 7552, 30976, 31104, 7552, 31232, - -1, -1, -1, -1, -1, -1, -1, -1, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 31360, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 31488, 8960, - 31616, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 31744, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 31872, - 8960, 8960, 8960, 8960, 32000, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 8960, 8960, 8960, 8960, 32128, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 32256, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 8960, - 8960, 8960, 8960, 8960, 8960, 8960, 8960, 32384, - -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, -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, -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, -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, -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, -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, -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, -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, - -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, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 32512, -1, 32640, 32768, -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, -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, -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, -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, - -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, -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, -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, -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, -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, -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, -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, 129, 257, 257, 257, 385, 513, 641, + 769, 897, 1025, 1153, 1281, 1409, 1537, 1665, + 1793, 1921, 2049, 2177, 2305, 2433, 2561, 2689, + 2817, 2945, 3073, 3201, 3329, 3457, 3585, 3713, + 3841, 3969, 4097, 4097, 4225, 4353, 4481, 4609, + 4737, 4737, 4737, 4737, 4737, 4865, 4993, 5121, + 5249, 5377, 5505, 5633, 5761, 5889, 6017, 6145, + 6273, 6401, 6529, 6657, 257, 257, 6785, 6913, + 7041, 7169, 7297, 7425, 7553, 7553, 7553, 7553, + 7681, 7553, 7553, 7553, 7553, 7553, 7553, 7553, + 7809, 7809, 7553, 7553, 7553, 7553, 7937, 8065, + 8193, 8321, 8449, 8577, 8705, 8833, 8961, 9089, + 9217, 9345, 9473, 9601, 9729, 9857, 9985, 7553, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 10113, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 10241, 10241, 10241, 10241, 10241, 10241, 10241, 10241, + 10241, 10369, 10497, 10497, 10625, 10753, 10881, 11009, + 11137, 11265, 11393, 11521, 11649, 11777, 11905, 12033, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 12161, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8961, 8961, 12289, 12417, 12545, 12673, + 12801, 12801, 12929, 13057, 13185, 13313, 13441, 13569, + 13697, 13825, 13953, 14081, 0, 14209, 14337, 14465, + 14593, 14721, 14849, 14977, 15105, 15105, 15233, 15361, + 15489, 15617, 15745, 15873, 16001, 16129, 16257, 16385, + 16513, 16641, 16769, 16897, 17025, 17153, 17281, 17409, + 17537, 17665, 17793, 17921, 18049, 18177, 18305, 18433, + 18561, 18689, 0, 18817, 18945, 19073, 19201, 0, + 19329, 19457, 19585, 19713, 19841, 19969, 20097, 20225, + 20353, 20481, 20609, 20737, 0, 20865, 20993, 21121, + 21249, 21249, 21249, 21249, 21249, 21249, 21249, 21377, + 21505, 21249, 21633, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 21761, + 21889, 21889, 21889, 21889, 21889, 21889, 21889, 21889, + 22017, 21889, 21889, 21889, 21889, 21889, 21889, 21889, + 21889, 21889, 21889, 21889, 21889, 21889, 21889, 21889, + 21889, 21889, 21889, 21889, 21889, 21889, 21889, 21889, + 21889, 21889, 21889, 21889, 21889, 21889, 21889, 22145, + 22273, 22273, 22273, 22273, 22401, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22529, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 22657, 22657, 22657, 22657, 22785, 22913, 23041, 23169, + 0, 0, 23297, 0, 23425, 23553, 23681, 23809, + 23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937, + 23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937, + 23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937, + 23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937, + 23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937, + 23937, 23937, 23937, 23937, 23937, 23937, 23937, 24065, + 23937, 23937, 23937, 23937, 23937, 23937, 24193, 24193, + 24193, 24321, 24449, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24577, + 24705, 24833, 24961, 25089, 25089, 25217, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25345, 25473, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 7553, 25601, 7553, 7553, 7553, 25729, 25857, 25985, + 7553, 26113, 26241, 26369, 26497, 26625, 26753, 0, + 26881, 27009, 27137, 7553, 7553, 27265, 7553, 27393, + 27521, 27521, 27521, 27521, 27521, 27649, 0, 0, + 0, 0, 0, 0, 0, 0, 27777, 0, + 27905, 28033, 28161, 0, 0, 28289, 0, 0, + 0, 28417, 0, 28545, 0, 0, 0, 28673, + 28801, 28929, 29057, 0, 0, 0, 0, 0, + 29185, 29313, 29441, 0, 29569, 29697, 0, 0, + 29825, 29953, 7553, 30081, 30209, 0, 7553, 7553, + 7553, 7553, 7553, 7553, 7553, 30337, 30465, 30593, + 30721, 30849, 7553, 7553, 30977, 31105, 7553, 31233, + 0, 0, 0, 0, 0, 0, 0, 0, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 31361, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 31489, 8961, + 31617, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 31745, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 31873, + 8961, 8961, 8961, 8961, 32001, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8961, 8961, 8961, 8961, 32129, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 32257, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, + 8961, 8961, 8961, 8961, 8961, 8961, 8961, 32385, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32513, 0, 32641, 32769, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, -- 2.39.5