/* SPDX-License-Identifier: MIT * HTML character-reference decoder, authored with OpenAI GPT-6 (Codex). * Entity mappings: WHATWG HTML named character reference data, obtained from * Python html.entities.html5. Front-coded sorted names in blocks of eight. * Build: zig cc -target wasm32-freestanding -Oz -msimd128 -nostdlib * -Wl,--no-entry -Wl,--export-memory -Wl,-z,stack-size=16384 * -Wl,--initial-memory=1310720 -Wl,--max-memory=1310720 * -Wl,--export=input_ptr -Wl,--export=input_utf8_cap * -Wl,--export=output_utf8_cap -Wl,--export=render * -Wl,--strip-all unescape.c -o unescape.wasm */ #include #include #define EXPORT __attribute__((visibility("default"))) /* Input starts 209744 bytes ahead of output. The maximum expansion is one * byte per five input bytes (≫⃒ and ≪⃒), at most 209715 bytes for 1 MiB, * so writes cannot overwrite unread input, including 16-byte SIMD copies. * Values are LEB128 codepoints, NUL-terminated (code point 0 is unused). */ static unsigned char buffer[1258320]; EXPORT uint32_t input_ptr(void) { return (uint32_t)(buffer+209744); } EXPORT uint32_t input_utf8_cap(void) { return 1048576; } EXPORT uint32_t output_utf8_cap(void) { return 1258298; } static const unsigned char plen[]={ 5,2,5,5,4,1,2,5,5,4,2,4,2,12,4,3, 6,5,3,9,2,3,2,6,10,2,2,3,4,3,5,4, 4,5,1,17,5,5,4,3,7,3,6,7,2,2,8,5, 10,5,23,18,5,4,1,7,6,12,2,6,29,4,3,2, 6,2,6,3,3,3,5,2,5,5,1,2,2,2,15,3, 22,5,5,4,11,3,1,3,8,19,3,7,9,10,3,12, 24,10,10,3,7,9,11,7,12,7,5,15,9,6,3,14, 15,3,3,5,5,3,4,3,3,5,5,3,1,3,2,5, 7,4,14,15,4,2,6,4,10,8,3,2,2,3,5,10, 3,2,16,15,3,4,8,3,4,1,4,1,5,5,3,1, 4,2,1,3,11,4,9,7,11,10,5,3,1,6,4,1, 5,2,11,3,12,3,4,11,9,4,4,3,5,4,1,3, 3,5,1,3,7,5,2,5,12,12,5,4,2,2,3,5, 5,2,5,1,2,3,3,4,5,4,3,4,5,1,2,3, 4,4,1,5,4,2,8,2,6,4,1,15,4,3,10,7, 17,11,6,3,5,10,6,3,12,6,7,3,5,12,9,6, 15,6,3,5,10,14,9,7,8,10,5,2,1,8,5,12, 18,10,9,10,10,2,12,10,4,1,4,1,3,2,10,7, 3,8,3,3,1,4,5,5,6,1,18,10,6,13,18,8, 7,2,6,14,2,1,9,5,20,7,4,5,5,7,5,9, 17,4,10,5,12,5,12,3,20,2,5,7,4,10,5,20, 17,8,5,10,14,12,3,5,15,5,6,5,5,5,6,5, 21,5,6,5,5,5,9,5,14,3,5,1,5,5,4,1, 6,2,5,4,3,5,3,19,14,1,3,4,5,3,3,6, 9,3,11,8,2,2,2,1,9,12,2,1,6,5,10,5, 5,5,7,2,3,1,4,2,4,3,5,2,5,2,2,2, 6,4,1,1,12,10,13,2,3,16,4,3,9,7,13,11, 15,3,5,3,5,6,7,3,18,12,9,6,3,6,3,5, 4,10,10,3,1,10,6,2,6,5,1,4,4,3,1,2, 14,9,10,7,4,10,3,3,6,12,6,5,6,5,5,3, 4,2,3,5,6,5,10,5,8,1,1,5,5,3,5,4, 5,2,2,1,5,4,1,2,9,2,8,6,4,5,9,5, 4,8,3,4,6,2,4,4,6,4,1,5,2,5,4,7, 10,3,11,3,4,4,2,6,10,9,9,11,3,5,5,9, 14,10,2,3,4,3,5,3,5,3,2,4,1,2,4,1, 11,4,9,5,10,2,3,3,6,5,4,2,3,3,3,1, 4,3,4,3,3,5,4,1,3,3,3,3,4,5,5,1, 4,13,2,2,3,3,6,5,2,1,1,3,3,1,4,1, 3,5,6,2,3,4,2,1,3,3,1,5,1,1,1,2, 6,2,1,1,1,1,1,1,8,2,2,1,3,1,4,4, 4,1,1,4,1,2,2,4,8,4,3,1,3,2,5,3, 8,3,4,7,7,5,3,2,6,3,2,3,4,4,1,4, 6,1,5,3,4,2,1,4,3,5,3,2,4,4,5,5, 7,12,2,5,3,5,5,11,11,8,4,4,5,2,3,1, 5,3,2,4,2,3,1,3,6,3,1,1,1,1,1,1, 5,1,2,1,1,1,1,1,5,1,1,1,1,3,2,1, 5,1,1,1,1,1,1,5,7,5,2,1,1,1,1,1, 5,1,1,1,1,5,4,4,4,3,2,1,2,1,4,3, 6,2,1,1,1,6,1,3,8,3,2,3,1,3,2,4, 6,4,3,3,2,3,4,5,4,5,2,3,3,4,1,2, 4,1,2,11,5,2,1,3,11,4,1,5,3,4,4,3, 5,1,1,3,1,1,2,6,9,2,3,3,2,3,1,2, 5,3,3,2,1,1,1,4,7,1,3,2,4,1,1,5, 6,2,3,2,1,4,1,8,11,3,5,3,11,5,3,3, 8,3,5,4,3,5,4,2,4,1,6,3,5,1,1,5, 5,5,2,3,5,5,1,4,5,3,3,4,1,1,5,3, 3,3,7,3,3,5,3,5,4,1,2,3,5,4,6,12, 9,10,11,5,7,4,3,3,4,2,4,4,2,1,4,3, 7,3,6,5,2,5,4,5,4,1,4,1,3,1,4,1, 2,4,1,3,1,6,1,1,6,4,3,3,1,2,2,1, 3,2,4,2,3,2,3,2,7,1,5,4,3,7,4,4, 6,2,2,6,4,3,3,3,4,2,1,3,2,3,3,9, 12,13,2,5,5,3,3,1,5,4,3,3,3,3,3,4, 4,1,7,5,1,1,1,1,6,2,1,2,1,1,2,2, 6,2,2,3,3,2,1,5,5,1,1,5,4,1,3,1, 3,1,1,5,1,2,3,1,8,1,2,2,1,1,4,3, 2,1,1,1,2,2,4,1,4,1,3,3,4,3,2,1, 5,1,2,2,3,4,5,7,6,3,6,5,4,3,8,2, 4,5,2,4,4,1,3,1,4,4,5,3,4,4,2,7, 8,4,4,11,10,2,4,3,6,4,5,4,6,1,3,1, 4,3,2,1,5,1,4,2,6,3,4,4,2,4,4,2, 4,3,1,4,3,3,4,1,6,5,4,5,4,3,3,2, 4,4,5,3,2,1,3,1,6,1,1,4,4,2,5,1, 3,4,3,3,4,4,5,1,6,1,2,5,3,3,3,3, 5,2,4,4,1,1,3,5,8,4,4,2,1,2,1,3, 4,1,2,2,2,2,2,3,6,1,3,1,1,4,3,4, 6,2,3,1,5,4,2,2,3,3,3,1,5,5,2,1, 9,4,11,2,10,10,1,8,19,10,1,1,1,5,1,2, 6,1,1,1,2,7,3,5,10,3,3,5,4,1,1,1, 5,1,1,3,3,1,3,6,6,3,5,4,4,2,2,4, 3,1,1,3,4,2,3,11,18,6,10,11,5,3,1,3, 7,4,3,1,4,1,3,2,5,6,3,1,1,3,5,2, 3,2,1,1,2,2,1,4,2,2,2,3,4,4,4,5, 6,1,1,1,7,4,8,2,5,3,2,1,3,1,3,4, 10,2,4,5,1,4,12,2,3,4,1,3,3,3,3,1, 6,1,3,2,5,5,2,1,4,4,1,6,3,3,1,1, 10,10,1,1,1,10,5,4,5,4,2,1,1,2,2,4, 5,2,1,3,3,1,3,3,6,3,3,2,1,4,1,3, 6,1,2,3,4,4,2,4,7,2,2,1,1,1,5,1, 5,1,1,4,3,3,1,1,4,1,3,4,1,3,2,1, 10,10,1,1,5,1,1,3,3,2,1,3,3,1,2,1, 8,2,1,1,2,2,1,1,4,5,2,1,5,1,3,1, 5,2,4,3,1,1,9,3,6,2,3,1,1,7,8,2, 5,1,3,3,5,2,2,1,5,3,2,1,2,2,1,1, 5,3,2,1,3,4,2,11,15,5,2,1,1,3,2,5, 6,2,4,2,1,5,4,1,4,3,4,4,3,4,4,1, 7,4,2,5,2,3,1,1,5,4,2,2,4,4,4,1, 4,4,1,4,1,3,4,3,7,3,1,4,3,5,1,3, 4,3,3,3,1,3,1,2,7,1,1,4,2,5,1,3, 6,2,5,3,2,3,4,3,4,4,3,1,1,2,5,3, 6,1,4,2,2,1,4,3,2,7,1,5,1,2,2,4, 5,3,2,1,1,2,3,3,2,7,2,3,1,1,2,3, 3,1,6,7,2,7,3,3,7,3,1,2,2,3,2,5, 8,4,1,2,3,4,3,1,6,3,3,3,5,3,10,3, 5,2,2,5,2,4,4,3,4,3,3,6,2,1,1,2, 5,2,2,1,2,1,2,2,6,2,3,2,1,4,2,4, 5,3,4,1,2,3,1,5,6,2,2,1,3,5,3,1, 4,3,3,4,1,2,1,5,6,1,4,1,1,1,1,9, 14,11,2,10,8,11,10,10,4,10,4,3,1,5,4,4, 5,2,3,3,1,3,5,3,6,6,4,5,2,1,2,2, 6,5,4,2,1,1,4,6,2,6,4,1,1,2,3,3, 3,3,3,2,2,3,6,3,3,3,1,1,4,4,1,2, 4,2,4,6,1,2,2,3,5,4,1,6,8,1,4,1, 6,1,3,1,1,1,1,1,5,2,4,4,4,12,3,6, 4,2,1,1,1,5,1,1,6,2,5,3,1,4,1,2, 6,3,1,3,2,1,1,3,10,1,3,1,1,4,3,4, 6,4,3,1,13,3,2,2,4,3,1,3,4,2,1,4, 7,3,2,1,3,1,2,2,6,2,6,7,2,7,3,3, 7,1,2,1,1,1,1,1,6,3,1,3,4,2,4,4, 5,1,4,3,2,1,3,1,6,2,1,4,4,1,2,4, 5,6,1,3,5,4,1,3,6,2,5,4,2,3,1,9, 8,3,3,3,3,4,3,1,8,1,2,3,1,3,3,1, 7,2,5,4,6,4,4,2,9,5,2,3,1,5,4,2, 7,6,3,1,3,4,4,14,17,4,3,5,2,4,3,4, 3,4,4,3,5,1,5,4,5,3,5,2,3,3,4,1, 5,2,6,9,11,5,3,2,5,3,8,5,2,3,3,3, 4,4,4,2,1,4,2,6,4,3,1,4,5,8,5,7, 6,1,5,1,2,5,8,1,12,1,5,11,5,2,4,2, 6,2,4,4,1,2,4,4,5,3,4,4,3,4,1,3, 6,6,5,5,2,1,4,2,4,1,1,4,3,4,3,2, 5,2,4,3,1,4,3,3,4,4,2,3,4,4,3,3, 6,5,3,3,5,6,1,4,3,2,2,3,3,3,3,2, 6,5,1,3,5,2,2,3,7,3,3,2,2, }; static const unsigned char pfx_bits[]={ 32,132,16,68,8,32,132,32,66,8,32,4,32,70,8,64, 132,16,66,0,32,136,33,130,16,32,4,17,66,48,192,132, 161,66,17,96,136,33,66,8,0,136,16,66,16,32,136,48, 66,88,96,173,33,130,24,64,24,100,148,58,64,153,101,144, 17,32,17,130,144,35,224,145,67,130,0,32,4,33,66,8, 32,136,18,68,8,96,4,17,66,16,32,4,19,132,8,32, 132,18,130,16,32,132,16,216,57,224,156,16,64,16,32,132, 32,130,8,0,132,16,130,8,32,4,49,68,24,64,164,32, 68,8,64,0,17,66,16,0,132,16,68,8,0,132,32,132, 16,64,136,80,82,34,192,32,71,72,34,224,20,198,136,49, 128,40,66,4,33,128,144,16,68,8,128,16,68,132,40,64, 136,0,66,16,32,132,16,64,8,64,4,180,144,48,32,4, 33,196,32,96,16,68,134,82,64,41,53,206,120,160,156,115, 206,25,96,172,53,8,132,224,173,72,82,89,96,149,53,16, 66,32,132,0,66,16,32,132,32,68,8,32,4,17,70,8, 0,17,16,66,8,32,136,32,16,66,64,12,21,4,8,32, 128,16,132,32,64,136,32,208,9,32,24,165,74,57,224,149, 130,144,105,160,156,211,202,42,64,132,32,2,16,32,4,33, 132,8,160,148,18,66,8,192,24,134,156,9,32,12,35,16, 66,64,136,129,6,8,64,4,17,132,8,96,136,17,74,41, 32,4,1,4,9,32,136,16,66,8,32,21,81,130,8,224, 8,33,138,16,160,8,18,66,8,32,132,80,130,24,0,33, 52,66,8,0,132,16,2,8,32,128,16,66,16,32,132,0, 66,16,32,136,16,2,8,64,8,33,68,8,32,132,33,194, 16,96,140,49,196,24,192,156,115,206,57,96,148,51,200,8, 32,8,33,132,16,32,4,33,74,8,64,128,64,8,57,96, 152,64,130,8,192,8,33,196,24,32,16,50,8,25,96,172, 49,70,8,160,180,214,134,32,64,132,33,130,24,64,16,66, 6,33,128,12,66,200,32,128,16,66,198,32,128,12,66,8, 25,96,12,66,200,32,128,16,66,66,16,64,8,34,8,9, 64,16,82,128,24,96,144,49,196,8,64,8,81,66,16,128, 132,32,138,8,96,16,178,204,57,224,140,49,70,40,160,24, 81,6,33,64,144,33,198,32,64,4,65,6,9,192,136,33, 140,24,128,140,49,132,25,160,148,49,148,16,64,4,16,130, 16,128,4,17,68,16,64,4,33,130,8,32,144,67,132,16, 96,152,17,194,8,64,140,50,198,16,128,144,21,196,8,64, 136,32,72,16,32,8,32,130,8,128,8,17,66,16,64,136, 17,132,16,32,136,82,4,41,64,4,17,136,16,128,132,33, 198,17,96,20,17,68,16,32,136,32,130,16,0,132,16,196, 16,32,4,33,66,16,128,132,80,74,41,128,20,82,10,33, 128,12,17,128,8,160,136,16,68,8,64,140,33,198,48,96, 144,16,68,8,64,8,17,4,17,128,136,16,130,32,32,136, 33,132,16,96,140,50,70,16,32,8,33,6,33,32,4,35, 68,8,32,8,65,132,8,64,4,1,130,16,64,4,17,130, 24,64,132,48,8,25,64,4,33,138,16,96,144,49,130,16, 32,132,32,8,33,128,4,17,4,16,32,132,32,2,40,64, 132,16,66,8,64,136,16,68,8,64,8,65,136,16,128,20, 66,8,33,64,140,65,130,16,96,16,19,196,16,32,136,34, 134,8,32,145,69,136,75,128,8,49,134,24,192,156,65,6, 33,128,144,32,68,16,128,20,17,130,16,64,4,97,130,32, 96,16,17,134,16,128,16,145,196,24,64,12,49,70,32,64, 136,34,68,16,64,16,34,70,17,64,12,33,132,16,96,16, 18,70,16,32,136,65,196,48,192,136,32,66,8,32,136,49, 134,40,192,4,17,130,8,64,4,33,128,24,160,8,49,66, 16,64,8,49,198,24,160,156,32,74,24,64,20,33,66,16, 128,20,33,196,16,32,4,49,8,25,64,140,32,68,16,64, 132,32,132,16,160,12,66,6,17,96,148,16,196,40,160,24, 51,138,49,128,16,34,196,24,160,4,81,138,16,32,140,49, 132,17,160,8,33,138,32,128,156,52,202,32,128,156,20,132, 16,32,185,32,198,8,64,8,49,132,24,128,136,33,130,32, 64,128,32,2,17,64,8,33,66,16,64,136,32,66,16,64, 136,32,196,24,32,8,17,132,24,96,12,33,132,8,64,132, 97,66,0,128,12,50,66,24,96,140,16,134,16,64,136,96, 136,32,128,144,66,8,33,32,8,17,132,16,96,16,66,72, 41,64,20,49,134,24,128,12,34,68,16,0,132,16,66,32, 160,8,32,68,8,96,8,33,8,33,64,16,82,8,33,128, 16,66,196,40,64,136,50,136,9,96,8,17,132,40,32,16, 66,132,8,64,4,82,196,8,160,176,146,74,41,64,4,33, 130,9,96,8,49,134,8,64,132,32,132,24,32,8,65,8, 9,0,132,32,196,16,96,8,49,134,16,32,16,18,4,41, 64,8,65,68,24,64,12,81,68,40,64,140,65,6,25,96, 140,17,194,16,96,136,65,130,24,64,4,51,66,25,64,148, 130,72,41,64,140,50,66,16,64,4,34,208,8,96,12,50, 6,25,96,24,100,18,33,64,16,66,72,41,64,8,49,198, 24,128,12,50,202,24,128,140,97,144,73,128,148,32,72,17, 0,136,16,132,8,32,132,50,74,17,96,136,33,130,40,160, 136,32,198,24,64,132,32,16,98,0,181,49,198,24,64,132, 33,68,16,0,132,32,194,8,32,8,17,68,8,64,4,51, 68,16,64,4,33,146,16,128,136,96,134,16,32,8,65,130, 8,32,144,16,196,24,128,144,65,6,97,128,13,178,66,8, 96,8,49,66,8,32,132,16,68,25,32,128,48,138,8,32, 4,17,128,16,32,4,17,130,8,32,136,33,130,8,32,136, 16,192,8,32,132,16,66,16,32,136,16,68,8,32,132,32, 0, }; static const unsigned char sfx_bits[]={ 138,243,178,170,149,145,38,126,163,101,141,230,168,201,214,38, 159,214,106,77,230,168,242,206,43,9,147,102,29,159,178,42, 199,115,58,207,47,255,224,177,121,179,114,92,179,177,106,155, 181,98,219,172,26,223,236,123,162,56,252,46,164,233,218,47, 105,175,117,174,163,167,201,163,38,137,219,232,130,214,177,140, 191,47,107,223,100,90,203,115,90,163,57,106,155,53,14,207, 40,205,68,38,207,96,153,72,154,248,141,206,236,77,190,13, 155,166,104,141,198,55,75,190,13,255,162,188,109,146,181,28, 163,39,251,178,181,201,152,114,204,198,247,41,223,232,201,190, 47,25,223,104,221,200,119,90,175,44,91,155,47,218,200,183, 197,198,184,205,176,181,249,162,217,139,219,29,11,163,246,43, 155,174,206,218,40,35,199,183,140,215,82,124,163,106,77,190, 54,202,224,245,203,55,50,94,190,168,134,203,55,170,225,242, 141,202,175,28,163,177,90,227,104,124,51,114,204,198,247,45, 227,181,20,223,168,90,147,239,156,214,242,137,155,55,30,223, 104,205,188,178,233,234,172,141,50,114,124,203,120,45,197,55, 170,214,228,91,203,182,109,155,53,62,51,248,204,144,115,211, 200,119,77,174,231,100,242,156,201,143,38,79,170,42,90,215, 117,67,218,107,110,146,181,28,243,232,123,147,105,205,146,102, 205,222,172,73,190,138,137,223,104,35,223,13,75,154,53,123, 179,38,249,54,50,94,190,168,98,226,55,10,213,100,142,118, 236,123,162,176,28,159,105,138,214,104,124,179,228,219,200,115, 122,55,242,221,200,183,67,227,228,139,151,47,202,200,241,45, 227,181,20,223,168,90,147,111,35,223,122,172,212,181,172,87, 104,122,43,117,45,235,27,171,174,183,82,215,178,222,161,168, 28,171,21,154,222,74,93,203,122,35,227,229,139,86,114,172, 86,104,122,111,172,186,222,74,93,203,250,198,170,235,173,212, 181,172,111,172,186,222,74,93,203,122,135,162,222,172,212,181, 172,55,178,30,43,117,45,235,31,90,223,172,73,190,11,89, 235,177,82,215,178,222,200,122,172,212,181,172,47,100,237,205, 74,93,203,250,82,163,57,90,161,233,189,177,234,122,127,168, 121,203,117,135,162,31,106,222,114,253,161,230,45,215,11,89, 111,172,186,222,29,138,126,168,121,203,117,35,235,241,198,170, 235,253,161,230,45,215,11,89,119,40,170,212,181,172,147,117, 45,235,182,89,223,181,236,58,23,228,116,17,105,226,55,106, 146,181,28,179,181,201,159,242,157,214,106,77,230,168,243,162, 48,26,223,48,105,214,243,205,115,48,249,190,28,141,147,53, 250,161,53,207,193,228,251,114,52,78,214,168,172,202,241,156, 206,54,251,202,49,141,147,175,67,227,228,219,177,239,137,178, 47,91,214,44,14,219,102,205,194,55,137,195,239,206,218,183, 61,203,49,26,223,44,249,58,143,201,167,53,251,190,232,201, 193,228,251,114,52,78,214,232,135,214,60,7,147,239,203,209, 56,89,163,242,156,214,202,251,226,53,139,214,119,157,218,102, 13,77,38,223,145,48,76,158,101,141,230,168,137,158,236,203, 214,38,15,157,242,157,214,170,60,167,53,74,222,104,237,208, 56,249,86,168,109,63,248,251,58,52,78,190,80,141,146,55, 90,67,53,74,222,104,93,161,182,205,189,100,124,59,52,78, 190,29,251,158,168,109,214,119,164,108,141,201,147,38,234,222, 145,201,214,102,90,179,111,137,214,55,55,147,38,42,207,105, 205,246,114,124,147,111,197,198,168,109,214,119,45,187,56,60, 55,178,30,71,56,60,71,56,60,59,52,78,190,146,99,242, 211,203,170,152,201,147,38,126,163,38,91,155,252,41,223,82, 90,171,53,153,163,48,105,214,42,27,147,53,47,205,47,139, 218,241,141,170,53,249,74,241,141,214,54,106,222,172,28,231, 172,205,150,47,202,200,48,76,118,44,140,218,178,42,199,115, 122,147,182,89,223,236,123,162,18,238,154,60,252,78,38,91, 155,124,90,203,115,106,155,53,90,155,252,132,187,38,79,69, 38,63,153,60,57,207,164,137,158,236,203,167,181,60,167,148, 109,214,213,100,242,29,105,226,55,10,151,39,25,171,243,75, 154,232,93,167,117,93,153,100,45,199,232,201,190,60,154,222, 74,172,190,232,82,147,166,139,222,117,45,235,11,89,111,172, 186,222,74,93,203,58,131,178,47,27,171,21,154,222,141,140, 151,47,186,212,164,233,162,183,30,119,40,250,161,230,45,215, 31,106,222,114,189,144,245,243,202,114,189,177,234,122,43,117, 45,235,31,106,222,114,221,161,104,133,166,119,135,162,74,93, 203,250,135,154,183,92,215,44,25,171,47,186,144,181,67,227, 228,235,205,141,172,199,31,106,222,114,221,161,232,135,154,183, 92,127,168,121,203,117,133,166,183,55,127,168,121,203,245,66, 214,31,106,222,114,189,144,53,89,215,178,94,179,234,122,147, 117,45,235,182,237,208,56,249,66,53,74,222,104,253,224,239, 235,208,56,249,66,53,74,222,104,93,161,182,93,161,182,205, 189,100,124,59,52,78,190,29,251,158,104,90,191,104,122,147, 117,45,235,48,123,202,183,28,171,21,154,222,74,93,203,122, 37,199,106,133,166,247,198,170,235,173,212,181,172,111,172,186, 222,74,93,203,250,139,166,55,89,215,178,94,179,234,122,147, 117,45,235,53,171,174,55,89,215,178,62,167,58,90,87,104, 122,43,117,45,235,27,171,174,183,82,215,178,94,217,102,189, 222,181,236,222,22,57,155,60,122,178,56,204,205,164,137,190, 47,27,223,117,106,165,53,27,227,118,246,226,182,60,167,182, 89,227,215,100,242,164,137,223,168,73,214,114,124,153,232,201, 190,60,170,146,55,155,163,22,122,178,56,204,205,164,137,118, 43,107,186,220,76,154,104,204,205,164,137,126,104,205,119,43, 27,115,51,105,162,246,141,158,80,141,146,55,90,67,53,74, 222,104,93,161,182,93,161,182,125,161,122,197,198,104,90,203, 75,141,146,110,188,212,40,233,178,177,202,205,164,137,206,233, 205,200,177,90,227,104,124,227,51,67,206,151,124,55,50,94, 190,232,135,214,55,107,146,239,66,214,206,139,194,104,124,211, 56,249,118,236,123,162,59,107,223,54,84,163,228,141,214,14, 141,147,239,131,191,175,67,227,228,123,201,55,84,163,228,141, 214,80,141,146,55,90,87,168,109,115,47,25,223,14,141,147, 111,199,190,39,26,225,240,220,200,122,28,225,240,236,208,56, 249,86,104,122,119,53,75,198,234,139,46,100,125,201,119,133, 166,119,87,179,100,172,190,168,67,227,228,107,219,14,141,147, 47,84,163,228,141,214,21,106,219,220,75,198,183,67,227,228, 219,177,239,137,94,168,125,163,39,84,163,228,141,214,80,141, 146,55,90,95,242,125,161,246,141,158,21,106,219,21,106,219, 89,141,154,232,137,218,14,141,147,47,247,146,241,237,208,56, 249,110,104,142,214,54,234,188,40,140,198,55,171,174,119,87, 179,100,172,190,232,66,214,14,141,147,239,37,223,28,141,147, 53,202,225,165,141,222,14,141,147,239,140,214,54,122,59,52, 78,190,120,105,163,183,67,227,228,107,154,40,122,218,14,141, 147,239,37,223,28,110,154,40,122,218,220,75,198,183,67,227, 228,219,177,239,137,206,104,109,163,183,67,227,228,219,177,239, 137,58,52,78,190,15,254,190,14,141,147,111,199,190,39,122, 201,247,135,214,55,107,146,239,66,214,182,89,223,236,123,162, 56,230,188,172,74,154,248,141,154,108,109,242,216,89,190,164, 153,214,106,77,230,40,76,154,53,170,146,172,89,203,177,60, 167,51,26,51,120,253,242,141,140,151,47,170,225,242,141,98, 51,26,51,120,253,242,26,46,223,104,109,155,245,75,218,235, 205,190,39,10,163,54,14,191,57,90,47,100,141,229,104,189, 212,164,137,186,232,157,145,53,26,223,43,106,179,118,70,214, 55,75,190,141,201,167,245,202,178,217,139,219,22,27,227,182, 204,198,38,89,163,243,75,198,232,156,214,168,137,158,168,237, 208,56,249,114,47,25,223,14,141,147,111,199,190,39,154,213, 44,140,202,39,110,222,179,92,223,172,28,147,175,109,214,172, 230,97,93,90,107,242,156,218,102,189,45,100,93,59,16,105, 226,55,26,171,117,125,191,155,73,214,114,140,158,236,203,163, 57,90,219,168,243,162,48,26,223,52,206,190,108,89,179,56, 236,205,14,141,179,47,91,214,44,14,167,245,182,202,172,186, 222,74,172,190,232,82,147,166,139,222,117,45,235,11,89,87, 104,122,43,117,45,235,12,202,190,108,172,54,50,94,190,232, 82,147,166,139,222,122,220,161,232,135,154,183,92,111,172,186, 222,141,172,199,31,106,222,114,189,144,245,243,202,114,221,161, 168,82,215,178,254,161,230,45,215,53,75,198,234,139,46,100, 189,177,234,122,119,53,75,198,234,139,58,52,78,190,222,220, 200,122,252,161,230,45,215,29,138,126,168,121,203,245,135,154, 183,92,47,100,253,161,230,45,215,11,89,147,117,45,235,155, 60,167,120,124,74,240,252,178,168,93,179,234,122,147,117,45, 235,182,89,175,248,139,54,232,75,242,232,201,69,76,100,242, 38,207,97,79,103,242,164,137,223,168,73,214,114,140,158,236, 203,214,38,159,214,220,42,215,119,35,235,177,82,215,178,94, 161,233,173,212,181,172,111,172,186,222,74,93,203,186,55,43, 117,45,235,172,10,147,48,249,190,12,91,155,47,42,207,41, 93,223,28,141,147,53,42,197,55,90,219,168,121,179,114,204, 225,165,141,222,14,141,147,239,140,214,54,122,59,52,78,190, 94,204,202,177,109,214,220,77,214,120,105,163,183,67,227,228, 107,154,40,122,218,14,141,147,47,247,146,241,237,208,56,249, 118,236,123,162,28,110,174,221,74,222,240,140,214,54,122,59, 52,78,190,54,122,119,17,182,93,155,210,56,29,23,153,188, 201,147,37,110,146,181,28,163,39,251,242,105,221,173,104,141, 166,114,141,222,36,107,186,220,76,154,104,204,205,164,137,178, 239,137,58,52,78,190,15,254,190,14,141,147,111,199,190,39, 218,201,115,90,179,243,139,54,242,109,155,245,93,203,174,71, 154,248,141,214,181,108,178,117,89,155,188,87,214,104,142,154, 108,109,242,103,249,146,102,90,171,53,153,163,48,105,214,241, 137,214,11,89,123,241,137,214,75,77,154,168,139,222,25,89, 163,241,189,162,54,107,179,114,156,189,184,45,171,114,60,167, 179,82,215,178,238,205,74,93,203,250,66,214,141,172,199,74, 93,203,122,35,235,177,82,215,178,238,208,56,251,178,101,205, 226,112,135,162,74,93,203,58,89,215,178,126,202,122,76,214, 181,172,123,243,140,214,21,154,222,74,93,203,250,198,170,235, 173,212,181,172,219,236,43,199,53,27,171,182,89,223,236,123, 162,56,252,126,13,105,175,37,89,155,252,73,218,235,139,162, 117,73,214,247,135,214,55,107,146,239,66,214,21,27,163,28, 58,147,53,121,203,117,199,190,39,202,119,43,27,115,51,105, 162,105,45,207,169,109,214,95,126,146,246,10,154,108,109,162, 167,138,166,181,60,167,182,89,135,105,205,134,242,156,218,102, 45,42,38,47,153,188,103,242,164,137,223,168,201,214,38,47, 166,181,60,167,182,89,227,240,59,70,38,79,154,248,141,154, 100,45,199,252,120,202,55,90,203,32,123,222,43,55,147,38, 122,147,105,45,207,169,109,214,36,105,226,55,90,214,104,142, 146,166,115,178,181,137,223,40,143,190,172,154,146,105,173,214, 100,142,190,104,106,243,240,188,206,43,9,147,102,253,170,51, 25,159,100,124,158,246,43,207,104,174,162,47,74,198,42,108, 159,36,89,154,39,154,170,100,172,194,246,73,174,245,157,151, 167,61,175,119,79,214,181,172,202,49,41,207,233,236,144,38, 91,163,236,41,219,115,45,239,228,60,215,242,142,210,53,27, 171,182,89,223,60,60,163,244,205,190,39,138,195,47,169,155, 114,204,198,55,27,223,229,37,223,164,233,154,114,172,162,179, 205,190,114,60,215,44,140,218,44,140,210,37,89,231,40,170, 163,167,138,150,181,123,151,181,107,202,177,202,159,52,46,151, 168,73,226,54,10,207,55,159,207,54,91,199,50,126,147,171, 142,162,113,153,214,172,106,146,51,91,155,248,44,159,242,61, 191,184,125,179,48,106,219,180,137,207,37,171,218,55,89,223, 53,75,198,234,139,158,178,30,227,51,62,191,184,157,163,168, 142,158,42,234,146,181,172,191,164,233,190,114,143,198,42,90, 190,164,233,218,52,78,214,232,93,179,100,172,190,232,41,235, 241,139,166,119,205,170,235,29,187,110,32,16,229,235,14,132, 108,186,49,74,227,108,46,223,242,156,222,183,12,151,178,126, 179,232,222,84,219,91,71,141,87,202,123,116,226,94,181,189, 245,23,149,242,254,85,219,250,214,165,188,159,213,86,202,251, 249,214,107,227,157,56,204,198,184,93,202,251,252,226,246,205, 194,168,141,87,219,91,231,81,41,239,121,181,173,111,61,215, 44,140,214,104,142,230,37,89,151,182,89,163,48,203,194,168, 252,150,171,141,151,248,251,150,248,251,162,55,60,59,40,109, 146,38,126,163,51,25,159,38,57,151,181,137,207,38,57,227, 243,41,223,118,141,222,114,108,146,179,109,154,100,45,199,232, 201,190,108,109,226,179,109,195,167,124,163,39,251,194,243,205, 231,38,26,223,104,125,202,119,90,175,38,143,154,46,76,214, 46,203,214,38,91,59,38,74,191,40,89,215,178,254,162,233, 93,179,234,122,159,27,71,218,183,201,214,230,139,158,38,91, 155,39,105,175,104,26,179,241,13,179,167,109,178,245,139,151, 54,206,222,166,252,202,49,74,195,48,121,207,105,252,162,48, 26,223,166,12,207,47,186,163,118,172,158,242,205,198,247,156, 214,242,201,219,181,89,147,117,45,219,182,109,214,120,137,206, 232,125,202,183,137,159,100,93,191,53,58,215,182,249,146,117, 61,207,101,109,146,179,137,207,38,57,227,243,41,223,114,109, 215,100,93,195,47,143,210,115,141,154,38,94,191,60,74,219, 184,105,230,40,170,163,167,138,214,104,156,163,100,93,203,250, 139,166,119,205,170,235,157,163,168,142,158,166,110,202,49,27, 223,108,124,243,175,121,243,167,82,215,17,89,147,170,138,214, 47,122,175,117,125,146,246,154,151,46,89,203,250,75,154,38, 89,203,49,127,146,170,138,214,231,73,214,181,124,219,40,141, 170,239,77,194,243,205,231,41,107,175,119,189,146,245,123,174, 100,93,179,36,44,199,167,141,179,183,141,170,36,12,147,54, 27,159,108,206,158,168,28,223,44,140,218,114,188,183,38,255, 154,114,29,215,242,44,191,47,89,159,242,156,222,40,125,202, 55,204,198,184,61,191,184,109,211,56,89,163,120,249,162,37, 89,235,232,169,162,167,172,199,100,93,203,250,41,235,49,89, 215,178,110,175,100,61,203,114,252,162,233,93,179,234,122,215, 165,75,214,178,110,202,117,92,203,179,109,214,167,109,242,242, 123,215,178,123,159,242,93,179,41,78,214,245,74,214,167,78, 198,234,139,246,38,207,170,53,89,215,104,211,200,183,124,147, 38,126,163,246,141,214,38,89,203,49,106,178,181,41,191,114, 204,159,242,141,166,141,124,215,168,90,147,57,106,159,242,253, 178,241,141,214,246,107,163,175,125,202,55,76,154,245,124,243, 54,122,231,246,28,12,4,26,171,246,44,171,114,60,167,51, 89,219,239,139,219,54,139,206,54,251,202,113,78,155,108,109, 202,175,28,219,44,252,146,241,173,222,245,139,218,54,78,190, 54,74,227,168,125,179,121,211,228,51,89,219,111,221,200,55, 89,215,182,89,159,242,141,218,44,124,147,43,14,191,181,188, 155,47,107,223,51,106,222,228,205,202,49,186,207,114,140,198, 55,75,190,104,74,190,47,27,171,167,124,219,40,109,242,40, 76,190,104,202,190,172,250,178,234,203,170,117,202,190,172,218, 190,172,250,146,247,203,170,119,108,199,114,42,207,105,77,190, 111,42,215,110,62,147,245,205,198,119,77,154,129,48,16,133, 145,214,164,25,32,194,80,12,68,129,16,69,97,164,53,105, 22,200,129,216,175,172,199,182,89,171,206,75,154,248,141,170, 36,12,147,231,92,214,104,142,154,108,109,242,167,124,163,42, 250,210,180,253,146,241,109,155,230,41,223,178,138,218,167,124, 203,239,139,218,105,173,170,44,140,190,173,201,171,175,67,182, 177,67,206,115,45,239,168,26,163,52,109,179,176,60,167,53, 153,163,182,89,179,48,170,218,44,252,222,166,201,214,167,124, 191,25,89,211,56,106,223,53,57,207,181,188,171,119,77,214, 245,41,223,40,253,162,182,77,191,168,109,191,168,109,219,44, 156,163,245,29,163,52,29,59,171,82,215,36,91,219,243,155, 194,236,123,215,167,201,215,38,91,235,107,73,214,38,91,155, 40,89,223,54,206,222,239,203,206,181,41,199,105,237,218,40, 89,203,250,234,218,58,89,203,186,76,214,53,124,175,183,236, 190,104,122,147,117,45,235,53,171,174,55,89,215,178,62,167, 117,73,214,182,89,175,246,75,218,235,93,203,46,95,226,239, 59,175,104,204,146,38,126,163,38,91,155,60,139,154,252,110, 190,105,90,171,53,153,163,44,203,198,119,124,179,108,156,178, 177,124,147,237,203,170,48,105,214,42,250,178,49,58,147,245, 125,175,44,44,167,51,122,198,38,89,163,41,27,223,44,42, 159,242,125,179,241,109,146,47,170,162,181,93,155,228,251,146, 245,234,206,181,124,202,38,175,202,241,156,178,242,77,206,181, 124,210,56,106,223,182,89,179,177,115,202,183,205,218,108,108, 231,249,205,190,39,138,187,38,15,191,173,201,214,38,223,166, 53,76,222,171,60,167,182,89,163,181,201,227,174,201,187,228, 60,147,185,107,162,39,251,242,105,173,214,40,26,175,38,223, 154,188,60,167,182,89,191,10,89,215,117,125,147,236,187,144, 117,237,168,17,89,147,38,126,163,47,137,194,243,205,231,106, 77,198,112,121,146,177,122,190,232,76,227,242,75,214,117,153, 218,169,189,186,239,60,191,54,11,191,100,93,223,239,77,178, 47,106,151,100,93,151,181,91,147,38,250,150,53,105,186,46, 106,191,39,110,146,181,28,163,39,251,178,47,94,190,38,127, 154,36,141,203,117,125,174,100,141,219,43,89,219,43,250,162, 233,77,214,181,172,223,36,251,174,100,61,203,114,124,202,122, 140,207,47,154,222,100,93,203,186,93,179,234,122,147,117,45, 235,246,74,214,179,44,199,246,139,166,119,205,170,235,109,211, 56,171,146,117,45,235,247,90,163,232,205,194,168,173,210,180, 253,146,241,109,155,230,139,218,167,124,203,181,138,218,54,57, 207,181,188,159,242,141,210,234,93,191,168,109,163,52,173,222, 181,122,215,54,11,167,172,189,222,175,44,215,181,234,188,43, 89,159,248,91,190,110,107,242,47,89,215,166,92,199,104,253, 190,43,89,159,119,205,194,236,41,223,50,110,223,164,185,162, 177,67,206,115,45,239,111,140,210,180,205,194,50,25,171,117, 93,214,110,172,190,104,122,147,117,45,235,175,28,171,47,154, 222,53,171,174,55,89,215,178,14,147,179,125,203,53,171,174, 55,89,215,178,46,207,100,93,203,250,139,166,119,205,170,235, 61,147,117,250,226,246,43,223,44,140,218,58,105,223,37,89, 247,104,172,162,233,76,214,239,253,214,100,93,155,114,29,163, 245,74,214,39,124,215,172,77,210,184,108,214,175,189,178,48, 170,210,37,46,215,119,45,187,239,109,154,108,125,202,247,90, 163,40,11,163,246,75,214,53,141,163,246,253,222,117,70,214, 44,154,226,245,105,175,100,141,175,100,157,163,245,29,163,52, 29,59,112,211,200,55,105,214,47,122,163,54,58,219,183,124, 202,122,12,147,179,125,203,47,154,222,248,92,187,104,109,202, 48,76,242,39,105,175,40,105,227,53,122,146,177,250,162,105, 13,175,50,107,214,242,73,218,183,201,214,167,124,199,184,93, 194,108,140,219,39,254,154,243,89,199,243,139,219,242,137,190, 246,156,206,176,109,214,247,44,219,248,123,179,48,57,195,228, 28,67,234,157,199,21,154,222,100,93,203,122,205,170,235,77, 214,181,172,191,119,190,177,234,122,147,117,45,235,95,67,218, 235,73,218,107,76,150,47,105,226,55,26,171,179,195,158,178, 61,215,242,30,147,55,94,147,175,93,218,51,14,207,168,73, 206,181,28,199,38,122,178,175,28,171,167,124,227,51,127,146, 246,138,42,117,29,163,100,189,186,181,172,159,242,77,227,108, 110,163,100,205,194,59,107,223,49,186,179,246,109,167,181,234, 160,52,109,191,100,124,219,177,106,179,240,93,175,74,93,147, 117,61,147,53,107,199,172,125,230,173,201,191,74,93,59,100, 93,159,53,26,191,104,122,147,117,45,235,53,171,174,55,89, 215,178,78,211,246,75,198,183,109,219,44,28,191,119,205,162, 48,123,202,115,122,179,177,19,203,55,27,159,242,157,147,165, 25,179,57,89,154,241,76,214,228,251,162,175,253,222,242,203, 198,119,109,226,40,26,207,53,106,162,116,173,212,53,89,215, 166,206,170,235,77,214,181,172,223,53,27,215,119,205,162,182, 105,226,40,90,175,114,125,195,236,57,147,53,249,190,232,203, 194,177,205,194,40,13,179,231,76,214,180,141,151,232,140,226, 165,19,219,120,137,218,232,141,210,180,105,162,244,236,196,54, 62,163,54,122,163,52,125,171,47,251,158,232,171,214,44,25, 171,47,250,162,233,29,223,53,75,198,234,139,190,104,122,163, 116,205,170,235,141,210,56,140,214,178,61,231,13,105,175,113, 30,145,117,77,206,39,105,175,42,122,179,113,202,198,175,82, 215,104,156,191,119,205,162,181,82,215,119,205,162,54,11,235, 74,93,147,245,234,214,177,78,214,181,172,199,40,89,203,28, 105,226,55,106,223,38,91,155,188,124,146,246,90,190,164,201, 230,242,109,203,239,137,190,172,154,154,108,93,203,170,28,215, 100,142,222,107,73,214,48,27,223,47,89,215,38,91,203,175, 89,203,182,205,198,232,13,147,102,141,170,36,107,214,114,124, 198,184,45,203,115,58,147,53,90,207,47,110,215,100,93,159, 104,45,215,39,90,203,105,10,179,170,156,202,181,253,202,51, 154,219,102,45,219,47,105,175,242,123,179,239,137,194,168,77, 218,56,252,230,37,89,207,100,61,147,53,249,190,232,107,179, 240,123,155,60,90,155,241,205,202,231,140,214,48,251,206,55, 26,187,105,189,178,57,12,147,183,28,163,51,123,155,107,42, 215,110,254,146,177,233,174,110,142,219,164,201,214,243,139,219, 165,201,214,167,140,163,112,108,179,240,173,203,51,44,179,241, 205,198,247,156,226,241,89,59,228,108,226,232,92,163,38,57, 207,181,188,155,120,253,242,40,141,210,49,57,207,181,188,163, 52,109,179,240,92,163,166,205,194,44,140,218,177,67,206,54, 11,203,103,74,190,100,61,215,114,250,178,49,106,227,117,58, 223,178,205,194,120,141,190,182,89,179,51,30,155,246,76,167, 53,27,223,242,156,206,53,11,163,182,89,227,228,141,214,49, 43,199,54,27,223,52,142,218,55,74,203,119,173,144,117,93, 215,55,201,190,11,89,215,17,89,215,164,137,226,55,122,178, 38,10,207,55,159,199,234,137,190,104,77,210,184,92,215,228, 92,166,182,153,218,171,91,147,117,253,206,243,107,179,240,253, 234,55,201,190,172,28,147,175,93,151,100,93,151,181,91,147, 38,234,186,168,253,158,184,73,214,114,92,155,232,201,190,236, 139,151,252,105,146,239,185,146,53,141,203,117,125,218,43,74, 190,108,140,206,100,125,219,230,173,166,172,189,222,117,250,202, 114,93,175,100,125,226,175,156,179,234,122,147,117,45,235,53, 171,174,55,89,215,178,126,147,236,187,146,245,44,203,241,41, 235,49,62,191,104,122,147,117,45,235,246,74,214,179,44,199, 118,205,170,235,77,214,181,172,219,54,141,179,42,89,215,178, 126,175,53,138,222,44,140,218,53,27,171,54,27,171,167,124, 219,40,253,146,117,189,146,53,12,203,184,125,147,230,138,198, 48,123,214,50,25,171,117,93,214,238,76,214,233,139,219,55, 11,163,246,76,214,245,76,214,234,61,203,47,27,223,53,89, 215,54,73,227,178,89,175,116,137,203,181,77,227,114,125,175, 53,138,178,48,106,215,44,154,190,119,205,226,47,190,146,117, 189,219,164,137,223,104,73,227,178,233,144,115,45,199,38,142, 218,38,122,178,47,91,155,177,67,206,54,11,207,242,203,198, 183,205,194,182,201,159,242,93,162,168,82,215,100,189,186,181, 172,219,168,121,195,172,173,147,245,13,179,49,110,199,251,157, 214,178,30,219,43,89,207,230,106,242,188,92,223,48,123,206, 100,77,190,47,250,242,172,10,147,169,205,170,48,153,195,167, 124,163,180,234,188,54,11,191,78,140,206,47,110,215,100,93, 191,100,93,195,228,251,218,232,13,179,49,110,219,235,140,206, 100,109,191,54,204,158,47,122,163,182,156,222,38,255,150,182, 252,150,100,61,167,51,121,162,54,206,222,53,109,146,179,141, 207,54,109,226,179,109,227,37,106,163,55,74,207,168,141,222, 54,109,227,179,141,222,40,141,147,53,154,166,53,89,215,182, 89,163,55,28,219,54,204,190,232,77,214,233,77,214,105,77, 178,234,122,163,179,205,190,114,60,175,108,108,227,165,141,151, 206,41,223,232,41,223,48,254,222,177,131,206,47,110,219,120, 89,147,117,109,163,55,74,211,49,74,211,44,140,151,54,94, 218,248,108,154,228,60,215,242,110,226,245,203,163,52,74,199, 228,60,215,242,142,210,180,205,194,54,110,154,54,11,195,177, 58,7,194,224,216,248,124,202,183,141,151,232,41,223,171,45, 191,120,249,146,117,13,227,239,109,227,115,236,160,243,139,219, 54,122,163,52,29,163,52,109,227,179,205,194,120,57,235,74, 93,147,245,234,214,178,30,235,100,109,247,47,171,222,100,173, 162,55,94,214,174,73,214,114,140,158,236,203,159,242,125,163, 111,141,154,105,189,162,53,74,164,114,141,222,164,205,195,57, 107,186,228,60,215,242,126,175,172,233,218,44,28,219,179,75, 206,54,11,203,117,204,190,39,10,163,118,121,179,48,106,151, 100,125,198,183,140,146,115,41,223,38,91,167,183,60,167,114, 237,218,228,92,179,48,90,147,39,202,146,177,250,162,167,172, 199,47,154,222,40,125,215,44,25,171,47,74,215,172,186,222, 40,125,202,55,10,179,49,110,207,47,110,219,229,93,179,55, 11,163,51,218,179,56,108,155,53,191,154,252,93,203,174,206, 238,183,188,162,228,249,162,233,77,214,181,172,223,186,188,162, 228,89,179,234,122,147,117,45,235,184,82,215,17,89,147,38, 126,163,117,93,214,38,143,230,168,201,214,38,110,242,39,89, 215,229,75,154,43,89,167,172,189,222,181,90,147,57,186,146, 245,139,175,100,93,151,175,251,154,114,29,163,117,45,207,119, 205,194,164,89,191,184,172,202,241,156,206,100,93,203,250,41, 235,49,89,215,178,190,146,245,44,203,241,139,166,119,205,170, 235,253,226,182,205,226,179,205,174,175,28,227,51,89,215,178, 110,215,166,92,199,104,93,203,51,27,171,119,205,226,182,89, 223,167,124,179,239,137,214,108,138,147,117,13,191,58,25,171, 47,154,43,117,189,144,117,222,144,246,74,198,106,125,215,232, 108,179,175,28,187,228,60,147,177,124,175,108,172,230,100,61, 175,44,91,203,243,45,215,171,108,179,42,76,226,165,141,222, 49,74,211,57,89,219,248,108,163,119,140,210,244,189,162,55, 89,179,100,172,190,232,139,166,119,205,170,235,109,242,39,105, 175,40,154,163,104,73,214,40,253,190,236,92,151,100,125,167, 245,123,215,108,108,227,101,30,219,248,44,207,233,92,203,115, 125,215,172,109,214,120,25,59,232,28,59,185,141,207,49,218, 179,106,79,170,186,201,214,38,122,150,100,173,162,52,139,214, 115,90,235,242,156,206,53,74,222,171,109,214,187,73,206,108, 109,226,243,126,222,53,155,214,171,82,215,100,93,179,175,82, 215,100,93,195,228,188,199,172,45,159,242,61,167,47,110,223, 44,140,214,74,93,147,117,109,155,245,110,211,38,62,227,243, 139,219,119,205,230,40,170,163,167,138,242,164,137,223,40,111, 178,181,201,155,60,26,167,53,107,242,242,156,218,102,141,155, 60,252,246,164,137,223,168,73,214,114,204,159,242,141,162,119, 157,222,100,90,175,38,223,179,106,77,214,181,60,167,182,89, 235,109,220,2, }; static const uint16_t sfx_groups[]={ 0,29,65,101,134,178,218,291,355,385,420,474,545,626,697,738, 765,821,864,918,942,983,1024,1075,1108,1139,1184,1209,1236,1266,1316,1377, 1437,1506,1557,1638,1670,1702,1782,1828,1890,1958,2031,2105,2157,2218,2256,2303, 2342,2380,2430,2459,2484,2533,2599,2646,2708,2754,2780,2840,2888,2928,2960,2982, 3030,3065,3099,3142,3203,3247,3269,3316,3343,3370,3397,3435,3451,3477,3494,3508, 3533,3552,3581,3620,3647,3673,3704,3754,3792,3815,3830,3843,3858,3874,3893,3915, 3935,3956,3982,4012,4036,4065,4100,4120,4145,4165,4189,4216,4260,4294,4320,4350, 4375,4407,4444,4496,4520,4557,4576,4595,4617,4638,4673,4702,4729,4773,4801,4822, 4839,4863,4884,4901,4923,4937,4958,4987,5024,5048,5081,5127,5157,5179,5208,5231, 5263,5286,5310,5337,5363,5388,5413,5431,5454,5479,5502,5557,5597,5623,5651,5674, 5704,5732,5789,5814,5840,5856,5882,5912,5934,5974,5995,6020,6043,6085,6106,6127, 6150,6176,6196,6215,6234,6266,6282,6300,6322,6350,6380,6402,6419,6450,6484,6509, 6536,6561,6587,6611,6638,6658,6682,6710,6733,6756,6780,6800,6821,6853,6878,6904, 6940,6967,6989,7006,7030,7054,7077,7100,7124,7200,7235,7260,7288,7317,7339,7364, 7383,7407,7437,7452,7492,7508,7532,7552,7579,7613,7635,7656,7692,7707,7734,7754, 7778,7806,7838,7866,7888,7922,7953,7995,8037,8066,8092,8135,8167,8194,8231,8260, 8302,8329,8356,8387,8409,8434,8461,8494,8515,8542, }; static const unsigned char decode[]={ 48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70, 71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86, 87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108, 109,110,111,112,113,114,115,116,117,118,119,120,121,122,0,0, }; static const uint16_t refs[]={ 32768,32771,32773,8,32779,14,17,32789,24,27,30,33,36,40,32811,46, 50,32821,32824,59,62,65,68,71,74,77,80,84,88,74,91,94, 32865,100,103,106,109,112,32883,118,121,124,127,130,109,133,136,139, 142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,188, 191,106,194,197,200,203,206,209,212,215,218,221,224,227,231,234, 237,240,242,245,248,251,255,258,261,166,255,264,267,270,212,273, 276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321, 324,327,330,333,264,336,340,343,33114,33117,352,33123,358,361,364,33136, 371,374,377,380,383,386,390,393,396,399,402,405,408,33179,414,417, 420,423,427,430,433,437,440,440,443,33214,448,451,454,457,460,463, 466,469,473,476,480,483,486,489,492,495,498,501,505,508,511,514, 516,519,522,525,528,522,531,91,534,537,540,543,33314,33317,552,555, 558,33329,558,564,567,282,570,573,576,579,582,585,588,592,595,598, 601,33372,607,610,613,617,621,625,628,631,634,637,640,643,646,650, 654,658,33429,663,666,669,672,675,678,681,684,687,690,693,696,699, 702,705,708,711,714,717,720,723,726,729,732,735,738,741,744,747, 750,753,756,267,270,759,762,765,768,771,774,777,781,784,787,790, 793,796,273,276,279,799,803,806,672,809,812,815,818,821,824,827, 830,834,837,827,841,844,847,850,853,856,859,859,859,859,505,815, 862,864,868,871,874,877,880,883,886,889,892,895,900,903,906,909, 914,919,922,927,930,935,940,943,948,951,954,957,960,965,970,973, 978,983,986,991,994,997,1000,1005,1008,1013,1016,1021,1024,1029,1032,1035, 1040,1043,1048,1053,1056,1059,1062,1065,1068,1071,33843,1078,1081,33852,33855,1090, 1093,1096,33868,1103,1106,1109,1112,1116,1119,1122,1125,33897,33900,1135,33906,1141, 1144,1147,1150,1153,1156,1159,1163,1166,1169,519,1172,1175,1178,1181,1184,1187, 1190,1193,157,1196,1199,1203,33974,1208,1212,1215,1219,33990,1225,1228,1231,1234, 1237,1240,1243,1246,1249,1252,1255,1246,1258,1261,1264,1267,1270,1273,1276,1279, 1282,1285,1288,1291,1294,1297,1300,1303,1306,1309,1312,1315,1318,1321,1324,282, 1327,1330,1333,1336,1339,1342,1345,1348,1351,1354,1357,1360,1363,1366,1369,1372, 297,690,1264,1376,1379,1382,1385,1389,1392,1395,1398,1401,1404,1407,1410,1413, 1417,1420,1420,1423,1426,1429,1432,1435,1249,1438,1441,1444,1447,1441,34218,1453, 1456,1459,1462,1464,1467,1470,1473,1476,1480,1483,1486,1491,1494,1497,1500,1503, 1506,1510,1513,1517,34288,1523,1526,1529,1532,34303,1538,1541,1544,34316,1551,1554, 1556,1559,1562,1565,1568,1571,1574,1376,1578,1581,1584,1587,1590,1593,288,291, 1596,1599,1602,1605,1608,1611,1615,34386,1621,1624,1627,1630,1633,1636,1639,1639, 1642,1645,1647,1650,1653,1656,1660,1664,1668,1671,1674,1677,1681,1685,1689,1693, 1696,1700,1704,1707,1710,34481,1716,1719,1722,1726,1730,1734,1737,1740,1743,1746, 1749,859,1752,1755,1758,1761,34533,1768,1771,1774,1779,34550,32999,1785,34556,40, 1791,34563,1798,1798,1801,1804,1807,32771,1810,1813,1816,1819,1822,1825,1828,1825, 1831,1834,1837,1840,1843,1846,1849,1852,1855,1858,1861,1864,1867,43,1870,1873, 1876,1503,1880,1883,1886,1889,1892,1503,1886,34662,1897,1901,1503,191,34671,34674, 178,1909,1912,1915,1918,1921,1924,1927,1930,1933,1933,1559,1936,1915,1939,1942, 71,71,1945,1918,74,1948,1951,1954,1957,576,1961,1565,1964,1967,1970,1973, 1976,1979,1982,1985,1636,1674,1988,1991,430,1994,1997,2000,2003,2006,2009,2012, 2015,2018,2021,2025,2030,2033,1590,1590,2037,2040,2043,2046,2049,2052,2055,2058, 2061,2064,2067,2070,2073,2076,2079,2082,2085,2088,2091,2094,2097,2100,2103,2106, 2109,2112,528,2115,2118,2121,2124,2127,2130,2133,2136,2139,2142,2145,2148,2151, 2154,2157,2160,2163,2166,1921,88,34937,2172,2176,1924,1927,2179,2181,2184,2187, 2187,91,2190,534,534,2193,2196,2199,2202,2205,2208,2211,2214,2220,511,2223, 2226,34997,2232,2235,2238,2241,32895,2244,35015,130,2250,2254,2257,2257,2260,2263, 2266,2269,2272,2275,2278,1222,2281,2284,2287,2290,2272,2293,2296,2299,2302,2302, 2305,50,50,2307,2309,2311,1382,2311,172,1500,2314,169,2317,175,32865,2321, 2324,2327,2330,2334,2337,2340,2343,2346,2349,2352,2355,2358,2361,2364,2367,2370, 2373,2376,2379,2382,2385,2391,2394,2355,2358,2397,2400,35171,2361,2391,2397,2400, 148,2406,2409,264,2412,2415,2418,297,2421,723,2424,237,2427,2430,248,206, 2433,2436,35207,2442,2445,2448,2451,708,1282,245,245,2455,2455,255,2458,2461, 2464,35232,2467,2467,2470,2473,2476,2479,2481,234,261,2485,2488,2491,2494,65, 297,2433,708,1282,1219,2497,2500,2503,2507,2510,2513,2516,2519,1997,303,1255, 2522,2525,2528,2436,2485,35299,2534,2537,2540,35311,2546,2549,2552,417,2555,2558, 2562,35333,2568,2571,2574,2577,2580,2583,2586,2589,2592,2592,2592,2595,2598,2601, 2604,2607,2610,2613,2617,2620,2623,2626,2626,2629,2540,2546,396,2568,2583,2632, 2634,163,2637,2640,2643,2646,2649,261,396,2652,35423,35426,2661,2664,414,402, 417,2555,2666,2669,2672,2676,2680,2684,2688,2692,2695,2698,2702,2705,2708,437, 2712,2715,2718,35489,2724,35495,2730,2733,2736,2739,2742,35513,2748,2751,2754,2757, 2760,2763,2766,2769,2772,486,2776,2779,2782,2458,2785,2788,2791,2794,2797,480, 483,480,486,495,495,2800,2803,2806,2809,2812,2818,2821,505,473,2825,2828, 492,2831,2834,2837,2840,2843,2843,2846,2846,2840,2849,2852,240,2856,498,2859, 2862,33214,2865,2868,2871,2874,2877,2785,2880,2871,483,2776,492,498,2883,2883, 270,1653,2721,522,2889,717,2892,2895,2898,2901,2904,2904,2907,2910,2913,2917, 2920,2923,2926,2929,2932,2935,2939,2942,2898,2946,2949,2421,35720,579,35723,2958, 2961,35732,270,2967,35739,567,2974,2977,2980,2983,2986,2989,558,595,558,2992, 2995,2998,371,3001,3004,3007,2992,573,3010,1758,3010,3013,3016,3019,3022,3025, 3029,3016,35800,3035,371,3039,3042,3045,3048,371,582,3051,3054,35825,3060,3063, 3066,3070,3073,3077,3081,3084,3087,3090,3093,3096,3099,3103,3106,3109,3112,3116, 784,267,3120,3123,762,3126,3129,3132,3135,672,3138,687,3141,687,3144,35915, 690,693,3150,3153,2929,3156,3159,3162,3165,3168,3171,3174,3177,3183,3186,3189, 3191,3193,3196,3199,3202,3205,699,3189,3208,3211,1116,1942,3214,3217,3220,3223, 690,3165,315,753,3226,717,696,1252,2895,3229,759,3223,762,771,771,3232, 3235,3238,3241,3244,3250,3144,3253,759,3126,765,774,3256,714,3259,765,3263, 315,753,3266,3269,3272,815,3226,2473,3275,3278,3281,3284,3284,3287,3290,3290, 3293,3293,3287,3296,3299,3302,702,790,793,3305,796,3156,3308,3311,3314,3318, 3321,3324,1554,3327,3327,1991,3330,3332,696,2497,1252,3335,3338,3341,3344,3347, 809,774,3351,3354,3191,1119,3357,3360,33429,3363,3366,3253,3229,3369,3372,3375, 3378,3381,738,2000,3384,3387,3390,3390,3396,36167,3402,3405,3405,1294,1294,333, 726,1593,3408,3411,3414,3417,1831,3420,3424,36195,1642,1901,3430,32898,3433,2127, 2488,3436,3439,2907,834,3442,3445,834,3449,1771,3453,3456,3456,3459,3464,914, 3469,3472,3475,3480,960,3485,3488,3491,221,3494,3497,1065,3502,3507,3512,1065, 3515,3515,874,33639,930,935,3518,3521,3524,1062,3527,3532,3535,3538,892,3541, 3544,1599,1599,3547,880,3552,895,900,900,3555,909,906,906,909,922,922, 927,903,903,3472,3559,3562,1249,3565,3568,1249,3571,3469,3574,3579,3582,954, 3579,3559,954,3574,965,965,951,970,951,940,948,1068,3585,36357,889,3592, 3597,889,3602,3605,994,994,3608,3611,886,886,3614,3619,3624,983,991,986, 983,986,3485,3627,3630,3635,3627,997,1005,1032,1040,1035,3640,1068,886,1056, 1059,1059,1068,886,1013,1021,3644,3647,1029,1024,1029,3647,1032,1035,3652,3655, 1053,1048,1053,3655,919,36428,957,940,948,997,1005,3663,3666,3668,3671,3674, 3677,3680,3685,3688,3693,3697,3700,3703,3708,3712,3717,3720,3725,3730,3733,1596, 1596,3736,2281,36507,2284,2287,36510,3745,2290,3748,3751,136,3754,3757,3760,3763, 3767,36538,3773,3776,1106,169,2275,3779,3782,1141,3785,3788,3791,3794,3797,139, 3800,3804,3807,142,3810,2278,3813,3816,3816,36587,36590,3825,3828,3831,3834,3816, 36605,3840,36611,145,3846,36617,3852,294,36623,294,3858,3861,1153,3864,3867,3869, 3871,1590,3874,3877,3881,3884,827,3887,3890,2712,3893,2898,3896,2898,3899,3901, 2130,3904,2491,3907,3910,33937,3913,3916,1169,3919,3922,36694,1178,3929,3932,1184, 1181,1178,3932,1184,1181,3935,3938,3941,1187,3944,1172,3938,3935,3941,1193,3947, 3950,3953,1196,1196,1187,3956,3959,3963,3966,3969,2974,3973,3977,3980,525,3984, 3987,2634,33974,1333,282,3989,2424,3992,3995,4000,1389,4003,1261,4006,4009,1261, 36780,1264,4015,1267,4018,4021,4024,2932,3308,4027,4030,4033,4036,4039,4042,1212, 1988,4045,4048,4050,4052,4055,4058,4061,4064,1273,4048,4067,4070,4073,151,151, 4076,1246,1336,1246,1327,4079,33990,4082,1288,4085,324,1321,4089,4092,4095,1264, 4033,324,1321,1270,399,4098,4036,4101,4104,2643,1270,399,4107,4110,4110,4113, 4116,4119,1276,4122,4125,4129,4132,4135,4137,4140,4098,4143,4146,1339,4050,154, 154,4101,4150,4153,1306,2003,4156,4159,4162,4165,3357,1426,4168,4171,4174,1432, 1429,4177,4180,4183,4186,4189,4192,1435,4195,4198,2494,4201,4204,2917,806,806, 36975,4210,4212,59,59,4215,4218,2769,4222,4225,4228,1642,294,36999,4234,4237, 4237,1494,4240,1497,1497,4243,4246,4249,4252,4255,4258,4261,690,59,4264,4267, 1642,4270,4273,4276,4279,4285,4288,4290,4293,4296,4300,4300,294,1395,4303,1410, 4309,1398,1401,1398,1401,1404,1407,1404,1407,1392,1392,430,430,1264,4315,59, 4270,1417,4319,1976,2629,3884,3399,4322,4325,4328,1423,4331,4334,4337,4340,4343, 4346,4322,1423,4325,4340,4337,4349,4352,4355,1426,4171,1432,1429,4186,4183,4189, 1435,1438,4358,1444,37129,37132,37135,4370,4373,4376,1447,4379,4382,4385,4388,4391, 4394,4397,4400,1444,1447,4370,4397,4394,4403,4406,4409,4412,2920,803,803,4415, 37186,4421,4424,1147,4427,4430,4433,1510,4436,4439,1480,1480,4443,4446,4446,1503, 1494,1491,1503,1494,37217,242,37220,2133,4455,4458,2977,3552,330,4461,4464,4467, 4471,4212,4474,1453,4477,2519,3381,738,4480,4153,1306,4483,4480,4486,4489,4492, 4495,4498,4501,4505,4508,4511,1954,675,1231,288,4514,37285,1376,4520,4523,37294, 4529,1581,4532,1587,4535,4538,37310,747,1315,4545,4548,4548,4551,4554,4557,33023, 4560,4563,1376,1584,747,1315,1568,4567,1602,4567,4570,4573,4573,4576,4579,4582, 4585,4589,4592,4477,1994,4570,37363,4598,291,4601,4604,285,4607,2629,3090,2592, 3884,3893,1196,1584,4095,4237,4610,4616,4622,4628,4446,732,1300,4634,1291,3810, 4637,4640,4643,1645,1645,4646,732,1024,1048,4650,1196,1300,4654,4616,4610,4628, 4622,4658,4661,4664,1810,4667,4670,4673,4677,4670,1650,1650,4681,576,1961,1565, 1979,4685,276,793,4689,273,790,3305,4692,1964,4695,1967,1970,279,796,4699, 1973,1985,1982,1636,1674,37471,4706,4709,4712,37483,4718,4722,4725,4729,4733,37504, 4739,4742,4745,4748,1755,4751,4754,4758,4761,4764,4768,4772,4775, }; static const unsigned char values[]={ 198,1,0,38,0,193,1,0,130,2,0,194,1,0,144,8, 0,132,170,7,0,192,1,0,145,7,0,128,2,0,211,84, 0,132,2,0,184,170,7,0,225,64,0,197,1,0,156,169, 7,0,212,68,0,195,1,0,196,1,0,150,68,0,231,85, 0,134,70,0,145,8,0,181,68,0,172,66,0,146,7,0, 133,170,7,0,185,170,7,0,216,5,0,206,68,0,167,8, 0,169,1,0,134,2,0,210,69,0,197,66,0,173,66,0, 140,2,0,199,1,0,136,2,0,176,68,0,138,2,0,184, 1,0,183,1,0,167,7,0,153,69,0,150,69,0,149,69, 0,151,69,0,178,68,0,157,64,0,153,64,0,183,68,0, 244,84,0,225,68,0,175,68,0,174,68,0,130,66,0,144, 68,0,179,68,0,175,84,0,158,169,7,0,211,69,0,205, 68,0,145,82,0,130,8,0,133,8,0,143,8,0,161,64, 0,161,67,0,228,85,0,142,2,0,148,8,0,135,68,0, 148,7,0,135,170,7,0,180,1,0,217,5,0,221,5,0, 96,0,220,5,0,196,69,0,198,66,0,187,170,7,0,168, 1,0,220,65,0,208,68,0,211,67,0,208,67,0,212,67, 0,248,79,0,250,79,0,249,79,0,210,67,0,168,69,0, 209,67,0,213,67,0,165,68,0,147,67,0,147,82,0,245, 67,0,145,6,0,208,82,0,222,82,0,189,67,0,214,82, 0,223,82,0,193,67,0,215,82,0,164,69,0,167,67,0, 159,169,7,0,144,2,0,202,2,0,208,1,0,201,1,0, 154,2,0,202,1,0,173,8,0,150,2,0,136,170,7,0, 200,1,0,136,68,0,146,2,0,251,75,0,171,75,0,152, 2,0,188,170,7,0,149,7,0,245,84,0,194,68,0,204, 67,0,176,66,0,243,84,0,151,7,0,203,1,0,131,68, 0,199,66,0,164,8,0,137,170,7,0,252,75,0,170,75, 0,189,170,7,0,128,68,0,177,66,0,131,8,0,62,0, 147,7,0,220,7,0,158,2,0,162,2,0,156,2,0,147, 8,0,160,2,0,138,170,7,0,217,69,0,190,170,7,0, 229,68,0,219,69,0,231,68,0,162,85,0,247,68,0,254, 84,0,243,68,0,162,169,7,0,235,68,0,170,8,0,199, 5,0,94,0,164,2,0,140,66,0,139,66,0,141,66,0, 128,74,0,166,2,0,207,68,0,149,8,0,178,2,0,129, 8,0,205,1,0,206,1,0,152,8,0,176,2,0,145,66, 0,204,1,0,170,2,0,200,66,0,172,68,0,171,68,0, 194,69,0,227,64,0,226,64,0,174,2,0,192,170,7,0, 153,7,0,144,66,0,168,2,0,134,8,0,207,1,0,180, 2,0,153,8,0,141,170,7,0,193,170,7,0,165,169,7, 0,136,8,0,132,8,0,165,8,0,140,8,0,154,7,0, 182,2,0,154,8,0,142,170,7,0,194,170,7,0,166,169, 7,0,137,8,0,60,0,185,2,0,155,7,0,234,79,0, 146,66,0,158,67,0,189,2,0,187,2,0,155,8,0,232, 79,0,144,67,0,228,67,0,198,67,0,136,70,0,230,79, 0,225,82,0,195,67,0,217,82,0,138,70,0,148,67,0, 206,82,0,163,69,0,164,67,0,218,82,0,178,69,0,207, 83,0,180,69,0,209,82,0,224,82,0,191,67,0,216,82, 0,188,67,0,210,82,0,218,69,0,230,68,0,246,68,0, 161,85,0,253,84,0,242,68,0,143,170,7,0,216,69,0, 218,67,0,191,2,0,245,79,0,247,79,0,246,79,0,195, 170,7,0,153,67,0,152,67,0,176,67,0,193,2,0,234, 68,0,133,82,0,156,8,0,223,64,0,179,66,0,144,170, 7,0,147,68,0,196,170,7,0,156,7,0,138,8,0,195, 2,0,199,2,0,197,2,0,157,8,0,139,64,0,10,0, 145,170,7,0,224,64,0,160,1,0,149,66,0,236,85,0, 226,68,0,237,68,0,166,68,0,137,68,0,224,68,0,194, 68,184,6,0,132,68,0,239,68,0,241,68,0,231,68,184, 6,0,235,68,184,6,0,249,68,0,254,84,184,6,0,245, 68,0,206,68,184,6,0,207,68,184,6,0,234,69,0,207, 83,184,6,0,236,69,0,238,68,0,240,68,0,248,68,0, 234,68,184,6,0,253,84,184,6,0,244,68,0,162,85,184, 6,0,161,85,184,6,0,128,69,0,175,85,184,6,0,224, 69,0,140,68,0,235,69,0,208,83,184,6,0,237,69,0, 143,69,184,6,0,226,69,0,144,69,184,6,0,227,69,0, 130,69,210,65,0,136,69,0,129,69,0,176,85,184,6,0, 225,69,0,255,68,184,6,0,131,69,210,65,0,137,69,0, 193,68,0,196,68,0,199,68,0,201,68,0,164,68,0,169, 169,7,0,209,1,0,157,7,0,210,2,0,211,1,0,212, 1,0,158,8,0,208,2,0,146,170,7,0,210,1,0,204, 2,0,169,7,0,159,7,0,198,170,7,0,156,64,0,152, 64,0,212,84,0,170,169,7,0,216,1,0,213,1,0,183, 84,0,214,1,0,190,64,0,222,71,0,180,71,0,220,71, 0,130,68,0,159,8,0,147,170,7,0,166,7,0,160,7, 0,177,1,0,153,66,0,187,85,0,250,68,0,175,85,0, 252,68,0,254,68,0,179,64,0,143,68,0,157,68,0,171, 169,7,0,168,7,0,34,0,148,170,7,0,154,66,0,172, 169,7,0,144,82,0,174,1,0,212,2,0,235,79,0,160, 67,0,150,82,0,216,2,0,214,2,0,160,8,0,156,66, 0,139,68,0,203,67,0,239,82,0,161,7,0,233,79,0, 146,67,0,229,67,0,196,67,0,137,70,0,231,79,0,221, 82,0,194,67,0,213,82,0,139,70,0,162,69,0,166,67, 0,219,82,0,179,69,0,208,83,0,181,69,0,207,82,0, 220,82,0,190,67,0,212,82,0,192,67,0,211,82,0,157, 66,0,240,82,0,219,67,0,155,66,0,177,67,0,244,83, 0,169,8,0,168,8,0,172,8,0,218,2,0,188,85,0, 224,2,0,222,2,0,220,2,0,161,8,0,150,170,7,0, 145,67,0,163,7,0,152,68,0,202,170,7,0,154,68,0, 161,75,0,147,69,0,143,69,0,145,69,0,144,69,0,146, 69,0,148,69,0,174,169,7,0,198,69,0,208,69,0,134, 69,0,251,68,0,176,85,0,253,68,0,255,68,0,145,68, 0,209,69,0,131,69,0,135,69,0,222,1,0,162,66,0, 139,8,0,166,8,0,9,0,164,7,0,228,2,0,226,2, 0,162,8,0,151,170,7,0,180,68,0,152,7,0,223,64, 138,64,0,137,64,0,188,68,0,195,68,0,197,68,0,200, 68,0,203,170,7,0,219,65,0,175,169,7,0,230,2,0, 218,1,0,159,67,0,201,82,0,142,8,0,236,2,0,219, 1,0,163,8,0,240,2,0,152,170,7,0,217,1,0,234, 2,0,95,0,223,71,0,181,71,0,221,71,0,195,69,0, 142,69,0,242,2,0,204,170,7,0,146,82,0,197,67,0, 149,67,0,238,82,0,165,69,0,165,67,0,150,67,0,151, 67,0,210,7,0,165,7,0,238,2,0,176,169,7,0,232, 2,0,220,1,0,171,69,0,235,85,0,146,8,0,169,69, 0,230,85,0,193,69,0,150,64,0,163,68,0,124,0,216, 78,0,192,68,0,138,64,0,153,170,7,0,205,170,7,0, 177,169,7,0,170,69,0,244,2,0,192,69,0,154,170,7, 0,206,170,7,0,178,169,7,0,155,170,7,0,158,7,0, 207,170,7,0,179,169,7,0,175,8,0,135,8,0,174,8, 0,221,1,0,246,2,0,171,8,0,156,170,7,0,208,170, 7,0,180,169,7,0,248,2,0,150,8,0,249,2,0,253, 2,0,151,8,0,251,2,0,150,7,0,168,66,0,164,66, 0,181,169,7,0,225,1,0,131,2,0,190,68,0,190,68, 179,6,0,191,68,0,226,1,0,176,8,0,230,1,0,158, 170,7,0,224,1,0,181,66,0,177,7,0,129,2,0,191, 84,0,167,68,0,213,84,0,220,84,0,216,84,0,218,84, 0,160,68,0,164,83,0,161,68,0,168,83,0,169,83,0, 170,83,0,171,83,0,172,83,0,173,83,0,174,83,0,175, 83,0,159,68,0,190,69,0,157,83,0,162,68,0,252,70, 0,133,2,0,210,170,7,0,240,84,0,239,84,0,202,68, 0,203,68,0,39,0,229,1,0,182,169,7,0,42,0,227, 1,0,228,1,0,145,84,0,237,85,0,204,68,0,246,7, 0,181,64,0,189,68,0,205,69,0,189,69,0,133,70,0, 182,71,0,177,8,0,158,64,0,176,83,0,178,7,0,182, 66,0,236,68,0,159,170,7,0,239,75,0,128,84,0,129, 84,0,130,84,0,134,84,0,133,76,0,189,75,0,179,75, 0,132,84,0,141,82,0,235,83,0,180,75,0,190,75,0, 194,75,0,184,75,0,163,72,0,146,75,0,145,75,0,147, 75,0,136,75,0,61,229,65,0,225,68,229,65,0,144,70, 0,211,170,7,0,200,69,0,215,74,0,212,74,0,214,74, 0,211,74,0,208,74,0,230,74,0,233,74,0,228,74,0, 231,74,0,221,74,0,218,74,0,220,74,0,217,74,0,209, 74,0,236,74,0,227,74,0,224,74,0,235,74,0,226,74, 0,223,74,0,201,83,0,213,74,0,210,74,0,144,74,0, 140,74,0,229,74,0,232,74,0,172,74,0,180,74,0,159, 69,0,158,69,0,160,69,0,219,74,0,216,74,0,152,74, 0,148,74,0,130,74,0,234,74,0,225,74,0,222,74,0, 188,74,0,164,74,0,156,74,0,166,1,0,183,169,7,0, 207,64,0,92,0,197,83,0,200,79,0,162,64,0,174,85, 0,135,2,0,169,68,0,196,84,0,201,84,0,203,84,0, 199,84,0,192,84,0,169,68,128,252,3,0,193,64,0,205, 84,0,141,2,0,231,1,0,137,2,0,204,84,0,208,84, 0,139,2,0,178,83,0,162,1,0,160,170,7,0,199,8, 0,147,78,0,199,7,0,203,75,0,195,83,0,198,5,0, 215,68,0,186,67,0,187,67,0,200,73,0,155,69,0,154, 69,0,157,69,0,144,84,0,239,85,0,194,83,0,227,76, 0,58,0,44,0,64,0,129,68,0,237,84,0,212,170,7, 0,151,66,0,181,67,0,151,78,0,184,169,7,0,207,85, 0,209,85,0,208,85,0,210,85,0,239,69,0,184,82,0, 181,82,0,222,69,0,223,69,0,182,67,0,189,82,0,170, 68,0,200,84,0,198,84,0,202,84,0,141,69,0,197,84, 0,170,68,128,252,3,0,183,67,0,188,82,0,206,69,0, 207,69,0,164,1,0,177,68,0,173,70,0,229,82,0,160, 64,0,184,66,0,144,64,0,143,82,0,143,2,0,180,8, 0,202,67,0,247,84,0,176,1,0,180,7,0,177,83,0, 255,82,0,161,170,7,0,230,76,0,221,7,0,242,69,0, 247,1,0,199,69,0,210,8,0,158,70,0,141,70,0,36, 0,213,170,7,0,209,68,0,184,68,0,148,68,0,161,69, 0,159,70,0,140,70,0,185,169,7,0,213,8,0,246,83, 0,145,2,0,241,69,0,191,75,0,166,83,0,223,8,0, 255,79,0,233,1,0,238,84,0,155,2,0,214,68,0,234, 1,0,213,68,0,205,8,0,151,2,0,210,68,0,162,170, 7,0,154,85,0,232,1,0,150,85,0,152,85,0,153,85, 0,231,71,0,147,66,0,149,85,0,151,85,0,147,2,0, 133,68,0,131,64,0,132,64,0,133,64,0,203,2,0,130, 64,0,153,2,0,214,170,7,0,213,69,0,227,83,0,241, 84,0,181,7,0,245,7,0,61,0,223,68,0,248,84,0, 229,83,0,211,68,0,241,82,0,175,66,0,183,7,0,240, 1,0,235,1,0,172,65,0,33,0,196,8,0,192,76,0, 131,246,3,0,128,246,3,0,132,246,3,0,163,170,7,0, 129,246,3,0,102,106,0,237,76,0,130,246,3,0,177,75, 0,146,3,0,215,170,7,0,212,69,0,217,85,0,141,84, 0,189,1,0,211,66,0,188,1,0,213,66,0,217,66,0, 219,66,0,212,66,0,214,66,0,190,1,0,215,66,0,220, 66,0,216,66,0,218,66,0,221,66,0,222,66,0,196,64, 0,162,70,0,187,169,7,0,140,85,0,245,3,0,179,7, 0,134,85,0,159,2,0,157,2,0,179,8,0,161,2,0, 169,85,0,128,85,0,130,85,0,132,85,0,219,69,128,252, 3,0,148,85,0,164,170,7,0,183,66,0,211,8,0,146, 85,0,165,85,0,164,85,0,233,68,0,138,85,0,136,85, 0,231,69,0,216,170,7,0,138,66,0,142,85,0,144,85, 0,167,85,0,250,84,0,215,69,0,149,83,0,252,84,0, 248,82,0,233,68,128,252,3,0,202,8,0,200,82,0,173, 67,0,143,66,0,165,2,0,229,76,0,166,64,0,185,69, 0,165,170,7,0,165,82,0,166,82,0,255,67,0,187,68, 0,169,67,0,170,67,0,217,170,7,0,149,64,0,189,169, 7,0,167,2,0,195,64,0,237,1,0,238,1,0,184,8, 0,181,8,0,161,1,0,166,170,7,0,236,1,0,140,84, 0,173,68,0,220,83,0,169,66,0,179,2,0,171,2,0, 177,2,0,183,69,0,181,3,0,133,66,0,158,68,0,221, 83,0,186,69,0,151,84,0,188,84,0,209,8,0,175,2, 0,218,170,7,0,185,7,0,191,1,0,190,169,7,0,249, 69,0,245,69,0,244,69,0,243,69,0,169,2,0,214,8, 0,239,1,0,181,2,0,185,8,0,167,170,7,0,183,4, 0,219,170,7,0,191,169,7,0,216,8,0,212,8,0,186, 7,0,240,7,0,183,2,0,186,8,0,168,170,7,0,184, 2,0,197,8,0,220,8,0,220,170,7,0,192,169,7,0, 155,82,0,142,82,0,139,85,0,226,82,0,186,2,0,180, 83,0,187,7,0,145,83,0,133,85,0,171,1,0,159,82, 0,157,82,0,171,67,0,185,82,0,243,82,0,162,67,0, 171,85,0,153,82,0,173,85,0,173,85,128,252,3,0,140, 82,0,242,78,0,123,0,91,0,139,83,0,143,83,0,141, 83,0,190,2,0,188,2,0,187,8,0,182,82,0,231,82, 0,203,82,0,178,67,0,228,68,0,199,67,0,203,69,0, 168,85,0,255,84,0,129,85,0,131,85,0,218,69,128,252, 3,0,147,85,0,214,69,0,252,82,0,169,170,7,0,145, 85,0,234,82,0,132,75,0,217,8,0,235,82,0,250,75, 0,192,2,0,176,71,0,232,68,0,137,85,0,135,85,0, 230,69,0,236,79,0,253,67,0,252,79,0,172,67,0,133, 83,0,221,170,7,0,173,84,0,180,84,0,151,68,0,202, 75,0,40,0,147,83,0,237,82,0,142,64,0,191,69,0, 185,64,0,193,169,7,0,141,85,0,143,85,0,154,64,0, 194,2,0,166,85,0,249,84,0,201,69,0,246,82,0,251, 84,0,150,83,0,195,75,0,202,82,0,230,82,0,232,68, 128,252,3,0,186,68,0,175,1,0,194,76,0,160,78,0, 174,75,0,169,84,0,188,8,0,148,64,0,170,170,7,0, 167,66,0,181,1,0,240,85,0,146,68,0,170,84,0,219, 85,0,167,69,0,222,170,7,0,194,169,7,0,188,7,0, 184,69,0,217,69,184,6,0,235,68,210,65,0,205,67,0, 206,67,0,216,69,184,6,0,234,68,210,65,0,207,67,0, 175,69,0,174,69,0,196,2,0,160,68,210,65,0,240,84, 184,6,0,203,68,184,6,0,201,2,0,238,76,0,195,84, 0,200,2,0,198,2,0,237,84,184,6,0,194,84,0,189, 8,0,147,64,0,215,67,0,164,82,0,208,68,184,6,0, 168,82,0,171,170,7,0,174,67,0,242,85,0,252,69,0, 250,69,0,218,8,0,230,68,184,6,0,154,67,0,165,64, 0,223,170,7,0,172,1,0,249,69,184,6,0,245,69,184, 6,0,247,69,0,246,69,0,254,69,0,253,69,0,253,85, 229,65,0,130,68,184,6,0,148,84,0,155,67,0,179,82, 184,6,0,157,67,184,6,0,195,169,7,0,132,69,0,197, 85,184,6,0,133,69,0,198,85,184,6,0,241,1,0,189, 7,0,35,0,150,66,0,135,64,0,173,69,0,132,82,0, 205,68,210,65,0,172,69,0,229,68,210,65,0,62,210,65, 0,222,83,0,130,82,0,228,68,210,65,0,60,210,65,0, 180,69,210,65,0,131,82,0,181,69,210,65,0,188,68,210, 65,0,214,67,0,163,82,0,167,82,0,243,1,0,244,1, 0,190,8,0,209,2,0,184,84,0,188,83,0,211,2,0, 191,83,0,172,170,7,0,219,5,0,242,1,0,193,83,0, 181,83,0,190,83,0,187,83,0,192,83,0,205,2,0,201, 7,0,191,7,0,182,83,0,224,170,7,0,183,83,0,185, 83,0,168,68,0,221,84,0,180,66,0,170,1,0,186,1, 0,182,69,0,214,84,0,215,84,0,219,84,0,248,1,0, 152,69,0,245,1,0,182,84,0,246,1,0,189,70,0,182, 1,0,243,85,0,253,85,0,191,8,0,37,0,46,0,176, 64,0,177,64,0,173,170,7,0,198,7,0,213,7,0,142, 76,0,192,7,0,214,7,0,142,66,0,43,0,163,84,0, 162,84,0,165,84,0,242,84,0,166,84,0,167,84,0,149, 84,0,225,170,7,0,163,1,0,179,85,0,183,85,0,185, 85,0,181,85,0,232,69,0,178,64,0,174,70,0,146,70, 0,147,70,0,176,69,0,197,169,7,0,200,7,0,136,64, 0,174,170,7,0,226,170,7,0,215,64,0,198,169,7,0, 150,84,0,63,0,156,82,0,228,82,0,189,68,177,6,0, 213,2,0,179,83,0,146,83,0,165,83,0,187,1,0,245, 82,0,160,82,0,179,82,0,158,82,0,197,82,0,244,82, 0,163,67,0,157,67,0,154,82,0,182,68,0,243,78,0, 125,0,93,0,140,83,0,142,83,0,144,83,0,217,2,0, 215,2,0,192,8,0,183,82,0,233,82,0,179,67,0,173, 75,0,253,82,0,175,170,7,0,236,82,0,193,7,0,241, 7,0,201,67,0,204,69,0,218,5,0,143,64,0,177,71, 0,238,85,0,237,79,0,254,67,0,134,83,0,227,170,7, 0,174,84,0,181,84,0,41,0,148,83,0,146,84,0,186, 64,0,199,169,7,0,202,69,0,185,75,0,206,83,0,232, 82,0,158,66,0,219,2,0,180,85,0,184,85,0,225,2, 0,223,2,0,221,2,0,182,85,0,186,85,0,233,69,0, 147,84,0,193,8,0,197,69,0,230,84,0,216,67,0,167, 1,0,59,0,169,82,0,182,78,0,176,170,7,0,239,76, 0,201,8,0,200,8,0,173,1,0,195,7,0,194,7,0, 234,84,0,158,85,0,160,85,0,157,85,0,159,85,0,198, 68,0,164,84,0,242,82,0,179,84,0,228,83,0,163,70, 0,170,85,0,172,85,0,172,85,128,252,3,0,204,8,0, 47,0,196,83,0,191,70,0,228,170,7,0,224,76,0,147, 69,128,252,3,0,148,69,128,252,3,0,200,169,7,0,134, 76,0,130,69,0,197,85,0,189,85,0,195,85,0,193,85, 0,203,85,0,138,69,0,191,85,0,249,82,0,199,85,0, 213,85,0,211,85,0,234,76,0,185,1,0,178,1,0,179, 1,0,198,85,0,190,85,0,216,85,0,196,85,0,201,79, 0,215,85,0,251,82,0,194,85,0,204,85,0,139,69,0, 192,85,0,200,85,0,212,85,0,214,85,0,217,67,0,170, 82,0,223,1,0,150,70,0,196,7,0,229,2,0,227,2, 0,194,8,0,149,70,0,177,170,7,0,184,7,0,209,7, 0,254,1,0,215,1,0,177,84,0,176,84,0,182,70,0, 241,85,0,229,170,7,0,218,85,0,180,64,0,181,75,0, 220,68,0,236,75,0,186,84,0,185,84,0,205,83,0,187, 84,0,226,71,0,201,169,7,0,198,8,0,219,8,0,231, 2,0,227,82,0,250,1,0,222,8,0,237,2,0,251,1, 0,195,8,0,241,2,0,254,82,0,178,170,7,0,249,1, 0,128,75,0,156,70,0,143,70,0,248,75,0,235,2,0, 243,2,0,230,170,7,0,197,7,0,200,67,0,157,70,0, 142,70,0,239,2,0,249,75,0,202,169,7,0,240,69,0, 233,2,0,252,1,0,167,83,0,232,85,0,233,85,0,156, 83,0,138,69,128,252,3,0,203,85,128,252,3,0,139,69, 128,252,3,0,204,85,128,252,3,0,178,8,0,187,69,0, 218,68,0,238,69,0,179,170,7,0,231,170,7,0,203,169, 7,0,154,83,0,245,2,0,223,84,0,217,68,0,152,66, 0,180,170,7,0,232,170,7,0,204,169,7,0,181,170,7, 0,190,7,0,251,69,0,233,170,7,0,205,169,7,0,253, 1,0,207,8,0,247,2,0,203,8,0,165,1,0,182,170, 7,0,215,8,0,234,170,7,0,206,169,7,0,206,8,0, 255,1,0,250,2,0,254,2,0,183,8,0,252,2,0,182, 7,0,183,170,7,0,182,8,0,221,67,0,235,170,7,0, 207,169,7,0,141,64,0,140,64,0, }; /* Return a value offset and a legacy flag, or -1. */ static int lookup(const unsigned char *s, unsigned n) { unsigned lo=0,hi=sizeof(refs)/sizeof(refs[0]); while(lo3 ? (pfx_bits[pos/8]>>(pos&7) | pfx_bits[pos/8+1]<<(8-(pos&7)))&31 : (pfx_bits[pos/8]>>(pos&7))&31; if(k%8==0) pfx=0; len=pfx; unsigned sl=plen[k]; for(unsigned j=0;j2 ? (sfx_bits[sp/8]>>(sp&7) | sfx_bits[sp/8+1]<<(8-(sp&7)))&63 : (sfx_bits[sp/8]>>(sp&7))&63]; } sbit+=sl*6; len+=sl; } unsigned j=0; while(j0) hi=mid; else return refs[mid]; } return -1; } static unsigned utf8(unsigned o,uint32_t c) { if(c<128) buffer[o++]=c; else if(c<2048) { buffer[o++]=192|(c>>6); buffer[o++]=128|(c&63); } else if(c<65536) { buffer[o++]=224|(c>>12); buffer[o++]=128|((c>>6)&63); buffer[o++]=128|(c&63); } else { buffer[o++]=240|(c>>18); buffer[o++]=128|((c>>12)&63); buffer[o++]=128|((c>>6)&63); buffer[o++]=128|(c&63); } return o; } static const uint16_t c1[]={8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376}; EXPORT uint64_t render(uint32_t len) { const unsigned char *in=buffer+209744; if(len>1048576) len=1048576; unsigned i=0,o=0; while(i=16) { v128_t v=wasm_v128_load(in+i); unsigned mask=wasm_i8x16_bitmask(wasm_i8x16_eq(v,wasm_i8x16_splat('&'))); if(!mask) { wasm_v128_store(buffer+o,v); i+=16; o+=16; continue; } unsigned count=__builtin_ctz(mask); for(unsigned k=0;k9) { d=(in[j]|32)-'a'+10; if(base!=16 || d<10 || d>15) break; } c=c*base+d; if(c>0x110000) c=0x110000; j++; } if(j!=start) { if(j=128 && c<=159) c=c1[c-128]; else if(!c || (c>=0xd800 && c<=0xdfff) || c>0x10ffff) c=0xfffd; o=utf8(o,c); i=j;continue; } } else { unsigned j=i+1; while(j='0' && c<='9') || ((c|32)>='a' && (c|32)<='z'))) break; j++; } int ref=-1; unsigned used=0; if(j=0) used=j-i+1; } if(!used) { unsigned n=j-i-1; if(n>6) n=6; for(;n>=2;n--) { ref=lookup(in+i+1,n); if(ref>=0 && (ref&32768)) { used=n+1;break; } } } if(used) { const unsigned char *v=values+(ref&32767); for(;;) { uint32_t c=0; unsigned s=0,b; do { b=*v++; c|=(uint32_t)(b&127)<