diff --git a/basisu_backend.cpp b/basisu_backend.cpp index ef1a5c3..3a689e5 100644 --- a/basisu_backend.cpp +++ b/basisu_backend.cpp @@ -597,7 +597,7 @@ namespace basisu const uint32_t num_blocks_y = m_slices[slice_index].m_num_blocks_y; gpu_image gi; - gi.init(cETC1, width, height); + gi.init(texture_format::cETC1, width, height); for (uint32_t block_y = 0; block_y < num_blocks_y; block_y++) { diff --git a/basisu_basis_file.cpp b/basisu_basis_file.cpp index 81e0be3..3e6b190 100644 --- a/basisu_basis_file.cpp +++ b/basisu_basis_file.cpp @@ -32,7 +32,7 @@ namespace basisu for (uint32_t i = 0; i < encoder_output.m_slice_desc.size(); i++) m_header.m_total_images = maximum(m_header.m_total_images, encoder_output.m_slice_desc[i].m_source_file_index + 1); - m_header.m_format = basist::cETC1; + m_header.m_format = 0;// basist::block_format::cETC1; m_header.m_flags = 0; if (encoder_output.m_etc1s) diff --git a/basisu_comp.cpp b/basisu_comp.cpp index b676588..90f0657 100644 --- a/basisu_comp.cpp +++ b/basisu_comp.cpp @@ -57,7 +57,7 @@ namespace basisu PRINT_BOOL_VALUE(m_debug); PRINT_BOOL_VALUE(m_debug_images); PRINT_BOOL_VALUE(m_global_sel_pal); - PRINT_BOOL_VALUE(m_no_auto_global_sel_pal); + PRINT_BOOL_VALUE(m_auto_global_sel_pal); PRINT_BOOL_VALUE(m_compression_level); PRINT_BOOL_VALUE(m_no_hybrid_sel_cb); PRINT_BOOL_VALUE(m_perceptual); @@ -774,7 +774,7 @@ namespace basisu } m_auto_global_sel_pal = false; - if (!m_params.m_global_sel_pal && !m_params.m_no_auto_global_sel_pal) + if (!m_params.m_global_sel_pal && m_params.m_auto_global_sel_pal) { const float bits_per_selector_cluster = 31.0f; double selector_codebook_bpp_est = (bits_per_selector_cluster * selector_clusters) / total_texels; @@ -860,7 +860,7 @@ namespace basisu const uint32_t width = num_blocks_x * 4; const uint32_t height = num_blocks_y * 4; - m_frontend_output_textures[i].init(cETC1, width, height); + m_frontend_output_textures[i].init(texture_format::cETC1, width, height); for (uint32_t block_y = 0; block_y < num_blocks_y; block_y++) for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) @@ -875,7 +875,7 @@ namespace basisu } #endif - m_best_etc1s_images[i].init(cETC1, width, height); + m_best_etc1s_images[i].init(texture_format::cETC1, width, height); for (uint32_t block_y = 0; block_y < num_blocks_y; block_y++) for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) memcpy(m_best_etc1s_images[i].get_block_ptr(block_x, block_y, 0), &m_frontend.get_etc1s_block(slice_desc.m_first_block_index + block_x + block_y * num_blocks_x), sizeof(etc_block)); @@ -970,12 +970,12 @@ namespace basisu for (uint32_t i = 0; i < m_slice_descs.size(); i++) { gpu_image decoded_texture; - decoded_texture.init(cETC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); + decoded_texture.init(texture_format::cETC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); tm.start(); if (!decoder.transcode_slice(&comp_data[0], (uint32_t)comp_data.size(), i, - reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::cETC1, 8)) + reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::block_format::cETC1, 8)) { error_printf("Transcoding failed to ETC1 on slice %u!\n", i); return false; @@ -1008,12 +1008,12 @@ namespace basisu for (uint32_t i = 0; i < m_slice_descs.size(); i++) { gpu_image decoded_texture; - decoded_texture.init(cBC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); + decoded_texture.init(texture_format::cBC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); tm.start(); if (!decoder.transcode_slice(&comp_data[0], (uint32_t)comp_data.size(), i, - reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::cBC1, 8)) + reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::block_format::cBC1, 8)) { error_printf("Transcoding failed to BC1 on slice %u!\n", i); return false; diff --git a/basisu_comp.h b/basisu_comp.h index affbbd9..1c201dd 100644 --- a/basisu_comp.h +++ b/basisu_comp.h @@ -207,7 +207,7 @@ namespace basisu m_debug.clear(); m_debug_images.clear(); m_global_sel_pal.clear(); - m_no_auto_global_sel_pal.clear(); + m_auto_global_sel_pal.clear(); m_no_hybrid_sel_cb.clear(); m_perceptual.clear(); m_no_selector_rdo.clear(); @@ -279,7 +279,7 @@ namespace basisu param m_compression_level; bool_param m_global_sel_pal; - bool_param m_no_auto_global_sel_pal; + bool_param m_auto_global_sel_pal; // Frontend/backend codec parameters bool_param m_no_hybrid_sel_cb; diff --git a/basisu_frontend.cpp b/basisu_frontend.cpp index 06a8eb4..6f7a9bf 100644 --- a/basisu_frontend.cpp +++ b/basisu_frontend.cpp @@ -343,6 +343,7 @@ namespace basisu cur_blk.set_block_color5_etc1s(get_endpoint_cluster_unscaled_color(endpoint_cluster_index, false)); cur_blk.set_inten_tables_etc1s(get_endpoint_cluster_inten_table(endpoint_cluster_index, false)); cur_blk.set_raw_selector_bits(get_selector_cluster_selector_bits(old_selector_cluster_index).get_raw_selector_bits()); + cur_blk.set_flip_bit(true); const uint64_t cur_err = cur_blk.evaluate_etc1_error(get_source_pixel_block(block_index).get_ptr(), m_params.m_perceptual); @@ -2385,7 +2386,7 @@ namespace basisu void basisu_frontend::dump_debug_image(const char *pFilename, uint32_t first_block, uint32_t num_blocks_x, uint32_t num_blocks_y, bool output_blocks) { gpu_image g; - g.init(cETC1, num_blocks_x * 4, num_blocks_y * 4); + g.init(texture_format::cETC1, num_blocks_x * 4, num_blocks_y * 4); for (uint32_t y = 0; y < num_blocks_y; y++) { diff --git a/basisu_gpu_texture.cpp b/basisu_gpu_texture.cpp index d1d1018..fb9c392 100644 --- a/basisu_gpu_texture.cpp +++ b/basisu_gpu_texture.cpp @@ -596,33 +596,375 @@ namespace basisu return true; } + + struct fxt1_block + { + union + { + struct + { + uint64_t m_t00 : 2; + uint64_t m_t01 : 2; + uint64_t m_t02 : 2; + uint64_t m_t03 : 2; + uint64_t m_t04 : 2; + uint64_t m_t05 : 2; + uint64_t m_t06 : 2; + uint64_t m_t07 : 2; + uint64_t m_t08 : 2; + uint64_t m_t09 : 2; + uint64_t m_t10 : 2; + uint64_t m_t11 : 2; + uint64_t m_t12 : 2; + uint64_t m_t13 : 2; + uint64_t m_t14 : 2; + uint64_t m_t15 : 2; + uint64_t m_t16 : 2; + uint64_t m_t17 : 2; + uint64_t m_t18 : 2; + uint64_t m_t19 : 2; + uint64_t m_t20 : 2; + uint64_t m_t21 : 2; + uint64_t m_t22 : 2; + uint64_t m_t23 : 2; + uint64_t m_t24 : 2; + uint64_t m_t25 : 2; + uint64_t m_t26 : 2; + uint64_t m_t27 : 2; + uint64_t m_t28 : 2; + uint64_t m_t29 : 2; + uint64_t m_t30 : 2; + uint64_t m_t31 : 2; + } m_lo; + uint64_t m_lo_bits; + uint8_t m_sels[8]; + }; + + union + { + struct + { +#ifdef BASISU_USE_ORIGINAL_3DFX_FXT1_ENCODING + // This is the format that 3DFX's DECOMP.EXE tool expects, which I'm assuming is what the actual 3DFX hardware wanted. + // Unfortunately, color0/color1 and color2/color3 are flipped relative to the official OpenGL extension and Intel's documentation! + uint64_t m_b1 : 5; + uint64_t m_g1 : 5; + uint64_t m_r1 : 5; + uint64_t m_b0 : 5; + uint64_t m_g0 : 5; + uint64_t m_r0 : 5; + uint64_t m_b3 : 5; + uint64_t m_g3 : 5; + uint64_t m_r3 : 5; + uint64_t m_b2 : 5; + uint64_t m_g2 : 5; + uint64_t m_r2 : 5; +#else + // Intel's encoding, and the encoding in the OpenGL FXT1 spec. + uint64_t m_b0 : 5; + uint64_t m_g0 : 5; + uint64_t m_r0 : 5; + uint64_t m_b1 : 5; + uint64_t m_g1 : 5; + uint64_t m_r1 : 5; + uint64_t m_b2 : 5; + uint64_t m_g2 : 5; + uint64_t m_r2 : 5; + uint64_t m_b3 : 5; + uint64_t m_g3 : 5; + uint64_t m_r3 : 5; +#endif + uint64_t m_alpha : 1; + uint64_t m_glsb : 2; + uint64_t m_mode : 1; + } m_hi; + + uint64_t m_hi_bits; + }; + }; + + static color_rgba expand_565(const color_rgba& c) + { + return color_rgba((c.r << 3) | (c.r >> 2), (c.g << 2) | (c.g >> 4), (c.b << 3) | (c.b >> 2), 255); + } + + // We only support CC_MIXED non-alpha blocks here because that's the only mode the transcoder uses at the moment. + bool unpack_fxt1(const void *p, color_rgba *pPixels) + { + const fxt1_block* pBlock = static_cast(p); + + if (pBlock->m_hi.m_mode == 0) + return false; + if (pBlock->m_hi.m_alpha == 1) + return false; + + color_rgba colors[4]; + + colors[0].r = pBlock->m_hi.m_r0; + colors[0].g = (uint8_t)((pBlock->m_hi.m_g0 << 1) | ((pBlock->m_lo.m_t00 >> 1) ^ (pBlock->m_hi.m_glsb & 1))); + colors[0].b = pBlock->m_hi.m_b0; + colors[0].a = 255; + + colors[1].r = pBlock->m_hi.m_r1; + colors[1].g = (uint8_t)((pBlock->m_hi.m_g1 << 1) | (pBlock->m_hi.m_glsb & 1)); + colors[1].b = pBlock->m_hi.m_b1; + colors[1].a = 255; + + colors[2].r = pBlock->m_hi.m_r2; + colors[2].g = (uint8_t)((pBlock->m_hi.m_g2 << 1) | ((pBlock->m_lo.m_t16 >> 1) ^ (pBlock->m_hi.m_glsb >> 1))); + colors[2].b = pBlock->m_hi.m_b2; + colors[2].a = 255; + + colors[3].r = pBlock->m_hi.m_r3; + colors[3].g = (uint8_t)((pBlock->m_hi.m_g3 << 1) | (pBlock->m_hi.m_glsb >> 1)); + colors[3].b = pBlock->m_hi.m_b3; + colors[3].a = 255; + + for (uint32_t i = 0; i < 4; i++) + colors[i] = expand_565(colors[i]); + + color_rgba block0_colors[4]; + block0_colors[0] = colors[0]; + block0_colors[1] = color_rgba((colors[0].r * 2 + colors[1].r + 1) / 3, (colors[0].g * 2 + colors[1].g + 1) / 3, (colors[0].b * 2 + colors[1].b + 1) / 3, 255); + block0_colors[2] = color_rgba((colors[1].r * 2 + colors[0].r + 1) / 3, (colors[1].g * 2 + colors[0].g + 1) / 3, (colors[1].b * 2 + colors[0].b + 1) / 3, 255); + block0_colors[3] = colors[1]; + + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t sel = (pBlock->m_sels[i >> 2] >> ((i & 3) * 2)) & 3; + + const uint32_t x = i & 3; + const uint32_t y = i >> 2; + pPixels[x + y * 8] = block0_colors[sel]; + } + + color_rgba block1_colors[4]; + block1_colors[0] = colors[2]; + block1_colors[1] = color_rgba((colors[2].r * 2 + colors[3].r + 1) / 3, (colors[2].g * 2 + colors[3].g + 1) / 3, (colors[2].b * 2 + colors[3].b + 1) / 3, 255); + block1_colors[2] = color_rgba((colors[3].r * 2 + colors[2].r + 1) / 3, (colors[3].g * 2 + colors[2].g + 1) / 3, (colors[3].b * 2 + colors[2].b + 1) / 3, 255); + block1_colors[3] = colors[3]; + + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t sel = (pBlock->m_sels[4 + (i >> 2)] >> ((i & 3) * 2)) & 3; + + const uint32_t x = i & 3; + const uint32_t y = i >> 2; + pPixels[4 + x + y * 8] = block1_colors[sel]; + } + + return true; + } + + struct pvrtc2_block + { + uint8_t m_modulation[4]; + + union + { + union + { + // Opaque mode: RGB colora=554 and colorb=555 + struct + { + uint32_t m_mod_flag : 1; + uint32_t m_blue_a : 4; + uint32_t m_green_a : 5; + uint32_t m_red_a : 5; + uint32_t m_hard_flag : 1; + uint32_t m_blue_b : 5; + uint32_t m_green_b : 5; + uint32_t m_red_b : 5; + uint32_t m_opaque_flag : 1; + + } m_opaque_color_data; + + // Transparent mode: RGBA colora=4433 and colorb=4443 + struct + { + uint32_t m_mod_flag : 1; + uint32_t m_blue_a : 3; + uint32_t m_green_a : 4; + uint32_t m_red_a : 4; + uint32_t m_alpha_a : 3; + uint32_t m_hard_flag : 1; + uint32_t m_blue_b : 4; + uint32_t m_green_b : 4; + uint32_t m_red_b : 4; + uint32_t m_alpha_b : 3; + uint32_t m_opaque_flag : 1; + + } m_trans_color_data; + }; + + uint32_t m_color_data_bits; + }; + }; + + static color_rgba convert_rgb_555_to_888(const color_rgba& col) + { + return color_rgba((col[0] << 3) | (col[0] >> 2), (col[1] << 3) | (col[1] >> 2), (col[2] << 3) | (col[2] >> 2), 255); + } + + static color_rgba convert_rgba_5554_to_8888(const color_rgba& col) + { + return color_rgba((col[0] << 3) | (col[0] >> 2), (col[1] << 3) | (col[1] >> 2), (col[2] << 3) | (col[2] >> 2), (col[3] << 4) | col[3]); + } + + // PVRTC2 is currently limited to only what our transcoder outputs (non-interpolated, hard_flag=1 modulation=0). In this mode, PVRTC2 looks much like BC1/ATC. + bool unpack_pvrtc2(const void *p, color_rgba *pPixels) + { + const pvrtc2_block* pBlock = static_cast(p); + + if ((!pBlock->m_opaque_color_data.m_hard_flag) || (pBlock->m_opaque_color_data.m_mod_flag)) + { + // This mode isn't supported by the transcoder, so we aren't bothering with it here. + return false; + } + + color_rgba colors[4]; + + if (pBlock->m_opaque_color_data.m_opaque_flag) + { + // colora=554 + color_rgba color_a(pBlock->m_opaque_color_data.m_red_a, pBlock->m_opaque_color_data.m_green_a, (pBlock->m_opaque_color_data.m_blue_a << 1) | (pBlock->m_opaque_color_data.m_blue_a >> 3), 255); + + // colora=555 + color_rgba color_b(pBlock->m_opaque_color_data.m_red_b, pBlock->m_opaque_color_data.m_green_b, pBlock->m_opaque_color_data.m_blue_b, 255); + + colors[0] = convert_rgb_555_to_888(color_a); + colors[3] = convert_rgb_555_to_888(color_b); + + colors[1].set((colors[0].r * 5 + colors[3].r * 3) / 8, (colors[0].g * 5 + colors[3].g * 3) / 8, (colors[0].b * 5 + colors[3].b * 3) / 8, 255); + colors[2].set((colors[0].r * 3 + colors[3].r * 5) / 8, (colors[0].g * 3 + colors[3].g * 5) / 8, (colors[0].b * 3 + colors[3].b * 5) / 8, 255); + } + else + { + // colora=4433 + color_rgba color_a( + (pBlock->m_trans_color_data.m_red_a << 1) | (pBlock->m_trans_color_data.m_red_a >> 3), + (pBlock->m_trans_color_data.m_green_a << 1) | (pBlock->m_trans_color_data.m_green_a >> 3), + (pBlock->m_trans_color_data.m_blue_a << 2) | (pBlock->m_trans_color_data.m_blue_a >> 1), + pBlock->m_trans_color_data.m_alpha_a << 1); + + //colorb=4443 + color_rgba color_b( + (pBlock->m_trans_color_data.m_red_b << 1) | (pBlock->m_trans_color_data.m_red_b >> 3), + (pBlock->m_trans_color_data.m_green_b << 1) | (pBlock->m_trans_color_data.m_green_b >> 3), + (pBlock->m_trans_color_data.m_blue_b << 1) | (pBlock->m_trans_color_data.m_blue_b >> 3), + (pBlock->m_trans_color_data.m_alpha_b << 1) | 1); + + colors[0] = convert_rgba_5554_to_8888(color_a); + colors[3] = convert_rgba_5554_to_8888(color_b); + } + + colors[1].set((colors[0].r * 5 + colors[3].r * 3) / 8, (colors[0].g * 5 + colors[3].g * 3) / 8, (colors[0].b * 5 + colors[3].b * 3) / 8, (colors[0].a * 5 + colors[3].a * 3) / 8); + colors[2].set((colors[0].r * 3 + colors[3].r * 5) / 8, (colors[0].g * 3 + colors[3].g * 5) / 8, (colors[0].b * 3 + colors[3].b * 5) / 8, (colors[0].a * 3 + colors[3].a * 5) / 8); + + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t sel = (pBlock->m_modulation[i >> 2] >> ((i & 3) * 2)) & 3; + pPixels[i] = colors[sel]; + } + + return true; + } + + struct etc2_eac_r11 + { + uint64_t m_base : 8; + uint64_t m_table : 4; + uint64_t m_mul : 4; + uint64_t m_sels_0 : 8; + uint64_t m_sels_1 : 8; + uint64_t m_sels_2 : 8; + uint64_t m_sels_3 : 8; + uint64_t m_sels_4 : 8; + uint64_t m_sels_5 : 8; + + uint64_t get_sels() const + { + return ((uint64_t)m_sels_0 << 40U) | ((uint64_t)m_sels_1 << 32U) | ((uint64_t)m_sels_2 << 24U) | ((uint64_t)m_sels_3 << 16U) | ((uint64_t)m_sels_4 << 8U) | m_sels_5; + } + + void set_sels(uint64_t v) + { + m_sels_0 = (v >> 40U) & 0xFF; + m_sels_1 = (v >> 32U) & 0xFF; + m_sels_2 = (v >> 24U) & 0xFF; + m_sels_3 = (v >> 16U) & 0xFF; + m_sels_4 = (v >> 8U) & 0xFF; + m_sels_5 = v & 0xFF; + } + }; + + struct etc2_eac_rg11 + { + etc2_eac_r11 m_c[2]; + }; + + static void unpack_etc2_eac_r(const etc2_eac_r11* p, color_rgba* pPixels, uint32_t c) + { + const uint64_t sels = p->get_sels(); + + const int base = (int)p->m_base * 8 + 4; + const int mul = p->m_mul ? ((int)p->m_mul * 8) : 1; + const int table = (int)p->m_table; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t shift = 45 - ((y + x * 4) * 3); + + const uint32_t sel = (uint32_t)((sels >> shift) & 7); + + int val = base + g_etc2_eac_tables[table][sel] * mul; + val = clamp(val, 0, 2047); + + // Convert to 8-bits with rounding + pPixels[x + y * 4].m_comps[c] = static_cast((val * 255 + 1024) / 2047); + + } // x + } // y + } + + void unpack_etc2_eac_rg(const void* p, color_rgba* pPixels) + { + for (uint32_t c = 0; c < 2; c++) + { + const etc2_eac_r11* pBlock = &static_cast(p)->m_c[c]; + + unpack_etc2_eac_r(pBlock, pPixels, c); + } + } // Unpacks to RGBA, R, RG, or A bool unpack_block(texture_format fmt, const void* pBlock, color_rgba* pPixels) { switch (fmt) { - case cBC1: + case texture_format::cBC1: { unpack_bc1(pBlock, pPixels, true); break; } - case cBC3: + case texture_format::cBC3: { return unpack_bc3(pBlock, pPixels); } - case cBC4: + case texture_format::cBC4: { // Unpack to R unpack_bc4(pBlock, &pPixels[0].r, sizeof(color_rgba)); break; } - case cBC5: + case texture_format::cBC5: { unpack_bc5(pBlock, pPixels); break; } - case cBC7: + case texture_format::cBC7: { // We only support modes 5 and 6. if (!unpack_bc7_mode5(pBlock, pPixels)) @@ -634,42 +976,62 @@ namespace basisu break; } // Full ETC2 color blocks (planar/T/H modes) is currently unsupported in basisu, but we do support ETC2 with alpha (using ETC1 for color) - case cETC2_RGB: - case cETC1: - case cETC1S: + case texture_format::cETC2_RGB: + case texture_format::cETC1: + case texture_format::cETC1S: { return unpack_etc1(*static_cast(pBlock), pPixels); } - case cETC2_RGBA: + case texture_format::cETC2_RGBA: { if (!unpack_etc1(static_cast(pBlock)[1], pPixels)) return false; unpack_etc2_eac(pBlock, pPixels); break; } - case cETC2_ALPHA: + case texture_format::cETC2_ALPHA: { // Unpack to A unpack_etc2_eac(pBlock, pPixels); break; } - case cASTC4x4: + case texture_format::cASTC4x4: { const bool astc_srgb = false; basisu_astc::astc::decompress(reinterpret_cast(pPixels), static_cast(pBlock), astc_srgb, 4, 4); break; } - case cATC_RGB: + case texture_format::cATC_RGB: { unpack_atc(pBlock, pPixels); break; } - case cATC_RGBA_INTERPOLATED_ALPHA: + case texture_format::cATC_RGBA_INTERPOLATED_ALPHA: { unpack_atc(static_cast(pBlock) + 8, pPixels); unpack_bc4(pBlock, &pPixels[0].a, sizeof(color_rgba)); break; } + case texture_format::cFXT1_RGB: + { + unpack_fxt1(pBlock, pPixels); + break; + } + case texture_format::cPVRTC2_4_RGBA: + { + unpack_pvrtc2(pBlock, pPixels); + break; + } + case texture_format::cETC2_R11_EAC: + { + unpack_etc2_eac_r(static_cast(pBlock), pPixels, 0); + break; + } + case texture_format::cETC2_RG11_EAC: + { + unpack_etc2_eac_rg(pBlock, pPixels); + break; + } default: { assert(0); @@ -688,7 +1050,7 @@ namespace basisu if (!img.get_width() || !img.get_height()) return true; - if ((m_fmt == cPVRTC1_4_RGB) || (m_fmt == cPVRTC1_4_RGBA)) + if ((m_fmt == texture_format::cPVRTC1_4_RGB) || (m_fmt == texture_format::cPVRTC1_4_RGBA)) { pvrtc4_image pi(m_width, m_height, pvrtc_wrap_addressing); @@ -704,6 +1066,7 @@ namespace basisu return true; } + assert((m_block_width <= cMaxBlockSize) && (m_block_height <= cMaxBlockSize)); color_rgba pixels[cMaxBlockSize * cMaxBlockSize]; for (uint32_t i = 0; i < cMaxBlockSize * cMaxBlockSize; i++) pixels[i] = g_black_color; @@ -751,7 +1114,12 @@ namespace basisu KTX_COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0, KTX_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93D0, KTX_ATC_RGB_AMD = 0x8C92, - KTX_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 0x87EE + KTX_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 0x87EE, + KTX_COMPRESSED_RGB_FXT1_3DFX = 0x86B0, + KTX_COMPRESSED_RGBA_FXT1_3DFX = 0x86B1, + KTX_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG = 0x9138, + KTX_COMPRESSED_R11_EAC = 0x9270, + KTX_COMPRESSED_RG11_EAC = 0x9272 }; struct ktx_header @@ -784,7 +1152,7 @@ namespace basisu } uint32_t width = 0, height = 0, total_levels = 0; - basisu::texture_format fmt = cInvalidTextureFormat; + basisu::texture_format fmt = texture_format::cInvalidTextureFormat; if (cubemap_flag) { @@ -851,80 +1219,103 @@ namespace basisu switch (fmt) { - case cBC1: + case texture_format::cBC1: { internal_fmt = KTX_COMPRESSED_RGB_S3TC_DXT1_EXT; break; } - case cBC3: + case texture_format::cBC3: { internal_fmt = KTX_COMPRESSED_RGBA_S3TC_DXT5_EXT; base_internal_fmt = KTX_RGBA; break; } - case cBC4: + case texture_format::cBC4: { internal_fmt = KTX_COMPRESSED_RED_RGTC1_EXT;// KTX_COMPRESSED_LUMINANCE_LATC1_EXT; base_internal_fmt = KTX_RED; break; } - case cBC5: + case texture_format::cBC5: { internal_fmt = KTX_COMPRESSED_RED_GREEN_RGTC2_EXT; base_internal_fmt = KTX_RG; break; } - case cETC1: - case cETC1S: + case texture_format::cETC1: + case texture_format::cETC1S: { internal_fmt = KTX_ETC1_RGB8_OES; break; } - case cETC2_RGB: + case texture_format::cETC2_RGB: { internal_fmt = KTX_COMPRESSED_RGB8_ETC2; break; } - case cETC2_RGBA: + case texture_format::cETC2_RGBA: { internal_fmt = KTX_COMPRESSED_RGBA8_ETC2_EAC; base_internal_fmt = KTX_RGBA; break; } - case cBC7: + case texture_format::cBC7: { internal_fmt = KTX_COMPRESSED_RGBA_BPTC_UNORM; base_internal_fmt = KTX_RGBA; break; } - case cPVRTC1_4_RGB: + case texture_format::cPVRTC1_4_RGB: { internal_fmt = KTX_COMPRESSED_RGB_PVRTC_4BPPV1_IMG; break; } - case cPVRTC1_4_RGBA: + case texture_format::cPVRTC1_4_RGBA: { internal_fmt = KTX_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; base_internal_fmt = KTX_RGBA; break; } - case cASTC4x4: + case texture_format::cASTC4x4: { internal_fmt = KTX_COMPRESSED_RGBA_ASTC_4x4_KHR; base_internal_fmt = KTX_RGBA; break; } - case cATC_RGB: + case texture_format::cATC_RGB: { internal_fmt = KTX_ATC_RGB_AMD; break; } - case cATC_RGBA_INTERPOLATED_ALPHA: + case texture_format::cATC_RGBA_INTERPOLATED_ALPHA: { internal_fmt = KTX_ATC_RGBA_INTERPOLATED_ALPHA_AMD; base_internal_fmt = KTX_RGBA; break; } + case texture_format::cETC2_R11_EAC: + { + internal_fmt = KTX_COMPRESSED_R11_EAC; + base_internal_fmt = KTX_RED; + break; + } + case texture_format::cETC2_RG11_EAC: + { + internal_fmt = KTX_COMPRESSED_RG11_EAC; + base_internal_fmt = KTX_RG; + break; + } + case texture_format::cFXT1_RGB: + { + internal_fmt = KTX_COMPRESSED_RGB_FXT1_3DFX; + break; + } + case texture_format::cPVRTC2_4_RGBA: + { + internal_fmt = KTX_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG; + base_internal_fmt = KTX_RGBA; + break; + } default: { // TODO @@ -1024,5 +1415,37 @@ namespace basisu return write_compressed_texture_file(pFilename, v, false); } + const uint32_t OUT_FILE_MAGIC = 'TEXC'; + struct out_file_header + { + packed_uint<4> m_magic; + packed_uint<4> m_pad; + packed_uint<4> m_width; + packed_uint<4> m_height; + }; + + // As no modern tool supports FXT1 format .KTX files, let's write .OUT files and make sure 3DFX's original tools shipped in 1999 can decode our encoded output. + bool write_3dfx_out_file(const char* pFilename, const gpu_image& gi) + { + out_file_header hdr; + hdr.m_magic = OUT_FILE_MAGIC; + hdr.m_pad = 0; + hdr.m_width = gi.get_blocks_x() * 8; + hdr.m_height = gi.get_blocks_y() * 4; + + FILE* pFile = nullptr; +#ifdef _WIN32 + fopen_s(&pFile, pFilename, "wb"); +#else + pFile = fopen(pFilename, "wb"); +#endif + if (!pFile) + return false; + + fwrite(&hdr, sizeof(hdr), 1, pFile); + fwrite(gi.get_ptr(), gi.get_size_in_bytes(), 1, pFile); + + return fclose(pFile) != EOF; + } } // basisu diff --git a/basisu_gpu_texture.h b/basisu_gpu_texture.h index 9b18116..26a507e 100644 --- a/basisu_gpu_texture.h +++ b/basisu_gpu_texture.h @@ -37,7 +37,7 @@ namespace basisu void clear() { - m_fmt = cInvalidTextureFormat; + m_fmt = texture_format::cInvalidTextureFormat; m_width = 0; m_height = 0; m_block_width = 0; @@ -132,6 +132,7 @@ namespace basisu bool write_compressed_texture_file(const char *pFilename, const gpu_image &g); + bool write_3dfx_out_file(const char* pFilename, const gpu_image& gi); // GPU texture block unpacking void unpack_etc2_eac(const void *pBlock_bits, color_rgba *pPixels); @@ -142,6 +143,9 @@ namespace basisu bool unpack_bc7_mode6(const void *pBlock_bits, color_rgba *pPixels); bool unpack_bc7_mode5(const void* pBlock_bits, color_rgba* pPixels); void unpack_atc(const void* pBlock_bits, color_rgba* pPixels); + bool unpack_fxt1(const void* p, color_rgba* pPixels); + bool unpack_pvrtc2(const void* p, color_rgba* pPixels); + void unpack_etc2_eac_rg(const void* p, color_rgba* pPixels); // unpack_block() is only capable of unpacking texture data created by the transcoder. // For some texture formats (like BC7, or ETC2) it's not a complete implementation. diff --git a/basisu_tool.cpp b/basisu_tool.cpp index 92ff6e9..3806b51 100644 --- a/basisu_tool.cpp +++ b/basisu_tool.cpp @@ -27,7 +27,7 @@ using namespace basisu; -#define BASISU_TOOL_VERSION "1.09.00" +#define BASISU_TOOL_VERSION "1.10.00" enum tool_mode { @@ -108,7 +108,7 @@ static void print_usage() "\n" "Hierarchical virtual selector codebook options:\n" " -global_sel_pal: Always use vitual selector palettes (instead of custom palettes), slightly smaller files, but lower quality, slower encoding\n" - " -no_auto_global_sel_pal: Don't automatically use virtual selector palettes on small images\n" + " -auto_global_sel_pal: Automatically use virtual selector palettes on small images for slightly smaller files (defaults to off for faster encoding time)\n" " -no_hybrid_sel_cb: Don't automatically use hybrid virtual selector codebooks (for higher quality, only active when -global_sel_pal is specified)\n" " -global_pal_bits X: Set virtual selector codebook palette bits, range is [0,12], default is 8, higher is slower/better quality\n" " -global_mod_bits X: Set virtual selector codebook modifier bits, range is [0,15], defualt is 8, higher is slower/better quality\n" @@ -407,7 +407,9 @@ public: else if (strcasecmp(pArg, "-global_sel_pal") == 0) m_comp_params.m_global_sel_pal = true; else if (strcasecmp(pArg, "-no_auto_global_sel_pal") == 0) - m_comp_params.m_no_auto_global_sel_pal = true; + m_comp_params.m_auto_global_sel_pal = false; + else if (strcasecmp(pArg, "-auto_global_sel_pal") == 0) + m_comp_params.m_auto_global_sel_pal = true; else if (strcasecmp(pArg, "-global_pal_bits") == 0) { REMAINING_ARGS_CHECK(1); @@ -942,14 +944,14 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl printf("start_transcoding time: %3.3f ms\n", tm.get_elapsed_ms()); - std::vector< gpu_image_vec > gpu_images[basist::cTFTotalTextureFormats]; + std::vector< gpu_image_vec > gpu_images[(int)basist::transcoder_texture_format::cTFTotalTextureFormats]; int first_format = 0; - int last_format = basist::cTFTotalBlockTextureFormats; + int last_format = (int)basist::transcoder_texture_format::cTFTotalTextureFormats; if (opts.m_etc1_only) { - first_format = basist::cTFETC1; + first_format = (int)basist::transcoder_texture_format::cTFETC1_RGB; last_format = first_format + 1; } @@ -957,15 +959,23 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl { basist::transcoder_texture_format tex_fmt = static_cast(format_iter); - gpu_images[tex_fmt].resize(fileinfo.m_total_images); + if (basist::basis_transcoder_format_is_uncompressed(tex_fmt)) + continue; + + gpu_images[(int)tex_fmt].resize(fileinfo.m_total_images); for (uint32_t image_index = 0; image_index < fileinfo.m_total_images; image_index++) - gpu_images[tex_fmt][image_index].resize(fileinfo.m_image_mipmap_levels[image_index]); + gpu_images[(int)tex_fmt][image_index].resize(fileinfo.m_image_mipmap_levels[image_index]); } // Now transcode the file to all supported texture formats and save mipmapped KTX files for (int format_iter = first_format; format_iter < last_format; format_iter++) { + const basist::transcoder_texture_format transcoder_tex_fmt = static_cast(format_iter); + + if (basist::basis_transcoder_format_is_uncompressed(transcoder_tex_fmt)) + continue; + for (uint32_t image_index = 0; image_index < fileinfo.m_total_images; image_index++) { for (uint32_t level_index = 0; level_index < fileinfo.m_image_mipmap_levels[image_index]; level_index++) @@ -977,10 +987,8 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl error_printf("Failed retrieving image level information (%u %u)!\n", image_index, level_index); return false; } - - const basist::transcoder_texture_format transcoder_tex_fmt = static_cast(format_iter); - - if ((transcoder_tex_fmt == basist::cTFPVRTC1_4_RGB) || (transcoder_tex_fmt == basist::cTFPVRTC1_4_RGBA)) + + if ((transcoder_tex_fmt == basist::transcoder_texture_format::cTFPVRTC1_4_RGB) || (transcoder_tex_fmt == basist::transcoder_texture_format::cTFPVRTC1_4_RGBA)) { if (!is_pow2(level_info.m_width) || !is_pow2(level_info.m_height)) { @@ -995,14 +1003,14 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl basisu::texture_format tex_fmt = basis_get_basisu_texture_format(transcoder_tex_fmt); - gpu_image& gi = gpu_images[transcoder_tex_fmt][image_index][level_index]; + gpu_image& gi = gpu_images[(int)transcoder_tex_fmt][image_index][level_index]; gi.init(tex_fmt, level_info.m_orig_width, level_info.m_orig_height); // Fill the buffer with psuedo-random bytes, to help more visibly detect cases where the transcoder fails to write to part of the output. fill_buffer_with_random_bytes(gi.get_ptr(), gi.get_size_in_bytes()); tm.start(); -#if 1 + if (!dec.transcode_image_level(&basis_data[0], (uint32_t)basis_data.size(), image_index, level_index, gi.get_ptr(), gi.get_total_blocks(), transcoder_tex_fmt, 0)) { error_printf("Failed transcoding image level (%u %u %u)!\n", image_index, level_index, format_iter); @@ -1010,36 +1018,6 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl } double total_transcode_time = tm.get_elapsed_ms(); -#else - // quick and dirty row pitch parameter test, to be moved into a unit test - uint8_vec temp; - uint32_t block_pitch_to_test = level_info.m_num_blocks_x; - if ((transcoder_tex_fmt != basist::cTFPVRTC1_4_RGB) || (transcoder_tex_fmt != basist::cTFPVRTC1_4_RGBA)) - block_pitch_to_test += 5; - - temp.resize(level_info.m_num_blocks_y * block_pitch_to_test * gi.get_bytes_per_block()); - fill_buffer_with_random_bytes(&temp[0], temp.size()); - - tm.start(); - - if (!dec.transcode_image_level(&basis_data[0], (uint32_t)basis_data.size(), image_index, level_index, &temp[0], (uint32_t)(temp.size() / gi.get_bytes_per_block()), transcoder_tex_fmt, 0, block_pitch_to_test)) - { - error_printf("Failed transcoding image level (%u %u %u)!\n", image_index, level_index, format_iter); - return false; - } - double total_transcode_time = tm.get_elapsed_ms(); - - if ((transcoder_tex_fmt == basist::cTFPVRTC1_4_RGB) || (transcoder_tex_fmt == basist::cTFPVRTC1_4_RGBA)) - { - assert(temp.size() == gi.get_size_in_bytes()); - memcpy(gi.get_ptr(), &temp[0], gi.get_size_in_bytes()); - } - else - { - for (uint32_t y = 0; y < level_info.m_num_blocks_y; y++) - memcpy(gi.get_block_ptr(0, y), &temp[y * block_pitch_to_test * gi.get_bytes_per_block()], gi.get_row_pitch_in_bytes()); - } -#endif printf("Transcode of image %u level %u res %ux%u format %s succeeded in %3.3f ms\n", image_index, level_index, level_info.m_orig_width, level_info.m_orig_height, basist::basis_get_format_name(transcoder_tex_fmt), total_transcode_time); @@ -1057,6 +1035,9 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl { const basist::transcoder_texture_format transcoder_tex_fmt = static_cast(format_iter); + if (basist::basis_transcoder_format_is_uncompressed(transcoder_tex_fmt)) + continue; + if ((!opts.m_no_ktx) && (fileinfo.m_tex_type == basist::cBASISTexTypeCubemapArray)) { // No KTX tool that we know of supports cubemap arrays, so write individual cubemap files. @@ -1132,6 +1113,21 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl } printf("Wrote PNG file \"%s\"\n", rgb_filename.c_str()); + if (transcoder_tex_fmt == basist::transcoder_texture_format::cTFFXT1_RGB) + { + std::string out_filename; + if (gi.size() > 1) + out_filename = base_filename + string_format("_unpacked_rgb_%s_%u_%04u.out", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index); + else + out_filename = base_filename + string_format("_unpacked_rgb_%s_%04u.out", basist::basis_get_format_name(transcoder_tex_fmt), image_index); + if (!write_3dfx_out_file(out_filename.c_str(), gi[level_index])) + { + error_printf("Failed writing to OUT file \"%s\"\n", out_filename.c_str()); + return false; + } + printf("Wrote .OUT file \"%s\"\n", out_filename.c_str()); + } + if (basis_transcoder_format_has_alpha(transcoder_tex_fmt)) { std::string a_filename; @@ -1160,7 +1156,7 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl { for (uint32_t level_index = 0; level_index < fileinfo.m_image_mipmap_levels[image_index]; level_index++) { - const basist::transcoder_texture_format transcoder_tex_fmt = basist::cTFRGBA32; + const basist::transcoder_texture_format transcoder_tex_fmt = basist::transcoder_texture_format::cTFRGBA32; basist::basisu_image_level_info level_info; @@ -1210,7 +1206,7 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl { for (uint32_t level_index = 0; level_index < fileinfo.m_image_mipmap_levels[image_index]; level_index++) { - const basist::transcoder_texture_format transcoder_tex_fmt = basist::cTFRGB565; + const basist::transcoder_texture_format transcoder_tex_fmt = basist::transcoder_texture_format::cTFRGB565; basist::basisu_image_level_info level_info; @@ -1258,14 +1254,6 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl } printf("Wrote PNG file \"%s\"\n", rgb_filename.c_str()); - std::string a_filename(base_filename + string_format("_unpacked_a_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index)); - if (!save_png(a_filename, img, cImageSaveGrayscale, 3)) - { - error_printf("Failed writing to PNG file \"%s\"\n", a_filename.c_str()); - return false; - } - printf("Wrote PNG file \"%s\"\n", a_filename.c_str()); - } // level_index } // image_index @@ -1274,7 +1262,7 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl { for (uint32_t level_index = 0; level_index < fileinfo.m_image_mipmap_levels[image_index]; level_index++) { - const basist::transcoder_texture_format transcoder_tex_fmt = basist::cTFRGBA4444; + const basist::transcoder_texture_format transcoder_tex_fmt = basist::transcoder_texture_format::cTFRGBA4444; basist::basisu_image_level_info level_info; diff --git a/transcoder/basisu.h b/transcoder/basisu.h index 58b74df..25600a6 100644 --- a/transcoder/basisu.h +++ b/transcoder/basisu.h @@ -301,7 +301,7 @@ namespace basisu // GPU texture formats - enum texture_format + enum class texture_format { cInvalidTextureFormat = -1, @@ -321,6 +321,10 @@ namespace basisu cPVRTC1_4_RGBA, cATC_RGB, cATC_RGBA_INTERPOLATED_ALPHA, + cFXT1_RGB, + cPVRTC2_4_RGBA, + cETC2_R11_EAC, + cETC2_RG11_EAC, // Uncompressed/raw pixels cRGBA32, @@ -334,17 +338,19 @@ namespace basisu { switch (fmt) { - case cETC1: - case cETC1S: - case cETC2_RGB: - case cETC2_ALPHA: - case cBC1: - case cBC4: - case cPVRTC1_4_RGB: - case cPVRTC1_4_RGBA: - case cATC_RGB: + case texture_format::cETC1: + case texture_format::cETC1S: + case texture_format::cETC2_RGB: + case texture_format::cETC2_ALPHA: + case texture_format::cBC1: + case texture_format::cBC4: + case texture_format::cPVRTC1_4_RGB: + case texture_format::cPVRTC1_4_RGBA: + case texture_format::cATC_RGB: + case texture_format::cPVRTC2_4_RGBA: + case texture_format::cETC2_R11_EAC: return 8; - case cRGBA32: + case texture_format::cRGBA32: return sizeof(uint32_t) * 16; default: break; @@ -360,6 +366,13 @@ namespace basisu inline uint32_t get_block_width(texture_format fmt) { BASISU_NOTE_UNUSED(fmt); + switch (fmt) + { + case texture_format::cFXT1_RGB: + return 8; + default: + break; + } return 4; } diff --git a/transcoder/basisu_transcoder.cpp b/transcoder/basisu_transcoder.cpp index 08a4661..d7386d1 100644 --- a/transcoder/basisu_transcoder.cpp +++ b/transcoder/basisu_transcoder.cpp @@ -71,6 +71,23 @@ #define BASISD_SUPPORT_ATC 1 #endif +// Support for ETC2 EAC R11 and ETC2 EAC RG11 +#ifndef BASISD_SUPPORT_ETC2_EAC_RG11 +#define BASISD_SUPPORT_ETC2_EAC_RG11 1 +#endif + +#if BASISD_SUPPORT_PVRTC2 +#if !BASISD_SUPPORT_ATC +#error BASISD_SUPPORT_ATC must be 1 if BASISD_SUPPORT_PVRTC2 is 1 +#endif +#endif + +#if BASISD_SUPPORT_ATC +#if !BASISD_SUPPORT_DXT5A +#error BASISD_SUPPORT_DXT5A must be 1 if BASISD_SUPPORT_ATC is 1 +#endif +#endif + // If BASISD_SUPPORT_ASTC_HIGHER_OPAQUE_QUALITY is 1, opaque blocks will be transcoded to ASTC at slightly higher quality (higher than BC1), but the transcoder tables will be 2x as large. // This impacts grayscale and grayscale+alpha textures the most. #ifndef BASISD_SUPPORT_ASTC_HIGHER_OPAQUE_QUALITY @@ -83,12 +100,21 @@ #endif #endif -#define BASISD_WRITE_NEW_BC7_TABLES 0 -#define BASISD_WRITE_NEW_BC7_MODE5_TABLES 0 -#define BASISD_WRITE_NEW_DXT1_TABLES 0 -#define BASISD_WRITE_NEW_ETC2_EAC_A8_TABLES 0 -#define BASISD_WRITE_NEW_ASTC_TABLES 0 -#define BASISD_WRITE_NEW_ATC_TABLES 0 +#ifndef BASISD_SUPPORT_FXT1 +#define BASISD_SUPPORT_FXT1 1 +#endif + +#ifndef BASISD_SUPPORT_PVRTC2 +#define BASISD_SUPPORT_PVRTC2 1 +#endif + +#define BASISD_WRITE_NEW_BC7_TABLES 0 +#define BASISD_WRITE_NEW_BC7_MODE5_TABLES 0 +#define BASISD_WRITE_NEW_DXT1_TABLES 0 +#define BASISD_WRITE_NEW_ETC2_EAC_A8_TABLES 0 +#define BASISD_WRITE_NEW_ASTC_TABLES 0 +#define BASISD_WRITE_NEW_ATC_TABLES 0 +#define BASISD_WRITE_NEW_ETC2_EAC_R11_TABLES 0 #ifndef BASISD_ENABLE_DEBUG_FLAGS #define BASISD_ENABLE_DEBUG_FLAGS 0 @@ -1240,20 +1266,8 @@ namespace basist } #endif -#if BASISD_SUPPORT_ETC2_EAC_A8 - enum - { - cEAC_A8_BYTES_PER_BLOCK = 8, - cEAC_A8_SELECTOR_BYTES = 6, - cEAC_A8_SELECTOR_BITS = 3, - cEAC_RGBA8_BYTES_PER_BLOCK = 16, - cEAC_RGBA8_RGB_OFFSET = 8, - cEAC_RGBA8_A_OFFSET = 0, - cEAC_A8_MIN_VALUE_SELECTOR = 3, - cEAC_A8_MAX_VALUE_SELECTOR = 7 - }; - - static const int8_t g_eac_a8_modifier_table[16][8] = +#if BASISD_SUPPORT_ETC2_EAC_A8 || BASISD_SUPPORT_ETC2_EAC_RG11 + static const int8_t g_eac_modifier_table[16][8] = { { -3, -6, -9, -15, 2, 5, 8, 14 }, { -3, -7, -10, -13, 2, 6, 9, 12 }, @@ -1274,7 +1288,8 @@ namespace basist { -3, -5, -7, -9, 2, 4, 6, 8 } }; - struct eac_a8_block + // Used by ETC2 EAC A8 and ETC2 EAC R11/RG11. + struct eac_block { uint16_t m_base : 8; @@ -1327,6 +1342,28 @@ namespace basist } }; + static const dxt_selector_range s_etc2_eac_selector_ranges[] = + { + { 0, 3 }, + + { 1, 3 }, + { 0, 2 }, + + { 1, 2 }, + }; + + const uint32_t NUM_ETC2_EAC_SELECTOR_RANGES = sizeof(s_etc2_eac_selector_ranges) / sizeof(s_etc2_eac_selector_ranges[0]); + + struct etc1_g_to_eac_conversion + { + uint8_t m_base; + uint8_t m_table_mul; // mul*16+table + uint16_t m_trans; // translates ETC1 selectors to ETC2_EAC_A8 + }; +#endif // BASISD_SUPPORT_ETC2_EAC_A8 || BASISD_SUPPORT_ETC2_EAC_RG11 + +#if BASISD_SUPPORT_ETC2_EAC_A8 + #if BASISD_WRITE_NEW_ETC2_EAC_A8_TABLES struct pack_eac_a8_results { @@ -1360,7 +1397,7 @@ namespace basist uint32_t best_s = 0; for (uint32_t s = 0; s < 8; s++) { - int v = (int)multiplier * g_eac_a8_modifier_table[table][s] + (int)base_color; + int v = (int)multiplier * g_eac_modifier_table[table][s] + (int)base_color; if (v < 0) v = 0; else if (v > 255) @@ -1398,32 +1435,13 @@ namespace basist return best_err; } -#endif - - static const dxt_selector_range s_etc2_eac_a8_selector_ranges[] = - { - { 0, 3 }, - - { 1, 3 }, - { 0, 2 }, - - { 1, 2 }, - }; - - const uint32_t NUM_ETC2_EAC_A8_SELECTOR_RANGES = sizeof(s_etc2_eac_a8_selector_ranges) / sizeof(s_etc2_eac_a8_selector_ranges[0]); - - struct etc1_g_to_etc2_a8_conversion - { - uint8_t m_base; - uint8_t m_table_mul; // mul*16+table - uint16_t m_trans; // translates ETC1 selectors to ETC2_EAC_A8 - }; - +#endif // BASISD_WRITE_NEW_ETC2_EAC_A8_TABLES + static #if !BASISD_WRITE_NEW_ETC2_EAC_A8_TABLES const #endif - etc1_g_to_etc2_a8_conversion s_etc1_g_to_etc2_a8[32 * 8][NUM_ETC2_EAC_A8_SELECTOR_RANGES] = + etc1_g_to_eac_conversion s_etc1_g_to_etc2_a8[32 * 8][NUM_ETC2_EAC_SELECTOR_RANGES] = { { { 0,1,3328 },{ 0,1,3328 },{ 0,1,256 },{ 0,1,256 } }, { { 0,226,3936 },{ 0,226,3936 },{ 0,81,488 },{ 0,81,488 } }, @@ -1682,7 +1700,7 @@ namespace basist { { 168,40,4075 },{ 80,15,4080 },{ 168,40,491 },{ 80,15,496 } }, { { 144,8,4082 },{ 88,15,4080 },{ 144,8,498 },{ 88,15,496 } } }; -#endif +#endif // BASISD_SUPPORT_ETC2_EAC_A8 #if BASISD_WRITE_NEW_ETC2_EAC_A8_TABLES static void create_etc2_eac_a8_conversion_table() @@ -1698,10 +1716,10 @@ namespace basist fprintf(pFile, "{"); - for (uint32_t sel_range = 0; sel_range < NUM_ETC2_EAC_A8_SELECTOR_RANGES; sel_range++) + for (uint32_t sel_range = 0; sel_range < NUM_ETC2_EAC_SELECTOR_RANGES; sel_range++) { - const uint32_t low_selector = s_etc2_eac_a8_selector_ranges[sel_range].m_low; - const uint32_t high_selector = s_etc2_eac_a8_selector_ranges[sel_range].m_high; + const uint32_t low_selector = s_etc2_eac_selector_ranges[sel_range].m_low; + const uint32_t high_selector = s_etc2_eac_selector_ranges[sel_range].m_high; // We have a ETC1 base color and intensity, and a used selector range from low_selector-high_selector. // Now find the best ETC2 EAC A8 base/table/multiplier that fits these colors. @@ -1714,7 +1732,7 @@ namespace basist pack_eac_a8_results pack_results; pack_eac_a8_exhaustive(pack_results, pixels, num_pixels); - etc1_g_to_etc2_a8_conversion& c = s_etc1_g_to_etc2_a8[base + inten * 32][sel_range]; + etc1_g_to_eac_conversion& c = s_etc1_g_to_etc2_a8[base + inten * 32][sel_range]; c.m_base = pack_results.m_base; c.m_table_mul = pack_results.m_table * 16 + pack_results.m_multiplier; @@ -1731,7 +1749,7 @@ namespace basist } fprintf(pFile, "{%u,%u,%u}", c.m_base, c.m_table_mul, c.m_trans); - if (sel_range < (NUM_ETC2_EAC_A8_SELECTOR_RANGES - 1)) + if (sel_range < (NUM_ETC2_EAC_SELECTOR_RANGES - 1)) fprintf(pFile, ","); } @@ -1743,6 +1761,138 @@ namespace basist } #endif +#if BASISD_WRITE_NEW_ETC2_EAC_R11_TABLES + struct pack_eac_r11_results + { + uint32_t m_base; + uint32_t m_table; + uint32_t m_multiplier; + std::vector m_selectors; + std::vector m_selectors_temp; + }; + + static uint64_t pack_eac_r11_exhaustive(pack_eac_r11_results& results, const uint8_t* pPixels, uint32_t num_pixels) + { + results.m_selectors.resize(num_pixels); + results.m_selectors_temp.resize(num_pixels); + + uint64_t best_err = UINT64_MAX; + + for (uint32_t base_color = 0; base_color < 256; base_color++) + { + for (uint32_t multiplier = 0; multiplier < 16; multiplier++) + { + for (uint32_t table = 0; table < 16; table++) + { + uint64_t total_err = 0; + + for (uint32_t i = 0; i < num_pixels; i++) + { + // Convert 8-bit input to 11-bits + const int a = (pPixels[i] * 2047 + 128) / 255; + + uint32_t best_s_err = UINT32_MAX; + uint32_t best_s = 0; + for (uint32_t s = 0; s < 8; s++) + { + int v = (int)(multiplier ? (multiplier * 8) : 1) * g_eac_modifier_table[table][s] + (int)base_color * 8 + 4; + if (v < 0) + v = 0; + else if (v > 2047) + v = 2047; + + uint32_t err = abs(a - v); + if (err < best_s_err) + { + best_s_err = err; + best_s = s; + } + } + + results.m_selectors_temp[i] = static_cast(best_s); + + total_err += best_s_err * best_s_err; + if (total_err >= best_err) + break; + } + + if (total_err < best_err) + { + best_err = total_err; + results.m_base = base_color; + results.m_multiplier = multiplier; + results.m_table = table; + results.m_selectors.swap(results.m_selectors_temp); + } + + } // table + + } // multiplier + + } // base_color + + return best_err; + } + + static void create_etc2_eac_r11_conversion_table() + { + FILE* pFile = nullptr; + fopen_s(&pFile, "basisu_decoder_tables_etc2_eac_r11.inc", "w"); + + for (uint32_t inten = 0; inten < 8; inten++) + { + for (uint32_t base = 0; base < 32; base++) + { + color32 block_colors[4]; + decoder_etc_block::get_diff_subblock_colors(block_colors, decoder_etc_block::pack_color5(color32(base, base, base, 255), false), inten); + + fprintf(pFile, "{"); + + for (uint32_t sel_range = 0; sel_range < NUM_ETC2_EAC_SELECTOR_RANGES; sel_range++) + { + const uint32_t low_selector = s_etc2_eac_selector_ranges[sel_range].m_low; + const uint32_t high_selector = s_etc2_eac_selector_ranges[sel_range].m_high; + + // We have a ETC1 base color and intensity, and a used selector range from low_selector-high_selector. + // Now find the best ETC2 EAC R11 base/table/multiplier that fits these colors. + + uint8_t pixels[4]; + uint32_t num_pixels = 0; + for (uint32_t s = low_selector; s <= high_selector; s++) + pixels[num_pixels++] = block_colors[s].g; + + pack_eac_r11_results pack_results; + pack_eac_r11_exhaustive(pack_results, pixels, num_pixels); + + etc1_g_to_eac_conversion c; + + c.m_base = (uint8_t)pack_results.m_base; + c.m_table_mul = (uint8_t)(pack_results.m_table * 16 + pack_results.m_multiplier); + c.m_trans = 0; + + for (uint32_t s = 0; s < 4; s++) + { + if ((s < low_selector) || (s > high_selector)) + continue; + + uint32_t etc2_selector = pack_results.m_selectors[s - low_selector]; + + c.m_trans |= (etc2_selector << (s * 3)); + } + + fprintf(pFile, "{%u,%u,%u}", c.m_base, c.m_table_mul, c.m_trans); + if (sel_range < (NUM_ETC2_EAC_SELECTOR_RANGES - 1)) + fprintf(pFile, ","); + } + + fprintf(pFile, "},\n"); + } + } + + fclose(pFile); + } +#endif // BASISD_WRITE_NEW_ETC2_EAC_R11_TABLES + #if BASISD_WRITE_NEW_ASTC_TABLES static void create_etc1_to_astc_conversion_table_0_47(); static void create_etc1_to_astc_conversion_table_0_255(); @@ -1769,6 +1919,10 @@ namespace basist static void transcoder_init_atc(); #endif +#if BASISD_SUPPORT_PVRTC2 + static void transcoder_init_pvrtc2(); +#endif + // Library global initialization. Requires ~9 milliseconds when compiled and executed natively on a Core i7 2.2 GHz. // If this is too slow, these computed tables can easilky be moved to be compiled in. void basisu_transcoder_init() @@ -1814,6 +1968,11 @@ namespace basist exit(0); #endif +#if BASISD_WRITE_NEW_ETC2_EAC_R11_TABLES + create_etc2_eac_r11_conversion_table(); + exit(0); +#endif + #if BASISD_SUPPORT_DXT1 uint8_t bc1_expand5[32]; for (int i = 0; i < 32; i++) @@ -1881,7 +2040,11 @@ namespace basist #if BASISD_SUPPORT_ATC transcoder_init_atc(); -#endif +#endif + +#if BASISD_SUPPORT_PVRTC2 + transcoder_init_pvrtc2(); +#endif s_initialized = true; } @@ -2101,6 +2264,176 @@ namespace basist #endif #endif +#if BASISD_SUPPORT_FXT1 + struct fxt1_block + { + union + { + struct + { + uint64_t m_t00 : 2; + uint64_t m_t01 : 2; + uint64_t m_t02 : 2; + uint64_t m_t03 : 2; + uint64_t m_t04 : 2; + uint64_t m_t05 : 2; + uint64_t m_t06 : 2; + uint64_t m_t07 : 2; + uint64_t m_t08 : 2; + uint64_t m_t09 : 2; + uint64_t m_t10 : 2; + uint64_t m_t11 : 2; + uint64_t m_t12 : 2; + uint64_t m_t13 : 2; + uint64_t m_t14 : 2; + uint64_t m_t15 : 2; + uint64_t m_t16 : 2; + uint64_t m_t17 : 2; + uint64_t m_t18 : 2; + uint64_t m_t19 : 2; + uint64_t m_t20 : 2; + uint64_t m_t21 : 2; + uint64_t m_t22 : 2; + uint64_t m_t23 : 2; + uint64_t m_t24 : 2; + uint64_t m_t25 : 2; + uint64_t m_t26 : 2; + uint64_t m_t27 : 2; + uint64_t m_t28 : 2; + uint64_t m_t29 : 2; + uint64_t m_t30 : 2; + uint64_t m_t31 : 2; + } m_lo; + uint64_t m_lo_bits; + uint8_t m_sels[8]; + }; + union + { + struct + { +#ifdef BASISU_USE_ORIGINAL_3DFX_FXT1_ENCODING + uint64_t m_b1 : 5; + uint64_t m_g1 : 5; + uint64_t m_r1 : 5; + uint64_t m_b0 : 5; + uint64_t m_g0 : 5; + uint64_t m_r0 : 5; + uint64_t m_b3 : 5; + uint64_t m_g3 : 5; + uint64_t m_r3 : 5; + uint64_t m_b2 : 5; + uint64_t m_g2 : 5; + uint64_t m_r2 : 5; +#else + uint64_t m_b0 : 5; + uint64_t m_g0 : 5; + uint64_t m_r0 : 5; + uint64_t m_b1 : 5; + uint64_t m_g1 : 5; + uint64_t m_r1 : 5; + uint64_t m_b2 : 5; + uint64_t m_g2 : 5; + uint64_t m_r2 : 5; + uint64_t m_b3 : 5; + uint64_t m_g3 : 5; + uint64_t m_r3 : 5; +#endif + uint64_t m_alpha : 1; + uint64_t m_glsb : 2; + uint64_t m_mode : 1; + } m_hi; + uint64_t m_hi_bits; + }; + }; + + static uint8_t conv_dxt1_to_fxt1_sels(uint32_t sels) + { + static uint8_t s_conv_table[16] = { 0, 3, 1, 2, 12, 15, 13, 14, 4, 7, 5, 6, 8, 11, 9, 10 }; + return s_conv_table[sels & 15] | (s_conv_table[sels >> 4] << 4); + } + + static void convert_etc1s_to_fxt1(void *pDst, const endpoint *pEndpoints, const selector *pSelectors, uint32_t fxt1_subblock) + { + fxt1_block* pBlock = static_cast(pDst); + + // CC_MIXED is basically DXT1 with different encoding tricks. + // So transcode ETC1S to DXT1, then transcode that to FXT1 which is easy and nearly lossless. + // (It's not completely lossless because FXT1 rounds in its color lerps while DXT1 doesn't, but it should be good enough.) + dxt1_block blk; + convert_etc1s_to_dxt1(&blk, pEndpoints, pSelectors, false); + + const uint32_t l = blk.get_low_color(); + const uint32_t h = blk.get_high_color(); + + color32 color0((l >> 11) & 31, (l >> 5) & 63, l & 31, 255); + color32 color1((h >> 11) & 31, (h >> 5) & 63, h & 31, 255); + + uint32_t g0 = color0.g & 1; + uint32_t g1 = color1.g & 1; + + color0.g >>= 1; + color1.g >>= 1; + + blk.m_selectors[0] = conv_dxt1_to_fxt1_sels(blk.m_selectors[0]); + blk.m_selectors[1] = conv_dxt1_to_fxt1_sels(blk.m_selectors[1]); + blk.m_selectors[2] = conv_dxt1_to_fxt1_sels(blk.m_selectors[2]); + blk.m_selectors[3] = conv_dxt1_to_fxt1_sels(blk.m_selectors[3]); + + if ((blk.get_selector(0, 0) >> 1) != (g0 ^ g1)) + { + std::swap(color0, color1); + std::swap(g0, g1); + + blk.m_selectors[0] ^= 0xFF; + blk.m_selectors[1] ^= 0xFF; + blk.m_selectors[2] ^= 0xFF; + blk.m_selectors[3] ^= 0xFF; + } + + if (fxt1_subblock == 0) + { + pBlock->m_hi.m_mode = 1; + pBlock->m_hi.m_alpha = 0; + pBlock->m_hi.m_glsb = g1 | (g1 << 1); + pBlock->m_hi.m_r0 = color0.r; + pBlock->m_hi.m_g0 = color0.g; + pBlock->m_hi.m_b0 = color0.b; + pBlock->m_hi.m_r1 = color1.r; + pBlock->m_hi.m_g1 = color1.g; + pBlock->m_hi.m_b1 = color1.b; + pBlock->m_hi.m_r2 = color0.r; + pBlock->m_hi.m_g2 = color0.g; + pBlock->m_hi.m_b2 = color0.b; + pBlock->m_hi.m_r3 = color1.r; + pBlock->m_hi.m_g3 = color1.g; + pBlock->m_hi.m_b3 = color1.b; + pBlock->m_sels[0] = blk.m_selectors[0]; + pBlock->m_sels[1] = blk.m_selectors[1]; + pBlock->m_sels[2] = blk.m_selectors[2]; + pBlock->m_sels[3] = blk.m_selectors[3]; + + static const uint8_t s_border_dup[4] = { 0, 85, 170, 255 }; + pBlock->m_sels[4] = s_border_dup[blk.m_selectors[0] >> 6]; + pBlock->m_sels[5] = s_border_dup[blk.m_selectors[1] >> 6]; + pBlock->m_sels[6] = s_border_dup[blk.m_selectors[2] >> 6]; + pBlock->m_sels[7] = s_border_dup[blk.m_selectors[3] >> 6]; + } + else + { + pBlock->m_hi.m_glsb = (pBlock->m_hi.m_glsb & 1) | (g1 << 1); + pBlock->m_hi.m_r2 = color0.r; + pBlock->m_hi.m_g2 = color0.g; + pBlock->m_hi.m_b2 = color0.b; + pBlock->m_hi.m_r3 = color1.r; + pBlock->m_hi.m_g3 = color1.g; + pBlock->m_hi.m_b3 = color1.b; + pBlock->m_sels[4] = blk.m_selectors[0]; + pBlock->m_sels[5] = blk.m_selectors[1]; + pBlock->m_sels[6] = blk.m_selectors[2]; + pBlock->m_sels[7] = blk.m_selectors[3]; + } + } +#endif // BASISD_SUPPORT_FXT1 #if BASISD_SUPPORT_DXT5A static dxt_selector_range s_dxt5a_selector_ranges[] = { @@ -4361,7 +4694,7 @@ namespace basist #endif // BASISD_SUPPORT_BC7_MODE5 #if BASISD_SUPPORT_ETC2_EAC_A8 - static void convert_etc1s_to_etc2_eac_a8(eac_a8_block* pDst_block, const endpoint* pEndpoints, const selector* pSelector) + static void convert_etc1s_to_etc2_eac_a8(eac_block* pDst_block, const endpoint* pEndpoints, const selector* pSelector) { const uint32_t low_selector = pSelector->m_lo_selector; const uint32_t high_selector = pSelector->m_hi_selector; @@ -4388,13 +4721,13 @@ namespace basist } uint32_t selector_range_table = 0; - for (selector_range_table = 0; selector_range_table < NUM_ETC2_EAC_A8_SELECTOR_RANGES; selector_range_table++) - if ((low_selector == s_etc2_eac_a8_selector_ranges[selector_range_table].m_low) && (high_selector == s_etc2_eac_a8_selector_ranges[selector_range_table].m_high)) + for (selector_range_table = 0; selector_range_table < NUM_ETC2_EAC_SELECTOR_RANGES; selector_range_table++) + if ((low_selector == s_etc2_eac_selector_ranges[selector_range_table].m_low) && (high_selector == s_etc2_eac_selector_ranges[selector_range_table].m_high)) break; - if (selector_range_table >= NUM_ETC2_EAC_A8_SELECTOR_RANGES) + if (selector_range_table >= NUM_ETC2_EAC_SELECTOR_RANGES) selector_range_table = 0; - const etc1_g_to_etc2_a8_conversion* pTable_entry = &s_etc1_g_to_etc2_a8[base_color.r + inten_table * 32][selector_range_table]; + const etc1_g_to_eac_conversion* pTable_entry = &s_etc1_g_to_etc2_a8[base_color.r + inten_table * 32][selector_range_table]; pDst_block->m_base = pTable_entry->m_base; pDst_block->m_table = pTable_entry->m_table_mul >> 4; @@ -4419,6 +4752,325 @@ namespace basist } #endif // BASISD_SUPPORT_ETC2_EAC_A8 +#if BASISD_SUPPORT_ETC2_EAC_RG11 + static const etc1_g_to_eac_conversion s_etc1_g_to_etc2_r11[32 * 8][NUM_ETC2_EAC_SELECTOR_RANGES] = + { + {{0,1,3328},{0,1,3328},{0,16,457},{0,16,456}}, + {{0,226,3936},{0,226,3936},{0,17,424},{8,0,472}}, + {{6,178,4012},{6,178,4008},{0,146,501},{16,0,472}}, + {{14,178,4012},{14,178,4008},{8,146,501},{24,0,472}}, + {{23,178,4012},{23,178,4008},{17,146,501},{33,0,472}}, + {{31,178,4012},{31,178,4008},{25,146,501},{41,0,472}}, + {{39,178,4012},{39,178,4008},{33,146,501},{49,0,472}}, + {{47,178,4012},{47,178,4008},{41,146,501},{27,228,496}}, + {{56,178,4012},{56,178,4008},{50,146,501},{36,228,496}}, + {{64,178,4012},{64,178,4008},{58,146,501},{44,228,496}}, + {{72,178,4012},{72,178,4008},{66,146,501},{52,228,496}}, + {{80,178,4012},{80,178,4008},{74,146,501},{60,228,496}}, + {{89,178,4012},{89,178,4008},{83,146,501},{69,228,496}}, + {{97,178,4012},{97,178,4008},{91,146,501},{77,228,496}}, + {{105,178,4012},{105,178,4008},{99,146,501},{85,228,496}}, + {{113,178,4012},{113,178,4008},{107,146,501},{93,228,496}}, + {{122,178,4012},{122,178,4008},{116,146,501},{102,228,496}}, + {{130,178,4012},{130,178,4008},{124,146,501},{110,228,496}}, + {{138,178,4012},{138,178,4008},{132,146,501},{118,228,496}}, + {{146,178,4012},{146,178,4008},{140,146,501},{126,228,496}}, + {{155,178,4012},{155,178,4008},{149,146,501},{135,228,496}}, + {{163,178,4012},{163,178,4008},{157,146,501},{143,228,496}}, + {{171,178,4012},{171,178,4008},{165,146,501},{151,228,496}}, + {{179,178,4012},{179,178,4008},{173,146,501},{159,228,496}}, + {{188,178,4012},{188,178,4008},{182,146,501},{168,228,496}}, + {{196,178,4012},{196,178,4008},{190,146,501},{176,228,496}}, + {{204,178,4012},{204,178,4008},{198,146,501},{184,228,496}}, + {{212,178,4012},{212,178,4008},{206,146,501},{192,228,496}}, + {{221,178,4012},{221,178,4008},{215,146,501},{201,228,496}}, + {{229,178,4012},{229,178,4008},{223,146,501},{209,228,496}}, + {{235,66,4012},{221,100,4008},{231,146,501},{217,228,496}}, + {{211,102,4085},{254,32,4040},{211,102,501},{254,32,456}}, + {{0,2,3328},{0,2,3328},{0,1,320},{0,1,320}}, + {{7,162,3905},{7,162,3904},{0,17,480},{0,17,480}}, + {{15,162,3906},{15,162,3904},{1,117,352},{1,117,352}}, + {{23,162,3906},{23,162,3904},{5,34,500},{4,53,424}}, + {{32,162,3906},{32,162,3904},{14,34,500},{3,69,424}}, + {{40,162,3906},{40,162,3904},{22,34,500},{1,133,496}}, + {{48,162,3906},{48,162,3904},{30,34,500},{4,85,496}}, + {{56,162,3906},{56,162,3904},{38,34,500},{12,85,496}}, + {{65,162,3906},{65,162,3904},{47,34,500},{1,106,424}}, + {{73,162,3906},{73,162,3904},{55,34,500},{9,106,424}}, + {{81,162,3906},{81,162,3904},{63,34,500},{7,234,496}}, + {{89,162,3906},{89,162,3904},{71,34,500},{15,234,496}}, + {{98,162,3906},{98,162,3904},{80,34,500},{24,234,496}}, + {{106,162,3906},{106,162,3904},{88,34,500},{32,234,496}}, + {{114,162,3906},{114,162,3904},{96,34,500},{40,234,496}}, + {{122,162,3906},{122,162,3904},{104,34,500},{48,234,496}}, + {{131,162,3906},{131,162,3904},{113,34,500},{57,234,496}}, + {{139,162,3906},{139,162,3904},{121,34,500},{65,234,496}}, + {{147,162,3906},{147,162,3904},{129,34,500},{73,234,496}}, + {{155,162,3906},{155,162,3904},{137,34,500},{81,234,496}}, + {{164,162,3906},{164,162,3904},{146,34,500},{90,234,496}}, + {{172,162,3906},{172,162,3904},{154,34,500},{98,234,496}}, + {{180,162,3906},{180,162,3904},{162,34,500},{106,234,496}}, + {{188,162,3906},{188,162,3904},{170,34,500},{114,234,496}}, + {{197,162,3906},{197,162,3904},{179,34,500},{123,234,496}}, + {{205,162,3906},{205,162,3904},{187,34,500},{131,234,496}}, + {{213,162,3906},{213,162,3904},{195,34,500},{139,234,496}}, + {{221,162,3906},{221,162,3904},{203,34,500},{147,234,496}}, + {{230,162,3906},{230,162,3904},{212,34,500},{156,234,496}}, + {{238,162,3906},{174,106,4008},{220,34,500},{164,234,496}}, + {{240,178,4001},{182,106,4008},{228,34,500},{172,234,496}}, + {{166,108,4085},{115,31,4080},{166,108,501},{115,31,496}}, + {{1,68,3328},{1,68,3328},{0,1,384},{0,1,384}}, + {{1,51,3968},{1,51,3968},{0,2,384},{0,2,384}}, + {{21,18,3851},{21,18,3848},{1,50,488},{1,50,488}}, + {{26,195,3851},{29,18,3848},{0,67,488},{0,67,488}}, + {{35,195,3851},{38,18,3848},{12,115,488},{0,3,496}}, + {{43,195,3851},{46,18,3848},{20,115,488},{2,6,424}}, + {{51,195,3851},{54,18,3848},{36,66,482},{4,22,424}}, + {{59,195,3851},{62,18,3848},{44,66,482},{3,73,424}}, + {{68,195,3851},{71,18,3848},{53,66,482},{3,22,496}}, + {{76,195,3851},{79,18,3848},{61,66,482},{2,137,496}}, + {{84,195,3851},{87,18,3848},{69,66,482},{1,89,496}}, + {{92,195,3851},{95,18,3848},{77,66,482},{9,89,496}}, + {{101,195,3851},{104,18,3848},{86,66,482},{18,89,496}}, + {{109,195,3851},{112,18,3848},{94,66,482},{26,89,496}}, + {{117,195,3851},{120,18,3848},{102,66,482},{34,89,496}}, + {{125,195,3851},{128,18,3848},{110,66,482},{42,89,496}}, + {{134,195,3851},{137,18,3848},{119,66,482},{51,89,496}}, + {{141,195,3907},{145,18,3848},{127,66,482},{59,89,496}}, + {{149,195,3907},{153,18,3848},{135,66,482},{67,89,496}}, + {{157,195,3907},{161,18,3848},{143,66,482},{75,89,496}}, + {{166,195,3907},{170,18,3848},{152,66,482},{84,89,496}}, + {{174,195,3907},{178,18,3848},{160,66,482},{92,89,496}}, + {{182,195,3907},{186,18,3848},{168,66,482},{100,89,496}}, + {{190,195,3907},{194,18,3848},{176,66,482},{108,89,496}}, + {{199,195,3907},{203,18,3848},{185,66,482},{117,89,496}}, + {{207,195,3907},{211,18,3848},{193,66,482},{125,89,496}}, + {{215,195,3907},{219,18,3848},{201,66,482},{133,89,496}}, + {{223,195,3907},{227,18,3848},{209,66,482},{141,89,496}}, + {{232,195,3907},{168,89,4008},{218,66,482},{150,89,496}}, + {{236,18,3907},{176,89,4008},{226,66,482},{158,89,496}}, + {{158,90,4085},{103,31,4080},{158,90,501},{103,31,496}}, + {{166,90,4085},{111,31,4080},{166,90,501},{111,31,496}}, + {{0,70,3328},{0,70,3328},{0,17,448},{0,17,448}}, + {{0,117,3904},{0,117,3904},{0,35,384},{0,35,384}}, + {{13,165,3905},{13,165,3904},{2,211,480},{2,211,480}}, + {{21,165,3906},{21,165,3904},{1,51,488},{1,51,488}}, + {{30,165,3906},{30,165,3904},{7,61,352},{7,61,352}}, + {{38,165,3906},{38,165,3904},{2,125,352},{2,125,352}}, + {{46,165,3906},{46,165,3904},{1,37,500},{10,125,352}}, + {{54,165,3906},{54,165,3904},{9,37,500},{5,61,424}}, + {{63,165,3906},{63,165,3904},{18,37,500},{1,189,424}}, + {{71,165,3906},{71,165,3904},{26,37,500},{9,189,424}}, + {{79,165,3906},{79,165,3904},{34,37,500},{4,77,424}}, + {{87,165,3906},{87,165,3904},{42,37,500},{12,77,424}}, + {{96,165,3906},{96,165,3904},{51,37,500},{8,93,424}}, + {{104,165,3906},{104,165,3904},{59,37,500},{3,141,496}}, + {{112,165,3906},{112,165,3904},{68,37,500},{11,141,496}}, + {{120,165,3906},{120,165,3904},{76,37,500},{6,93,496}}, + {{129,165,3906},{129,165,3904},{85,37,500},{15,93,496}}, + {{70,254,4012},{137,165,3904},{93,37,500},{23,93,496}}, + {{145,165,3906},{145,165,3904},{101,37,500},{31,93,496}}, + {{86,254,4012},{153,165,3904},{109,37,500},{39,93,496}}, + {{163,165,3906},{162,165,3904},{118,37,500},{48,93,496}}, + {{171,165,3906},{170,165,3904},{126,37,500},{56,93,496}}, + {{179,165,3906},{178,165,3904},{134,37,500},{64,93,496}}, + {{187,165,3906},{187,165,3904},{142,37,500},{72,93,496}}, + {{196,165,3906},{196,165,3904},{151,37,500},{81,93,496}}, + {{204,165,3906},{204,165,3904},{159,37,500},{89,93,496}}, + {{212,165,3906},{136,77,4008},{167,37,500},{97,93,496}}, + {{220,165,3906},{131,93,4008},{175,37,500},{105,93,496}}, + {{214,181,4001},{140,93,4008},{184,37,500},{114,93,496}}, + {{222,181,4001},{148,93,4008},{192,37,500},{122,93,496}}, + {{115,95,4085},{99,31,4080},{115,95,501},{99,31,496}}, + {{123,95,4085},{107,31,4080},{123,95,501},{107,31,496}}, + {{0,102,3840},{0,102,3840},{0,18,384},{0,18,384}}, + {{5,167,3904},{5,167,3904},{0,13,256},{0,13,256}}, + {{4,54,3968},{4,54,3968},{1,67,448},{1,67,448}}, + {{30,198,3850},{30,198,3848},{0,3,480},{0,3,480}}, + {{39,198,3850},{39,198,3848},{3,52,488},{3,52,488}}, + {{47,198,3851},{47,198,3848},{3,4,488},{3,4,488}}, + {{55,198,3851},{55,198,3848},{1,70,488},{1,70,488}}, + {{53,167,3906},{63,198,3848},{3,22,488},{3,22,488}}, + {{62,167,3906},{72,198,3848},{24,118,488},{0,6,496}}, + {{70,167,3906},{80,198,3848},{32,118,488},{2,89,488}}, + {{78,167,3906},{88,198,3848},{40,118,488},{1,73,496}}, + {{86,167,3906},{96,198,3848},{48,118,488},{0,28,424}}, + {{95,167,3906},{105,198,3848},{57,118,488},{9,28,424}}, + {{103,167,3906},{113,198,3848},{65,118,488},{5,108,496}}, + {{111,167,3906},{121,198,3848},{73,118,488},{13,108,496}}, + {{119,167,3906},{129,198,3848},{81,118,488},{21,108,496}}, + {{128,167,3906},{138,198,3848},{90,118,488},{6,28,496}}, + {{136,167,3906},{146,198,3848},{98,118,488},{14,28,496}}, + {{145,167,3906},{154,198,3848},{106,118,488},{22,28,496}}, + {{153,167,3906},{162,198,3848},{114,118,488},{30,28,496}}, + {{162,167,3906},{171,198,3848},{123,118,488},{39,28,496}}, + {{170,167,3906},{179,198,3848},{131,118,488},{47,28,496}}, + {{178,167,3906},{187,198,3848},{139,118,488},{55,28,496}}, + {{186,167,3906},{195,198,3848},{147,118,488},{63,28,496}}, + {{194,167,3906},{120,12,4008},{156,118,488},{72,28,496}}, + {{206,198,3907},{116,28,4008},{164,118,488},{80,28,496}}, + {{214,198,3907},{124,28,4008},{172,118,488},{88,28,496}}, + {{222,198,3395},{132,28,4008},{180,118,488},{96,28,496}}, + {{207,134,4001},{141,28,4008},{189,118,488},{105,28,496}}, + {{95,30,4085},{86,31,4080},{95,30,501},{86,31,496}}, + {{103,30,4085},{94,31,4080},{103,30,501},{94,31,496}}, + {{111,30,4085},{102,31,4080},{111,30,501},{102,31,496}}, + {{0,104,3840},{0,104,3840},{0,18,448},{0,18,448}}, + {{4,39,3904},{4,39,3904},{0,4,384},{0,4,384}}, + {{0,56,3968},{0,56,3968},{0,84,448},{0,84,448}}, + {{6,110,3328},{6,110,3328},{0,20,448},{0,20,448}}, + {{41,200,3850},{41,200,3848},{1,4,480},{1,4,480}}, + {{49,200,3850},{49,200,3848},{1,8,416},{1,8,416}}, + {{57,200,3851},{57,200,3848},{1,38,488},{1,38,488}}, + {{65,200,3851},{65,200,3848},{1,120,488},{1,120,488}}, + {{74,200,3851},{74,200,3848},{2,72,488},{2,72,488}}, + {{68,6,3907},{82,200,3848},{2,24,488},{2,24,488}}, + {{77,6,3907},{90,200,3848},{26,120,488},{10,24,488}}, + {{97,63,3330},{98,200,3848},{34,120,488},{2,8,496}}, + {{106,63,3330},{107,200,3848},{43,120,488},{3,92,488}}, + {{114,63,3330},{115,200,3848},{51,120,488},{11,92,488}}, + {{122,63,3330},{123,200,3848},{59,120,488},{7,76,496}}, + {{130,63,3330},{131,200,3848},{67,120,488},{15,76,496}}, + {{139,63,3330},{140,200,3848},{76,120,488},{24,76,496}}, + {{147,63,3330},{148,200,3848},{84,120,488},{32,76,496}}, + {{155,63,3330},{156,200,3848},{92,120,488},{40,76,496}}, + {{164,63,3330},{164,200,3848},{100,120,488},{48,76,496}}, + {{173,63,3330},{173,200,3848},{109,120,488},{57,76,496}}, + {{184,6,3851},{181,200,3848},{117,120,488},{65,76,496}}, + {{192,6,3851},{133,28,3936},{125,120,488},{73,76,496}}, + {{189,200,3907},{141,28,3936},{133,120,488},{81,76,496}}, + {{198,200,3907},{138,108,4000},{142,120,488},{90,76,496}}, + {{206,200,3907},{146,108,4000},{150,120,488},{98,76,496}}, + {{214,200,3395},{154,108,4000},{158,120,488},{106,76,496}}, + {{190,136,4001},{162,108,4000},{166,120,488},{114,76,496}}, + {{123,30,4076},{87,15,4080},{123,30,492},{87,15,496}}, + {{117,110,4084},{80,31,4080},{117,110,500},{80,31,496}}, + {{125,110,4084},{88,31,4080},{125,110,500},{88,31,496}}, + {{133,110,4084},{96,31,4080},{133,110,500},{96,31,496}}, + {{9,56,3904},{9,56,3904},{0,67,448},{0,67,448}}, + {{1,8,3904},{1,8,3904},{1,84,448},{1,84,448}}, + {{1,124,3904},{1,124,3904},{0,39,384},{0,39,384}}, + {{9,124,3904},{9,124,3904},{1,4,448},{1,4,448}}, + {{6,76,3904},{6,76,3904},{0,70,448},{0,70,448}}, + {{62,6,3859},{62,6,3856},{2,38,480},{2,38,480}}, + {{70,6,3859},{70,6,3856},{5,43,416},{5,43,416}}, + {{78,6,3859},{78,6,3856},{2,11,416},{2,11,416}}, + {{87,6,3859},{87,6,3856},{0,171,488},{0,171,488}}, + {{67,8,3906},{95,6,3856},{8,171,488},{8,171,488}}, + {{75,8,3907},{103,6,3856},{5,123,488},{5,123,488}}, + {{83,8,3907},{111,6,3856},{2,75,488},{2,75,488}}, + {{92,8,3907},{120,6,3856},{0,27,488},{0,27,488}}, + {{100,8,3907},{128,6,3856},{8,27,488},{8,27,488}}, + {{120,106,3843},{136,6,3856},{99,6,387},{16,27,488}}, + {{128,106,3843},{144,6,3856},{107,6,387},{2,11,496}}, + {{137,106,3843},{153,6,3856},{117,6,387},{11,11,496}}, + {{145,106,3843},{161,6,3856},{125,6,387},{19,11,496}}, + {{163,8,3851},{137,43,3904},{133,6,387},{27,11,496}}, + {{171,8,3851},{145,43,3904},{141,6,387},{35,11,496}}, + {{180,8,3851},{110,11,4000},{150,6,387},{44,11,496}}, + {{188,8,3851},{118,11,4000},{158,6,387},{52,11,496}}, + {{172,72,3907},{126,11,4000},{166,6,387},{60,11,496}}, + {{174,6,3971},{134,11,4000},{174,6,387},{68,11,496}}, + {{183,6,3971},{143,11,4000},{183,6,387},{77,11,496}}, + {{191,6,3971},{151,11,4000},{191,6,387},{85,11,496}}, + {{199,6,3971},{159,11,4000},{199,6,387},{93,11,496}}, + {{92,12,4084},{69,15,4080},{92,12,500},{69,15,496}}, + {{101,12,4084},{78,15,4080},{101,12,500},{78,15,496}}, + {{110,12,4084},{86,15,4080},{110,12,500},{86,15,496}}, + {{118,12,4084},{79,31,4080},{118,12,500},{79,31,496}}, + {{126,12,4084},{87,31,4080},{126,12,500},{87,31,496}}, + {{71,8,3602},{71,8,3600},{2,21,384},{2,21,384}}, + {{79,8,3611},{79,8,3608},{0,69,448},{0,69,448}}, + {{87,8,3611},{87,8,3608},{0,23,384},{0,23,384}}, + {{95,8,3611},{95,8,3608},{1,5,448},{1,5,448}}, + {{104,8,3611},{104,8,3608},{0,88,448},{0,88,448}}, + {{112,8,3611},{112,8,3608},{0,72,448},{0,72,448}}, + {{120,8,3611},{121,8,3608},{36,21,458},{36,21,456}}, + {{133,47,3091},{129,8,3608},{44,21,458},{44,21,456}}, + {{142,47,3091},{138,8,3608},{53,21,459},{53,21,456}}, + {{98,12,3850},{98,12,3848},{61,21,459},{61,21,456}}, + {{106,12,3850},{106,12,3848},{10,92,480},{69,21,456}}, + {{114,12,3851},{114,12,3848},{18,92,480},{77,21,456}}, + {{123,12,3851},{123,12,3848},{3,44,488},{86,21,456}}, + {{95,12,3906},{95,12,3904},{11,44,488},{94,21,456}}, + {{103,12,3906},{103,12,3904},{19,44,488},{102,21,456}}, + {{111,12,3907},{111,12,3904},{27,44,489},{110,21,456}}, + {{120,12,3907},{120,12,3904},{36,44,489},{119,21,456}}, + {{128,12,3907},{128,12,3904},{44,44,489},{127,21,456}}, + {{136,12,3907},{136,12,3904},{52,44,489},{135,21,456}}, + {{144,12,3907},{144,12,3904},{60,44,490},{144,21,456}}, + {{153,12,3907},{153,12,3904},{69,44,490},{153,21,456}}, + {{161,12,3395},{149,188,3968},{77,44,490},{161,21,456}}, + {{169,12,3395},{199,21,3928},{85,44,490},{169,21,456}}, + {{113,95,4001},{202,69,3992},{125,8,483},{177,21,456}}, + {{122,95,4001},{201,21,3984},{134,8,483},{186,21,456}}, + {{143,8,4067},{209,21,3984},{142,8,483},{194,21,456}}, + {{151,8,4067},{47,15,4080},{151,8,483},{47,15,496}}, + {{159,8,4067},{55,15,4080},{159,8,483},{55,15,496}}, + {{168,8,4067},{64,15,4080},{168,8,483},{64,15,496}}, + {{160,40,4075},{72,15,4080},{160,40,491},{72,15,496}}, + {{168,40,4075},{80,15,4080},{168,40,491},{80,15,496}}, + {{144,8,4082},{88,15,4080},{144,8,498},{88,15,496}}, + }; + + static void convert_etc1s_to_etc2_eac_r11(eac_block* pDst_block, const endpoint* pEndpoints, const selector* pSelector) + { + const uint32_t low_selector = pSelector->m_lo_selector; + const uint32_t high_selector = pSelector->m_hi_selector; + + const color32& base_color = pEndpoints->m_color5; + const uint32_t inten_table = pEndpoints->m_inten5; + + if (low_selector == high_selector) + { + uint32_t r; + decoder_etc_block::get_block_color5_r(base_color, inten_table, low_selector, r); + + // Constant alpha block + // Select table 13, use selector 4 (0), set multiplier to 1 and base color r + pDst_block->m_base = r; + pDst_block->m_table = 13; + pDst_block->m_multiplier = 1; + + // selectors are all 4's + static const uint8_t s_etc2_eac_r11_sel4[6] = { 0x92, 0x49, 0x24, 0x92, 0x49, 0x24 }; + memcpy(pDst_block->m_selectors, s_etc2_eac_r11_sel4, sizeof(s_etc2_eac_r11_sel4)); + + return; + } + + uint32_t selector_range_table = 0; + for (selector_range_table = 0; selector_range_table < NUM_ETC2_EAC_SELECTOR_RANGES; selector_range_table++) + if ((low_selector == s_etc2_eac_selector_ranges[selector_range_table].m_low) && (high_selector == s_etc2_eac_selector_ranges[selector_range_table].m_high)) + break; + if (selector_range_table >= NUM_ETC2_EAC_SELECTOR_RANGES) + selector_range_table = 0; + + const etc1_g_to_eac_conversion* pTable_entry = &s_etc1_g_to_etc2_r11[base_color.r + inten_table * 32][selector_range_table]; + + pDst_block->m_base = pTable_entry->m_base; + pDst_block->m_table = pTable_entry->m_table_mul >> 4; + pDst_block->m_multiplier = pTable_entry->m_table_mul & 15; + + uint64_t selector_bits = 0; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t s = pSelector->get_selector(x, y); + + uint32_t ds = (pTable_entry->m_trans >> (s * 3)) & 7; + + const uint32_t dst_ofs = 45 - (y + x * 4) * 3; + selector_bits |= (static_cast(ds) << dst_ofs); + } + } + + pDst_block->set_selector_bits(selector_bits); + } +#endif // BASISD_SUPPORT_ETC2_EAC_RG11 + // ASTC struct etc1_to_astc_solution { @@ -5563,6 +6215,7 @@ namespace basist #endif #if BASISD_SUPPORT_ATC + // ATC and PVRTC2 both use these tables. struct etc1s_to_atc_solution { uint8_t m_lo; @@ -5600,6 +6253,16 @@ namespace basist }; const uint32_t ATC_IDENTITY_SELECTOR_MAPPING_INDEX = 6; +#if BASISD_SUPPORT_PVRTC2 + static const etc1s_to_atc_solution g_etc1s_to_pvrtc2_45[32 * 8 * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS * NUM_ETC1S_TO_ATC_SELECTOR_RANGES] = { +#include "basisu_transcoder_tables_pvrtc2_45.inc" + }; + + static const etc1s_to_atc_solution g_etc1s_to_pvrtc2_alpha_33[32 * 8 * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS * NUM_ETC1S_TO_ATC_SELECTOR_RANGES] = { +#include "basisu_transcoder_tables_pvrtc2_alpha_33.inc" + }; +#endif + static const etc1s_to_atc_solution g_etc1s_to_atc_55[32 * 8 * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS * NUM_ETC1S_TO_ATC_SELECTOR_RANGES] = { #include "basisu_transcoder_tables_atc_55.inc" }; @@ -5613,8 +6276,8 @@ namespace basist uint8_t m_lo; uint8_t m_hi; }; - static atc_match_entry g_atc_match55_equals_1[256], g_atc_match56_equals_1[256]; // selector 1 - static atc_match_entry g_atc_match5[256], g_atc_match6[256]; + static atc_match_entry g_pvrtc2_match45_equals_1[256], g_atc_match55_equals_1[256], g_atc_match56_equals_1[256]; // selector 1 + static atc_match_entry g_pvrtc2_match4[256], g_atc_match5[256], g_atc_match6[256]; static void prepare_atc_single_color_table(atc_match_entry* pTable, int size0, int size1, int sel) { @@ -5624,7 +6287,12 @@ namespace basist for (int lo = 0; lo < size0; lo++) { int lo_e = lo; - if (size0 == 32) + if (size0 == 16) + { + lo_e = (lo_e << 1) | (lo_e >> 3); + lo_e = (lo_e << 3) | (lo_e >> 2); + } + else if (size0 == 32) lo_e = (lo_e << 3) | (lo_e >> 2); else lo_e = (lo_e << 2) | (lo_e >> 4); @@ -5632,7 +6300,13 @@ namespace basist for (int hi = 0; hi < size1; hi++) { int hi_e = hi; - if (size1 == 32) + if (size1 == 16) + { + // This is only for PVRTC2 - expand to 5 then 8 + hi_e = (hi_e << 1) | (hi_e >> 3); + hi_e = (hi_e << 3) | (hi_e >> 2); + } + else if (size1 == 32) hi_e = (hi_e << 3) | (hi_e >> 2); else hi_e = (hi_e << 2) | (hi_e >> 4); @@ -5667,9 +6341,11 @@ namespace basist static void transcoder_init_atc() { - prepare_atc_single_color_table(g_atc_match55_equals_1, 32, 32, 1); - prepare_atc_single_color_table(g_atc_match56_equals_1, 32, 64, 1); + prepare_atc_single_color_table(g_pvrtc2_match45_equals_1, 16, 32, 1); + prepare_atc_single_color_table(g_atc_match55_equals_1, 32, 32, 1); + prepare_atc_single_color_table(g_atc_match56_equals_1, 32, 64, 1); + prepare_atc_single_color_table(g_pvrtc2_match4, 1, 16, 3); prepare_atc_single_color_table(g_atc_match5, 1, 32, 3); prepare_atc_single_color_table(g_atc_match6, 1, 64, 3); @@ -5813,6 +6489,7 @@ namespace basist #if BASISD_WRITE_NEW_ATC_TABLES static void create_etc1s_to_atc_conversion_tables() { + // ATC 55 FILE* pFile = nullptr; fopen_s(&pFile, "basisu_transcoder_tables_atc_55.inc", "w"); @@ -5887,6 +6564,7 @@ namespace basist fclose(pFile); pFile = nullptr; + // ATC 56 fopen_s(&pFile, "basisu_transcoder_tables_atc_56.inc", "w"); n = 0; @@ -5958,11 +6636,1140 @@ namespace basist } // inten fclose(pFile); + + // PVRTC2 45 + fopen_s(&pFile, "basisu_transcoder_tables_pvrtc2_45.inc", "w"); + + n = 0; + + for (int inten = 0; inten < 8; inten++) + { + for (uint32_t g = 0; g < 32; g++) + { + color32 block_colors[4]; + decoder_etc_block::get_diff_subblock_colors(block_colors, decoder_etc_block::pack_color5(color32(g, g, g, 255), false), inten); + + for (uint32_t sr = 0; sr < NUM_ETC1S_TO_ATC_SELECTOR_RANGES; sr++) + { + const uint32_t low_selector = g_etc1s_to_atc_selector_ranges[sr].m_low; + const uint32_t high_selector = g_etc1s_to_atc_selector_ranges[sr].m_high; + + for (uint32_t m = 0; m < NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS; m++) + { + uint32_t best_lo = 0; + uint32_t best_hi = 0; + uint64_t best_err = UINT64_MAX; + + for (uint32_t hi = 0; hi <= 31; hi++) + { + for (uint32_t lo = 0; lo <= 15; lo++) + { + uint32_t colors[4]; + + colors[0] = (lo << 1) | (lo >> 3); + colors[0] = (colors[0] << 3) | (colors[0] >> 2); + + colors[3] = (hi << 3) | (hi >> 2); + + colors[1] = (colors[0] * 5 + colors[3] * 3) / 8; + colors[2] = (colors[3] * 5 + colors[0] * 3) / 8; + + uint64_t total_err = 0; + + for (uint32_t s = low_selector; s <= high_selector; s++) + { + int err = block_colors[s].g - colors[g_etc1s_to_atc_selector_mappings[m][s]]; + + int err_scale = 1; + // Special case when the intensity table is 7, low_selector is 0, and high_selector is 3. In this extreme case, it's likely the encoder is trying to strongly favor + // the low/high selectors which are clamping to either 0 or 255. + if (((inten == 7) && (low_selector == 0) && (high_selector == 3)) && ((s == 0) || (s == 3))) + err_scale = 5; + + total_err += (err * err) * err_scale; + } + + if (total_err < best_err) + { + best_err = total_err; + best_lo = lo; + best_hi = hi; + } + } + } + + //assert(best_err <= 0xFFFF); + best_err = basisu::minimum(best_err, 0xFFFF); + + fprintf(pFile, "{%u,%u,%u},", best_lo, best_hi, (uint32_t)best_err); + n++; + if ((n & 31) == 31) + fprintf(pFile, "\n"); + } // m + } // sr + } // g + } // inten + + fclose(pFile); + +#if 0 + // PVRTC2 34 + fopen_s(&pFile, "basisu_transcoder_tables_pvrtc2_34.inc", "w"); + + n = 0; + + for (int inten = 0; inten < 8; inten++) + { + for (uint32_t g = 0; g < 32; g++) + { + color32 block_colors[4]; + decoder_etc_block::get_diff_subblock_colors(block_colors, decoder_etc_block::pack_color5(color32(g, g, g, 255), false), inten); + + for (uint32_t sr = 0; sr < NUM_ETC1S_TO_ATC_SELECTOR_RANGES; sr++) + { + const uint32_t low_selector = g_etc1s_to_atc_selector_ranges[sr].m_low; + const uint32_t high_selector = g_etc1s_to_atc_selector_ranges[sr].m_high; + + for (uint32_t m = 0; m < NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS; m++) + { + uint32_t best_lo = 0; + uint32_t best_hi = 0; + uint64_t best_err = UINT64_MAX; + + for (uint32_t hi = 0; hi <= 15; hi++) + { + for (uint32_t lo = 0; lo <= 7; lo++) + { + uint32_t colors[4]; + + colors[0] = (lo << 2) | (lo >> 1); + colors[0] = (colors[0] << 3) | (colors[0] >> 2); + + colors[3] = (hi << 1) | (hi >> 3); + colors[3] = (colors[3] << 3) | (colors[3] >> 2); + + colors[1] = (colors[0] * 5 + colors[3] * 3) / 8; + colors[2] = (colors[3] * 5 + colors[0] * 3) / 8; + + uint64_t total_err = 0; + + for (uint32_t s = low_selector; s <= high_selector; s++) + { + int err = block_colors[s].g - colors[g_etc1s_to_atc_selector_mappings[m][s]]; + + int err_scale = 1; + // Special case when the intensity table is 7, low_selector is 0, and high_selector is 3. In this extreme case, it's likely the encoder is trying to strongly favor + // the low/high selectors which are clamping to either 0 or 255. + if (((inten == 7) && (low_selector == 0) && (high_selector == 3)) && ((s == 0) || (s == 3))) + err_scale = 5; + + total_err += (err * err) * err_scale; + } + + if (total_err < best_err) + { + best_err = total_err; + best_lo = lo; + best_hi = hi; + } + } + } + + //assert(best_err <= 0xFFFF); + best_err = basisu::minimum(best_err, 0xFFFF); + + fprintf(pFile, "{%u,%u,%u},", best_lo, best_hi, (uint32_t)best_err); + n++; + if ((n & 31) == 31) + fprintf(pFile, "\n"); + } // m + } // sr + } // g + } // inten + + fclose(pFile); +#endif +#if 0 + // PVRTC2 44 + fopen_s(&pFile, "basisu_transcoder_tables_pvrtc2_44.inc", "w"); + + n = 0; + + for (int inten = 0; inten < 8; inten++) + { + for (uint32_t g = 0; g < 32; g++) + { + color32 block_colors[4]; + decoder_etc_block::get_diff_subblock_colors(block_colors, decoder_etc_block::pack_color5(color32(g, g, g, 255), false), inten); + + for (uint32_t sr = 0; sr < NUM_ETC1S_TO_ATC_SELECTOR_RANGES; sr++) + { + const uint32_t low_selector = g_etc1s_to_atc_selector_ranges[sr].m_low; + const uint32_t high_selector = g_etc1s_to_atc_selector_ranges[sr].m_high; + + for (uint32_t m = 0; m < NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS; m++) + { + uint32_t best_lo = 0; + uint32_t best_hi = 0; + uint64_t best_err = UINT64_MAX; + + for (uint32_t hi = 0; hi <= 15; hi++) + { + for (uint32_t lo = 0; lo <= 15; lo++) + { + uint32_t colors[4]; + + colors[0] = (lo << 1) | (lo >> 3); + colors[0] = (colors[0] << 3) | (colors[0] >> 2); + + colors[3] = (hi << 1) | (hi >> 3); + colors[3] = (colors[3] << 3) | (colors[3] >> 2); + + colors[1] = (colors[0] * 5 + colors[3] * 3) / 8; + colors[2] = (colors[3] * 5 + colors[0] * 3) / 8; + + uint64_t total_err = 0; + + for (uint32_t s = low_selector; s <= high_selector; s++) + { + int err = block_colors[s].g - colors[g_etc1s_to_atc_selector_mappings[m][s]]; + + int err_scale = 1; + // Special case when the intensity table is 7, low_selector is 0, and high_selector is 3. In this extreme case, it's likely the encoder is trying to strongly favor + // the low/high selectors which are clamping to either 0 or 255. + if (((inten == 7) && (low_selector == 0) && (high_selector == 3)) && ((s == 0) || (s == 3))) + err_scale = 5; + + total_err += (err * err) * err_scale; + } + + if (total_err < best_err) + { + best_err = total_err; + best_lo = lo; + best_hi = hi; + } + } + } + + //assert(best_err <= 0xFFFF); + best_err = basisu::minimum(best_err, 0xFFFF); + + fprintf(pFile, "{%u,%u,%u},", best_lo, best_hi, (uint32_t)best_err); + n++; + if ((n & 31) == 31) + fprintf(pFile, "\n"); + } // m + } // sr + } // g + } // inten + + fclose(pFile); +#endif + + // PVRTC2 alpha 33 + fopen_s(&pFile, "basisu_transcoder_tables_pvrtc2_alpha_33.inc", "w"); + + n = 0; + + for (int inten = 0; inten < 8; inten++) + { + for (uint32_t g = 0; g < 32; g++) + { + color32 block_colors[4]; + decoder_etc_block::get_diff_subblock_colors(block_colors, decoder_etc_block::pack_color5(color32(g, g, g, 255), false), inten); + + for (uint32_t sr = 0; sr < NUM_ETC1S_TO_ATC_SELECTOR_RANGES; sr++) + { + const uint32_t low_selector = g_etc1s_to_atc_selector_ranges[sr].m_low; + const uint32_t high_selector = g_etc1s_to_atc_selector_ranges[sr].m_high; + + for (uint32_t m = 0; m < NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS; m++) + { + uint32_t best_lo = 0; + uint32_t best_hi = 0; + uint64_t best_err = UINT64_MAX; + + for (uint32_t hi = 0; hi <= 7; hi++) + { + for (uint32_t lo = 0; lo <= 7; lo++) + { + uint32_t colors[4]; + + colors[0] = (lo << 1); + colors[0] = (colors[0] << 4) | colors[0]; + + colors[3] = (hi << 1) | 1; + colors[3] = (colors[3] << 4) | colors[3]; + + colors[1] = (colors[0] * 5 + colors[3] * 3) / 8; + colors[2] = (colors[3] * 5 + colors[0] * 3) / 8; + + uint64_t total_err = 0; + + for (uint32_t s = low_selector; s <= high_selector; s++) + { + int err = block_colors[s].g - colors[g_etc1s_to_atc_selector_mappings[m][s]]; + + int err_scale = 1; + // Special case when the intensity table is 7, low_selector is 0, and high_selector is 3. In this extreme case, it's likely the encoder is trying to strongly favor + // the low/high selectors which are clamping to either 0 or 255. + if (((inten == 7) && (low_selector == 0) && (high_selector == 3)) && ((s == 0) || (s == 3))) + err_scale = 5; + + total_err += (err * err) * err_scale; + } + + if (total_err < best_err) + { + best_err = total_err; + best_lo = lo; + best_hi = hi; + } + } + } + + //assert(best_err <= 0xFFFF); + best_err = basisu::minimum(best_err, 0xFFFF); + + fprintf(pFile, "{%u,%u,%u},", best_lo, best_hi, (uint32_t)best_err); + n++; + if ((n & 31) == 31) + fprintf(pFile, "\n"); + } // m + } // sr + } // g + } // inten + + fclose(pFile); } #endif // BASISD_WRITE_NEW_ATC_TABLES #endif // BASISD_SUPPORT_ATC +#if BASISD_SUPPORT_PVRTC2 + struct pvrtc2_block + { + uint8_t m_modulation[4]; + + union + { + union + { + // Opaque mode: RGB colora=554 and colorb=555 + struct + { + uint32_t m_mod_flag : 1; + uint32_t m_blue_a : 4; + uint32_t m_green_a : 5; + uint32_t m_red_a : 5; + uint32_t m_hard_flag : 1; + uint32_t m_blue_b : 5; + uint32_t m_green_b : 5; + uint32_t m_red_b : 5; + uint32_t m_opaque_flag : 1; + + } m_opaque_color_data; + + // Transparent mode: RGBA colora=4433 and colorb=4443 + struct + { + uint32_t m_mod_flag : 1; + uint32_t m_blue_a : 3; + uint32_t m_green_a : 4; + uint32_t m_red_a : 4; + uint32_t m_alpha_a : 3; + uint32_t m_hard_flag : 1; + uint32_t m_blue_b : 4; + uint32_t m_green_b : 4; + uint32_t m_red_b : 4; + uint32_t m_alpha_b : 3; + uint32_t m_opaque_flag : 1; + + } m_trans_color_data; + }; + + uint32_t m_color_data_bits; + }; + + // 554 + void set_low_color(uint32_t r, uint32_t g, uint32_t b) + { + assert((r < 32) && (g < 32) && (b < 16)); + m_opaque_color_data.m_red_a = r; + m_opaque_color_data.m_green_a = g; + m_opaque_color_data.m_blue_a = b; + } + + // 555 + void set_high_color(uint32_t r, uint32_t g, uint32_t b) + { + assert((r < 32) && (g < 32) && (b < 32)); + m_opaque_color_data.m_red_b = r; + m_opaque_color_data.m_green_b = g; + m_opaque_color_data.m_blue_b = b; + } + + // 4433 + void set_trans_low_color(uint32_t r, uint32_t g, uint32_t b, uint32_t a) + { + assert((r < 16) && (g < 16) && (b < 8) && (a < 8)); + m_trans_color_data.m_red_a = r; + m_trans_color_data.m_green_a = g; + m_trans_color_data.m_blue_a = b; + m_trans_color_data.m_alpha_a = a; + } + + // 4443 + void set_trans_high_color(uint32_t r, uint32_t g, uint32_t b, uint32_t a) + { + assert((r < 16) && (g < 16) && (b < 16) && (a < 8)); + m_trans_color_data.m_red_b = r; + m_trans_color_data.m_green_b = g; + m_trans_color_data.m_blue_b = b; + m_trans_color_data.m_alpha_b = a; + } + }; + + static struct + { + uint8_t m_l, m_h; + } g_pvrtc2_trans_match34[256]; + + static struct + { + uint8_t m_l, m_h; + } g_pvrtc2_trans_match44[256]; + + static struct + { + uint8_t m_l, m_h; + } g_pvrtc2_alpha_match33[256]; + + static struct + { + uint8_t m_l, m_h; + } g_pvrtc2_alpha_match33_0[256]; + + static struct + { + uint8_t m_l, m_h; + } g_pvrtc2_alpha_match33_3[256]; + + // PVRTC2 can be forced to look like a slightly weaker variant of ATC/BC1, so that's what we do here for simplicity. + static void convert_etc1s_to_pvrtc2_rgb(void* pDst, const endpoint* pEndpoints, const selector* pSelector) + { + pvrtc2_block* pBlock = static_cast(pDst); + + pBlock->m_opaque_color_data.m_hard_flag = 1; + pBlock->m_opaque_color_data.m_mod_flag = 0; + pBlock->m_opaque_color_data.m_opaque_flag = 1; + + const uint32_t low_selector = pSelector->m_lo_selector; + const uint32_t high_selector = pSelector->m_hi_selector; + + const color32& base_color = pEndpoints->m_color5; + const uint32_t inten_table = pEndpoints->m_inten5; + + if (low_selector == high_selector) + { + uint32_t r, g, b; + decoder_etc_block::get_block_color5(base_color, inten_table, low_selector, r, g, b); + + pBlock->set_low_color(g_atc_match55_equals_1[r].m_lo, g_atc_match55_equals_1[g].m_lo, g_pvrtc2_match45_equals_1[b].m_lo); + pBlock->set_high_color(g_atc_match55_equals_1[r].m_hi, g_atc_match55_equals_1[g].m_hi, g_pvrtc2_match45_equals_1[b].m_hi); + + pBlock->m_modulation[0] = 0x55; + pBlock->m_modulation[1] = 0x55; + pBlock->m_modulation[2] = 0x55; + pBlock->m_modulation[3] = 0x55; + + return; + } + else if ((inten_table >= 7) && (pSelector->m_num_unique_selectors == 2) && (pSelector->m_lo_selector == 0) && (pSelector->m_hi_selector == 3)) + { + color32 block_colors[4]; + decoder_etc_block::get_block_colors5(block_colors, base_color, inten_table); + + const uint32_t r0 = block_colors[0].r; + const uint32_t g0 = block_colors[0].g; + const uint32_t b0 = block_colors[0].b; + + const uint32_t r1 = block_colors[3].r; + const uint32_t g1 = block_colors[3].g; + const uint32_t b1 = block_colors[3].b; + + pBlock->set_low_color(g_atc_match5[r0].m_hi, g_atc_match5[g0].m_hi, g_pvrtc2_match4[b0].m_hi); + pBlock->set_high_color(g_atc_match5[r1].m_hi, g_atc_match5[g1].m_hi, g_atc_match5[b1].m_hi); + + pBlock->m_modulation[0] = pSelector->m_selectors[0]; + pBlock->m_modulation[1] = pSelector->m_selectors[1]; + pBlock->m_modulation[2] = pSelector->m_selectors[2]; + pBlock->m_modulation[3] = pSelector->m_selectors[3]; + + return; + } + + const uint32_t selector_range_table = g_etc1s_to_atc_selector_range_index[low_selector][high_selector]; + + //[32][8][RANGES][MAPPING] + const etc1s_to_atc_solution* pTable_r = &g_etc1s_to_atc_55[(inten_table * 32 + base_color.r) * (NUM_ETC1S_TO_ATC_SELECTOR_RANGES * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS) + selector_range_table * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS]; + const etc1s_to_atc_solution* pTable_g = &g_etc1s_to_atc_55[(inten_table * 32 + base_color.g) * (NUM_ETC1S_TO_ATC_SELECTOR_RANGES * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS) + selector_range_table * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS]; + const etc1s_to_atc_solution* pTable_b = &g_etc1s_to_pvrtc2_45[(inten_table * 32 + base_color.b) * (NUM_ETC1S_TO_ATC_SELECTOR_RANGES * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS) + selector_range_table * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS]; + + uint32_t best_err = UINT_MAX; + uint32_t best_mapping = 0; + + assert(NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS == 10); +#define DO_ITER(m) { uint32_t total_err = pTable_r[m].m_err + pTable_g[m].m_err + pTable_b[m].m_err; if (total_err < best_err) { best_err = total_err; best_mapping = m; } } + DO_ITER(0); DO_ITER(1); DO_ITER(2); DO_ITER(3); DO_ITER(4); + DO_ITER(5); DO_ITER(6); DO_ITER(7); DO_ITER(8); DO_ITER(9); +#undef DO_ITER + + pBlock->set_low_color(pTable_r[best_mapping].m_lo, pTable_g[best_mapping].m_lo, pTable_b[best_mapping].m_lo); + pBlock->set_high_color(pTable_r[best_mapping].m_hi, pTable_g[best_mapping].m_hi, pTable_b[best_mapping].m_hi); + + if (ATC_IDENTITY_SELECTOR_MAPPING_INDEX == best_mapping) + { + pBlock->m_modulation[0] = pSelector->m_selectors[0]; + pBlock->m_modulation[1] = pSelector->m_selectors[1]; + pBlock->m_modulation[2] = pSelector->m_selectors[2]; + pBlock->m_modulation[3] = pSelector->m_selectors[3]; + } + else + { + // TODO: We could make this faster using several precomputed 256 entry tables, like ETC1S->BC1 does. + const uint8_t* pSelectors_xlat = &g_etc1s_to_atc_selector_mappings[best_mapping][0]; + + const uint32_t sel_bits0 = pSelector->m_selectors[0]; + const uint32_t sel_bits1 = pSelector->m_selectors[1]; + const uint32_t sel_bits2 = pSelector->m_selectors[2]; + const uint32_t sel_bits3 = pSelector->m_selectors[3]; + + uint32_t sels0 = 0, sels1 = 0, sels2 = 0, sels3 = 0; + +#define DO_X(x) { \ + const uint32_t x_shift = (x) * 2; \ + sels0 |= (pSelectors_xlat[(sel_bits0 >> x_shift) & 3] << x_shift); \ + sels1 |= (pSelectors_xlat[(sel_bits1 >> x_shift) & 3] << x_shift); \ + sels2 |= (pSelectors_xlat[(sel_bits2 >> x_shift) & 3] << x_shift); \ + sels3 |= (pSelectors_xlat[(sel_bits3 >> x_shift) & 3] << x_shift); } + + DO_X(0); + DO_X(1); + DO_X(2); + DO_X(3); +#undef DO_X + + pBlock->m_modulation[0] = (uint8_t)sels0; + pBlock->m_modulation[1] = (uint8_t)sels1; + pBlock->m_modulation[2] = (uint8_t)sels2; + pBlock->m_modulation[3] = (uint8_t)sels3; + } + } + + typedef struct { float c[4]; } vec4F; + + static inline int32_t clampi(int32_t value, int32_t low, int32_t high) { if (value < low) value = low; else if (value > high) value = high; return value; } + static inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } + static inline float saturate(float value) { return clampf(value, 0, 1.0f); } + static inline vec4F* vec4F_set_scalar(vec4F* pV, float x) { pV->c[0] = x; pV->c[1] = x; pV->c[2] = x; pV->c[3] = x; return pV; } + static inline vec4F* vec4F_set(vec4F* pV, float x, float y, float z, float w) { pV->c[0] = x; pV->c[1] = y; pV->c[2] = z; pV->c[3] = w; return pV; } + static inline vec4F* vec4F_saturate_in_place(vec4F* pV) { pV->c[0] = saturate(pV->c[0]); pV->c[1] = saturate(pV->c[1]); pV->c[2] = saturate(pV->c[2]); pV->c[3] = saturate(pV->c[3]); return pV; } + static inline vec4F vec4F_saturate(const vec4F* pV) { vec4F res; res.c[0] = saturate(pV->c[0]); res.c[1] = saturate(pV->c[1]); res.c[2] = saturate(pV->c[2]); res.c[3] = saturate(pV->c[3]); return res; } + static inline vec4F vec4F_from_color(const color32* pC) { vec4F res; vec4F_set(&res, pC->c[0], pC->c[1], pC->c[2], pC->c[3]); return res; } + static inline vec4F vec4F_add(const vec4F* pLHS, const vec4F* pRHS) { vec4F res; vec4F_set(&res, pLHS->c[0] + pRHS->c[0], pLHS->c[1] + pRHS->c[1], pLHS->c[2] + pRHS->c[2], pLHS->c[3] + pRHS->c[3]); return res; } + static inline vec4F vec4F_sub(const vec4F* pLHS, const vec4F* pRHS) { vec4F res; vec4F_set(&res, pLHS->c[0] - pRHS->c[0], pLHS->c[1] - pRHS->c[1], pLHS->c[2] - pRHS->c[2], pLHS->c[3] - pRHS->c[3]); return res; } + static inline float vec4F_dot(const vec4F* pLHS, const vec4F* pRHS) { return pLHS->c[0] * pRHS->c[0] + pLHS->c[1] * pRHS->c[1] + pLHS->c[2] * pRHS->c[2] + pLHS->c[3] * pRHS->c[3]; } + static inline vec4F vec4F_mul(const vec4F* pLHS, float s) { vec4F res; vec4F_set(&res, pLHS->c[0] * s, pLHS->c[1] * s, pLHS->c[2] * s, pLHS->c[3] * s); return res; } + static inline vec4F* vec4F_normalize_in_place(vec4F* pV) { float s = pV->c[0] * pV->c[0] + pV->c[1] * pV->c[1] + pV->c[2] * pV->c[2] + pV->c[3] * pV->c[3]; if (s != 0.0f) { s = 1.0f / sqrtf(s); pV->c[0] *= s; pV->c[1] *= s; pV->c[2] *= s; pV->c[3] *= s; } return pV; } + + static color32 convert_rgba_5554_to_8888(const color32& col) + { + return color32((col[0] << 3) | (col[0] >> 2), (col[1] << 3) | (col[1] >> 2), (col[2] << 3) | (col[2] >> 2), (col[3] << 4) | col[3]); + } + + static inline int sq(int x) { return x * x; } + + // PVRTC2 is a slightly borked format for alpha: In Non-Interpolated mode, the way AlphaB8 is exanded from 4 to 8 bits means it can never be 0. + // This is actually very bad, because on 100% transparent blocks which have non-trivial color pixels, part of the color channel will leak into alpha! + // And there's nothing straightforward we can do because using the other modes is too expensive/complex. I can see why Apple didn't adopt it. + static void convert_etc1s_to_pvrtc2_rgba(void* pDst, const endpoint* pEndpoints, const selector* pSelector, const endpoint* pEndpoint_codebook, const selector* pSelector_codebook) + { + pvrtc2_block* pBlock = static_cast(pDst); + + const endpoint& alpha_endpoint = pEndpoint_codebook[((uint16_t*)pBlock)[0]]; + const selector& alpha_selectors = pSelector_codebook[((uint16_t*)pBlock)[1]]; + + pBlock->m_opaque_color_data.m_hard_flag = 1; + pBlock->m_opaque_color_data.m_mod_flag = 0; + pBlock->m_opaque_color_data.m_opaque_flag = 0; + + const int num_unique_alpha_selectors = alpha_selectors.m_num_unique_selectors; + + const color32& alpha_base_color = alpha_endpoint.m_color5; + const uint32_t alpha_inten_table = alpha_endpoint.m_inten5; + + int constant_alpha_val = -1; + + int alpha_block_colors[4]; + decoder_etc_block::get_block_colors5_g(alpha_block_colors, alpha_base_color, alpha_inten_table); + + if (num_unique_alpha_selectors == 1) + { + constant_alpha_val = alpha_block_colors[alpha_selectors.m_lo_selector]; + } + else + { + constant_alpha_val = alpha_block_colors[alpha_selectors.m_lo_selector]; + + for (uint32_t i = alpha_selectors.m_lo_selector + 1; i <= alpha_selectors.m_hi_selector; i++) + { + if (constant_alpha_val != alpha_block_colors[i]) + { + constant_alpha_val = -1; + break; + } + } + } + + if (constant_alpha_val >= 250) + { + // It's opaque enough, so don't bother trying to encode it as an alpha block. + convert_etc1s_to_pvrtc2_rgb(pDst, pEndpoints, pSelector); + return; + } + + const color32& base_color = pEndpoints->m_color5; + const uint32_t inten_table = pEndpoints->m_inten5; + + const uint32_t low_selector = pSelector->m_lo_selector; + const uint32_t high_selector = pSelector->m_hi_selector; + + const int num_unique_color_selectors = pSelector->m_num_unique_selectors; + + // We need to reencode the block at the pixel level, unfortunately, from two ETC1S planes. + // Do 4D incremental PCA, project all pixels to this hyperline, then quantize to packed endpoints and compute the modulation values. + const int br = (base_color.r << 3) | (base_color.r >> 2); + const int bg = (base_color.g << 3) | (base_color.g >> 2); + const int bb = (base_color.b << 3) | (base_color.b >> 2); + + color32 block_cols[4]; + for (uint32_t i = 0; i < 4; i++) + { + const int ci = g_etc1_inten_tables[inten_table][i]; + block_cols[i].set_clamped(br + ci, bg + ci, bb + ci, alpha_block_colors[i]); + } + + bool solid_color_block = true; + if (num_unique_color_selectors > 1) + { + for (uint32_t i = low_selector + 1; i <= high_selector; i++) + { + if ((block_cols[low_selector].r != block_cols[i].r) || (block_cols[low_selector].g != block_cols[i].g) || (block_cols[low_selector].b != block_cols[i].b)) + { + solid_color_block = false; + break; + } + } + } + + if ((solid_color_block) && (constant_alpha_val >= 0)) + { + // Constant color/alpha block. + // This is more complex than it may seem because of the way color and alpha are packed in PVRTC2. We need to evaluate mod0, mod1 and mod3 encodings to find the best one. + uint32_t r, g, b; + decoder_etc_block::get_block_color5(base_color, inten_table, low_selector, r, g, b); + + // Mod 0 + uint32_t lr0 = (r * 15 + 128) / 255, lg0 = (g * 15 + 128) / 255, lb0 = (b * 7 + 128) / 255; + uint32_t la0 = g_pvrtc2_alpha_match33_0[constant_alpha_val].m_l; + + uint32_t cr0 = (lr0 << 1) | (lr0 >> 3); + uint32_t cg0 = (lg0 << 1) | (lg0 >> 3); + uint32_t cb0 = (lb0 << 2) | (lb0 >> 1); + uint32_t ca0 = (la0 << 1); + + cr0 = (cr0 << 3) | (cr0 >> 2); + cg0 = (cg0 << 3) | (cg0 >> 2); + cb0 = (cb0 << 3) | (cb0 >> 2); + ca0 = (ca0 << 4) | ca0; + + uint32_t err0 = sq(cr0 - r) + sq(cg0 - g) + sq(cb0 - b) + sq(ca0 - constant_alpha_val) * 2; + + // If the alpha is < 3 or so we're kinda screwed. It's better to have some RGB error than it is to turn a 100% transparent area slightly opaque. + if ((err0 == 0) || (constant_alpha_val < 3)) + { + pBlock->set_trans_low_color(lr0, lg0, lb0, la0); + pBlock->set_trans_high_color(0, 0, 0, 0); + + pBlock->m_modulation[0] = 0; + pBlock->m_modulation[1] = 0; + pBlock->m_modulation[2] = 0; + pBlock->m_modulation[3] = 0; + return; + } + + // Mod 3 + uint32_t lr3 = (r * 15 + 128) / 255, lg3 = (g * 15 + 128) / 255, lb3 = (b * 15 + 128) / 255; + uint32_t la3 = g_pvrtc2_alpha_match33_3[constant_alpha_val].m_l; + + uint32_t cr3 = (lr3 << 1) | (lr3 >> 3); + uint32_t cg3 = (lg3 << 1) | (lg3 >> 3); + uint32_t cb3 = (lb3 << 1) | (lb3 >> 3); + uint32_t ca3 = (la3 << 1) | 1; + + cr3 = (cr3 << 3) | (cr3 >> 2); + cg3 = (cg3 << 3) | (cg3 >> 2); + cb3 = (cb3 << 3) | (cb3 >> 2); + ca3 = (ca3 << 4) | ca3; + + uint32_t err3 = sq(cr3 - r) + sq(cg3 - g) + sq(cb3 - b) + sq(ca3 - constant_alpha_val) * 2; + + // Mod 1 + uint32_t lr1 = g_pvrtc2_trans_match44[r].m_l, lg1 = g_pvrtc2_trans_match44[g].m_l, lb1 = g_pvrtc2_trans_match34[b].m_l; + uint32_t hr1 = g_pvrtc2_trans_match44[r].m_h, hg1 = g_pvrtc2_trans_match44[g].m_h, hb1 = g_pvrtc2_trans_match34[b].m_h; + uint32_t la1 = g_pvrtc2_alpha_match33[constant_alpha_val].m_l, ha1 = g_pvrtc2_alpha_match33[constant_alpha_val].m_h; + + uint32_t clr1 = (lr1 << 1) | (lr1 >> 3); + uint32_t clg1 = (lg1 << 1) | (lg1 >> 3); + uint32_t clb1 = (lb1 << 2) | (lb1 >> 1); + uint32_t cla1 = (la1 << 1); + + clr1 = (clr1 << 3) | (clr1 >> 2); + clg1 = (clg1 << 3) | (clg1 >> 2); + clb1 = (clb1 << 3) | (clb1 >> 2); + cla1 = (cla1 << 4) | cla1; + + uint32_t chr1 = (hr1 << 1) | (hr1 >> 3); + uint32_t chg1 = (hg1 << 1) | (hg1 >> 3); + uint32_t chb1 = (hb1 << 1) | (hb1 >> 3); + uint32_t cha1 = (ha1 << 1) | 1; + + chr1 = (chr1 << 3) | (chr1 >> 2); + chg1 = (chg1 << 3) | (chg1 >> 2); + chb1 = (chb1 << 3) | (chb1 >> 2); + cha1 = (cha1 << 4) | cha1; + + uint32_t r1 = (clr1 * 5 + chr1 * 3) / 8; + uint32_t g1 = (clg1 * 5 + chg1 * 3) / 8; + uint32_t b1 = (clb1 * 5 + chb1 * 3) / 8; + uint32_t a1 = (cla1 * 5 + cha1 * 3) / 8; + + uint32_t err1 = sq(r1 - r) + sq(g1 - g) + sq(b1 - b) + sq(a1 - constant_alpha_val) * 2; + + if ((err1 < err0) && (err1 < err3)) + { + pBlock->set_trans_low_color(lr1, lg1, lb1, la1); + pBlock->set_trans_high_color(hr1, hg1, hb1, ha1); + + pBlock->m_modulation[0] = 0x55; + pBlock->m_modulation[1] = 0x55; + pBlock->m_modulation[2] = 0x55; + pBlock->m_modulation[3] = 0x55; + } + else if (err0 < err3) + { + pBlock->set_trans_low_color(lr0, lg0, lb0, la0); + pBlock->set_trans_high_color(0, 0, 0, 0); + + pBlock->m_modulation[0] = 0; + pBlock->m_modulation[1] = 0; + pBlock->m_modulation[2] = 0; + pBlock->m_modulation[3] = 0; + } + else + { + pBlock->set_trans_low_color(0, 0, 0, 0); + pBlock->set_trans_high_color(lr3, lg3, lb3, la3); + + pBlock->m_modulation[0] = 0xFF; + pBlock->m_modulation[1] = 0xFF; + pBlock->m_modulation[2] = 0xFF; + pBlock->m_modulation[3] = 0xFF; + } + + return; + } + + // It's a complex block with non-solid color and/or alpha pixels. + vec4F minColor, maxColor; + + if (solid_color_block) + { + // It's a solid color block. + uint32_t low_a = block_cols[alpha_selectors.m_lo_selector].a; + uint32_t high_a = block_cols[alpha_selectors.m_hi_selector].a; + + const float S = 1.0f / 255.0f; + vec4F_set(&minColor, block_cols[low_selector].r * S, block_cols[low_selector].g * S, block_cols[low_selector].b * S, low_a * S); + vec4F_set(&maxColor, block_cols[low_selector].r * S, block_cols[low_selector].g * S, block_cols[low_selector].b * S, high_a * S); + } + else if (constant_alpha_val >= 0) + { + // It's a solid alpha block. + const float S = 1.0f / 255.0f; + vec4F_set(&minColor, block_cols[low_selector].r * S, block_cols[low_selector].g * S, block_cols[low_selector].b * S, constant_alpha_val * S); + vec4F_set(&maxColor, block_cols[high_selector].r * S, block_cols[high_selector].g * S, block_cols[high_selector].b * S, constant_alpha_val * S); + } + // See if any of the block colors got clamped - if so the principle axis got distorted (it's no longer just the ETC1S luma axis). + // To keep quality up we need to use full 4D PCA in this case. + else if ((block_cols[low_selector].c[0] == 0) || (block_cols[high_selector].c[0] == 255) || + (block_cols[low_selector].c[1] == 0) || (block_cols[high_selector].c[1] == 255) || + (block_cols[low_selector].c[2] == 0) || (block_cols[high_selector].c[2] == 255) || + (block_cols[alpha_selectors.m_lo_selector].c[3] == 0) || (block_cols[alpha_selectors.m_hi_selector].c[3] == 255)) + { + // Find principle component of RGBA colors treated as 4D vectors. + color32 pixels[16]; + + uint32_t sum_r = 0, sum_g = 0, sum_b = 0, sum_a = 0; + for (uint32_t i = 0; i < 16; i++) + { + color32 rgb(block_cols[pSelector->get_selector(i & 3, i >> 2)]); + uint32_t a = block_cols[alpha_selectors.get_selector(i & 3, i >> 2)].a; + + pixels[i].set(rgb.r, rgb.g, rgb.b, a); + + sum_r += rgb.r; + sum_g += rgb.g; + sum_b += rgb.b; + sum_a += a; + } + + vec4F meanColor; + vec4F_set(&meanColor, (float)sum_r, (float)sum_g, (float)sum_b, (float)sum_a); + vec4F meanColorScaled = vec4F_mul(&meanColor, 1.0f / 16.0f); + + meanColor = vec4F_mul(&meanColor, 1.0f / (float)(16.0f * 255.0f)); + vec4F_saturate_in_place(&meanColor); + + vec4F axis; + vec4F_set_scalar(&axis, 0.0f); + // Why this incremental method? Because it's stable and predictable. Covar+power method can require a lot of iterations to converge in 4D. + for (uint32_t i = 0; i < 16; i++) + { + vec4F color = vec4F_from_color(&pixels[i]); + color = vec4F_sub(&color, &meanColorScaled); + vec4F a = vec4F_mul(&color, color.c[0]); + vec4F b = vec4F_mul(&color, color.c[1]); + vec4F c = vec4F_mul(&color, color.c[2]); + vec4F d = vec4F_mul(&color, color.c[3]); + vec4F n = i ? axis : color; + vec4F_normalize_in_place(&n); + axis.c[0] += vec4F_dot(&a, &n); + axis.c[1] += vec4F_dot(&b, &n); + axis.c[2] += vec4F_dot(&c, &n); + axis.c[3] += vec4F_dot(&d, &n); + } + + vec4F_normalize_in_place(&axis); + + if (vec4F_dot(&axis, &axis) < .5f) + vec4F_set_scalar(&axis, .5f); + + float l = 1e+9f, h = -1e+9f; + + for (uint32_t i = 0; i < 16; i++) + { + vec4F color = vec4F_from_color(&pixels[i]); + + vec4F q = vec4F_sub(&color, &meanColorScaled); + float d = vec4F_dot(&q, &axis); + + l = basisu::minimum(l, d); + h = basisu::maximum(h, d); + } + + l *= (1.0f / 255.0f); + h *= (1.0f / 255.0f); + + vec4F b0 = vec4F_mul(&axis, l); + vec4F b1 = vec4F_mul(&axis, h); + vec4F c0 = vec4F_add(&meanColor, &b0); + vec4F c1 = vec4F_add(&meanColor, &b1); + minColor = vec4F_saturate(&c0); + maxColor = vec4F_saturate(&c1); + if (minColor.c[3] > maxColor.c[3]) + std::swap(minColor, maxColor); + } + else + { + // We know the RGB axis is luma, because it's an ETC1S block and none of the block colors got clamped. So we only need to use 2D PCA. + // We project each LA vector onto two 2D lines with axes (1,1) and (1,-1) and find the largest projection to determine if axis A is flipped relative to L. + uint32_t block_cols_l[4], block_cols_a[4]; + for (uint32_t i = 0; i < 4; i++) + { + block_cols_l[i] = block_cols[i].r + block_cols[i].g + block_cols[i].b; + block_cols_a[i] = block_cols[i].a * 3; + } + + int p0_min = INT_MAX, p0_max = INT_MIN; + int p1_min = INT_MAX, p1_max = INT_MIN; + for (uint32_t y = 0; y < 4; y++) + { + const uint32_t cs = pSelector->m_selectors[y]; + const uint32_t as = alpha_selectors.m_selectors[y]; + + { + const int l = block_cols_l[cs & 3]; + const int a = block_cols_a[as & 3]; + const int p0 = l + a; p0_min = basisu::minimum(p0_min, p0); p0_max = basisu::maximum(p0_max, p0); + const int p1 = l - a; p1_min = basisu::minimum(p1_min, p1); p1_max = basisu::maximum(p1_max, p1); + } + { + const int l = block_cols_l[(cs >> 2) & 3]; + const int a = block_cols_a[(as >> 2) & 3]; + const int p0 = l + a; p0_min = basisu::minimum(p0_min, p0); p0_max = basisu::maximum(p0_max, p0); + const int p1 = l - a; p1_min = basisu::minimum(p1_min, p1); p1_max = basisu::maximum(p1_max, p1); + } + { + const int l = block_cols_l[(cs >> 4) & 3]; + const int a = block_cols_a[(as >> 4) & 3]; + const int p0 = l + a; p0_min = basisu::minimum(p0_min, p0); p0_max = basisu::maximum(p0_max, p0); + const int p1 = l - a; p1_min = basisu::minimum(p1_min, p1); p1_max = basisu::maximum(p1_max, p1); + } + { + const int l = block_cols_l[cs >> 6]; + const int a = block_cols_a[as >> 6]; + const int p0 = l + a; p0_min = basisu::minimum(p0_min, p0); p0_max = basisu::maximum(p0_max, p0); + const int p1 = l - a; p1_min = basisu::minimum(p1_min, p1); p1_max = basisu::maximum(p1_max, p1); + } + } + + int dist0 = p0_max - p0_min; + int dist1 = p1_max - p1_min; + + const float S = 1.0f / 255.0f; + + vec4F_set(&minColor, block_cols[low_selector].r * S, block_cols[low_selector].g * S, block_cols[low_selector].b * S, block_cols[alpha_selectors.m_lo_selector].a * S); + vec4F_set(&maxColor, block_cols[high_selector].r * S, block_cols[high_selector].g * S, block_cols[high_selector].b * S, block_cols[alpha_selectors.m_hi_selector].a * S); + + // See if the A component of the principle axis is flipped relative to L. If so, we need to flip either RGB or A bounds. + if (dist1 > dist0) + { + std::swap(minColor.c[0], maxColor.c[0]); + std::swap(minColor.c[1], maxColor.c[1]); + std::swap(minColor.c[2], maxColor.c[2]); + } + } + + // 4433 4443 + color32 trialMinColor, trialMaxColor; + + trialMinColor.set_clamped((int)(minColor.c[0] * 15.0f + .5f), (int)(minColor.c[1] * 15.0f + .5f), (int)(minColor.c[2] * 7.0f + .5f), (int)(minColor.c[3] * 7.0f + .5f)); + trialMaxColor.set_clamped((int)(maxColor.c[0] * 15.0f + .5f), (int)(maxColor.c[1] * 15.0f + .5f), (int)(maxColor.c[2] * 15.0f + .5f), (int)(maxColor.c[3] * 7.0f + .5f)); + + pBlock->set_trans_low_color(trialMinColor.r, trialMinColor.g, trialMinColor.b, trialMinColor.a); + pBlock->set_trans_high_color(trialMaxColor.r, trialMaxColor.g, trialMaxColor.b, trialMaxColor.a); + + color32 color_a((trialMinColor.r << 1) | (trialMinColor.r >> 3), (trialMinColor.g << 1) | (trialMinColor.g >> 3), (trialMinColor.b << 2) | (trialMinColor.b >> 1), trialMinColor.a << 1); + color32 color_b((trialMaxColor.r << 1) | (trialMaxColor.r >> 3), (trialMaxColor.g << 1) | (trialMaxColor.g >> 3), (trialMaxColor.b << 1) | (trialMaxColor.b >> 3), (trialMaxColor.a << 1) | 1); + + color32 color0(convert_rgba_5554_to_8888(color_a)); + color32 color3(convert_rgba_5554_to_8888(color_b)); + + const int lr = color0.r; + const int lg = color0.g; + const int lb = color0.b; + const int la = color0.a; + + const int axis_r = color3.r - lr; + const int axis_g = color3.g - lg; + const int axis_b = color3.b - lb; + const int axis_a = color3.a - la; + const int len_a = (axis_r * axis_r) + (axis_g * axis_g) + (axis_b * axis_b) + (axis_a * axis_a); + + const int thresh01 = (len_a * 3) / 16; + const int thresh12 = len_a >> 1; + const int thresh23 = (len_a * 13) / 16; + + if ((axis_r | axis_g | axis_b) == 0) + { + int ca_sel[4]; + + for (uint32_t i = 0; i < 4; i++) + { + int ca = (block_cols[i].a - la) * axis_a; + ca_sel[i] = (ca >= thresh23) + (ca >= thresh12) + (ca >= thresh01); + } + + for (uint32_t y = 0; y < 4; y++) + { + const uint32_t a_sels = alpha_selectors.m_selectors[y]; + + uint32_t sel = ca_sel[a_sels & 3] | (ca_sel[(a_sels >> 2) & 3] << 2) | (ca_sel[(a_sels >> 4) & 3] << 4) | (ca_sel[a_sels >> 6] << 6); + + pBlock->m_modulation[y] = (uint8_t)sel; + } + } + else + { + int cy[4], ca[4]; + + for (uint32_t i = 0; i < 4; i++) + { + cy[i] = (block_cols[i].r - lr) * axis_r + (block_cols[i].g - lg) * axis_g + (block_cols[i].b - lb) * axis_b; + ca[i] = (block_cols[i].a - la) * axis_a; + } + + for (uint32_t y = 0; y < 4; y++) + { + const uint32_t c_sels = pSelector->m_selectors[y]; + const uint32_t a_sels = alpha_selectors.m_selectors[y]; + + const int d0 = cy[c_sels & 3] + ca[a_sels & 3]; + const int d1 = cy[(c_sels >> 2) & 3] + ca[(a_sels >> 2) & 3]; + const int d2 = cy[(c_sels >> 4) & 3] + ca[(a_sels >> 4) & 3]; + const int d3 = cy[c_sels >> 6] + ca[a_sels >> 6]; + + uint32_t sel = ((d0 >= thresh23) + (d0 >= thresh12) + (d0 >= thresh01)) | + (((d1 >= thresh23) + (d1 >= thresh12) + (d1 >= thresh01)) << 2) | + (((d2 >= thresh23) + (d2 >= thresh12) + (d2 >= thresh01)) << 4) | + (((d3 >= thresh23) + (d3 >= thresh12) + (d3 >= thresh01)) << 6); + + pBlock->m_modulation[y] = (uint8_t)sel; + } + } + } + + static void transcoder_init_pvrtc2() + { + for (uint32_t v = 0; v < 256; v++) + { + int best_l = 0, best_h = 0, lowest_err = INT_MAX; + + for (uint32_t l = 0; l < 8; l++) + { + uint32_t le = (l << 1); + le = (le << 4) | le; + + for (uint32_t h = 0; h < 8; h++) + { + uint32_t he = (h << 1) | 1; + he = (he << 4) | he; + + uint32_t m = (le * 5 + he * 3) / 8; + + int err = labs((int)v - (int)m); + if (err < lowest_err) + { + lowest_err = err; + best_l = l; + best_h = h; + } + } + } + + g_pvrtc2_alpha_match33[v].m_l = (uint8_t)best_l; + g_pvrtc2_alpha_match33[v].m_h = (uint8_t)best_h; + } + + for (uint32_t v = 0; v < 256; v++) + { + int best_l = 0, best_h = 0, lowest_err = INT_MAX; + + for (uint32_t l = 0; l < 8; l++) + { + uint32_t le = (l << 1); + le = (le << 4) | le; + + int err = labs((int)v - (int)le); + if (err < lowest_err) + { + lowest_err = err; + best_l = l; + best_h = l; + } + } + + g_pvrtc2_alpha_match33_0[v].m_l = (uint8_t)best_l; + g_pvrtc2_alpha_match33_0[v].m_h = (uint8_t)best_h; + } + + for (uint32_t v = 0; v < 256; v++) + { + int best_l = 0, best_h = 0, lowest_err = INT_MAX; + + for (uint32_t h = 0; h < 8; h++) + { + uint32_t he = (h << 1) | 1; + he = (he << 4) | he; + + int err = labs((int)v - (int)he); + if (err < lowest_err) + { + lowest_err = err; + best_l = h; + best_h = h; + } + } + + g_pvrtc2_alpha_match33_3[v].m_l = (uint8_t)best_l; + g_pvrtc2_alpha_match33_3[v].m_h = (uint8_t)best_h; + } + + for (uint32_t v = 0; v < 256; v++) + { + int best_l = 0, best_h = 0, lowest_err = INT_MAX; + + for (uint32_t l = 0; l < 8; l++) + { + uint32_t le = (l << 2) | (l >> 1); + le = (le << 3) | (le >> 2); + + for (uint32_t h = 0; h < 16; h++) + { + uint32_t he = (h << 1) | (h >> 3); + he = (he << 3) | (he >> 2); + + uint32_t m = (le * 5 + he * 3) / 8; + + int err = labs((int)v - (int)m); + if (err < lowest_err) + { + lowest_err = err; + best_l = l; + best_h = h; + } + } + } + + g_pvrtc2_trans_match34[v].m_l = (uint8_t)best_l; + g_pvrtc2_trans_match34[v].m_h = (uint8_t)best_h; + } + + for (uint32_t v = 0; v < 256; v++) + { + int best_l = 0, best_h = 0, lowest_err = INT_MAX; + + for (uint32_t l = 0; l < 16; l++) + { + uint32_t le = (l << 1) | (l >> 3); + le = (le << 3) | (le >> 2); + + for (uint32_t h = 0; h < 16; h++) + { + uint32_t he = (h << 1) | (h >> 3); + he = (he << 3) | (he >> 2); + + uint32_t m = (le * 5 + he * 3) / 8; + + int err = labs((int)v - (int)m); + if (err < lowest_err) + { + lowest_err = err; + best_l = l; + best_h = h; + } + } + } + + g_pvrtc2_trans_match44[v].m_l = (uint8_t)best_l; + g_pvrtc2_trans_match44[v].m_h = (uint8_t)best_h; + } + } +#endif // BASISD_SUPPORT_PVRTC2 + basisu_lowlevel_transcoder::basisu_lowlevel_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook) : m_pGlobal_sel_codebook(pGlobal_sel_codebook), m_selector_history_buf_size(0) @@ -6349,7 +8156,12 @@ namespace basist if (basis_block_format_is_uncompressed(fmt)) output_row_pitch_in_blocks_or_pixels = slice_desc.m_orig_width; else - output_row_pitch_in_blocks_or_pixels = num_blocks_x; + { + if (fmt == block_format::cFXT1_RGB) + output_row_pitch_in_blocks_or_pixels = (slice_desc.m_orig_width + 7) / 8; + else + output_row_pitch_in_blocks_or_pixels = num_blocks_x; + } } if (basis_block_format_is_uncompressed(fmt)) @@ -6398,7 +8210,7 @@ namespace basist void* pPVRTC_work_mem = nullptr; uint32_t* pPVRTC_endpoints = nullptr; - if ((fmt == cPVRTC1_4_RGB) || (fmt == cPVRTC1_4_RGBA)) + if ((fmt == block_format::cPVRTC1_4_RGB) || (fmt == block_format::cPVRTC1_4_RGBA)) { pPVRTC_work_mem = malloc(num_blocks_x * num_blocks_y * (sizeof(decoder_etc_block) + sizeof(uint32_t))); if (!pPVRTC_work_mem) @@ -6608,7 +8420,7 @@ namespace basist (*pPrev_frame_indices)[block_x + block_y * num_blocks_x] = endpoint_index | (selector_index << 16); #if BASISD_ENABLE_DEBUG_FLAGS - if ((g_debug_flags & cDebugFlagVisCRs) && ((fmt == cETC1) || (fmt == cBC1))) + if ((g_debug_flags & cDebugFlagVisCRs) && ((fmt == block_format::cETC1) || (fmt == block_format::cBC1))) { if ((is_video) && (pred == 2)) { @@ -6624,7 +8436,7 @@ namespace basist switch (fmt) { - case cETC1: + case block_format::cETC1: { decoder_etc_block* pDst_block = reinterpret_cast(static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes); @@ -6637,7 +8449,7 @@ namespace basist break; } - case cBC1: + case block_format::cBC1: { void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; @@ -6653,7 +8465,7 @@ namespace basist #endif break; } - case cBC4: + case block_format::cBC4: { #if BASISD_SUPPORT_DXT5A void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; @@ -6663,7 +8475,7 @@ namespace basist #endif break; } - case cPVRTC1_4_RGB: + case block_format::cPVRTC1_4_RGB: { #if BASISD_SUPPORT_PVRTC1 block.set_base5_color(decoder_etc_block::pack_color5(pEndpoints->m_color5, false)); @@ -6699,7 +8511,7 @@ namespace basist break; } - case cPVRTC1_4_RGBA: + case block_format::cPVRTC1_4_RGBA: { #if BASISD_SUPPORT_PVRTC1 assert(pAlpha_blocks); @@ -6750,7 +8562,7 @@ namespace basist break; } - case cBC7_M6_OPAQUE_ONLY: + case block_format::cBC7_M6_OPAQUE_ONLY: { #if BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; @@ -6760,7 +8572,7 @@ namespace basist #endif break; } - case cBC7_M5_COLOR: + case block_format::cBC7_M5_COLOR: { #if BASISD_SUPPORT_BC7_MODE5 void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; @@ -6770,7 +8582,7 @@ namespace basist #endif break; } - case cBC7_M5_ALPHA: + case block_format::cBC7_M5_ALPHA: { #if BASISD_SUPPORT_BC7_MODE5 void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; @@ -6780,17 +8592,17 @@ namespace basist #endif break; } - case cETC2_EAC_A8: + case block_format::cETC2_EAC_A8: { #if BASISD_SUPPORT_ETC2_EAC_A8 void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; - convert_etc1s_to_etc2_eac_a8(static_cast(pDst_block), pEndpoints, pSelector); + convert_etc1s_to_etc2_eac_a8(static_cast(pDst_block), pEndpoints, pSelector); #else assert(0); #endif break; } - case cASTC_4x4: + case block_format::cASTC_4x4: { #if BASISD_SUPPORT_ASTC void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; @@ -6800,7 +8612,7 @@ namespace basist #endif break; } - case cATC_RGB: + case block_format::cATC_RGB: { #if BASISD_SUPPORT_ATC void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; @@ -6810,14 +8622,48 @@ namespace basist #endif break; } - case cIndices: + case block_format::cFXT1_RGB: + { +#if BASISD_SUPPORT_FXT1 + const uint32_t fxt1_block_x = block_x >> 1; + const uint32_t fxt1_block_y = block_y; + const uint32_t fxt1_subblock = block_x & 1; + + void* pDst_block = static_cast(pDst_blocks) + (fxt1_block_x + fxt1_block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; + + convert_etc1s_to_fxt1(pDst_block, pEndpoints, pSelector, fxt1_subblock); +#else + assert(0); +#endif + break; + } + case block_format::cPVRTC2_4_RGB: + { +#if BASISD_SUPPORT_PVRTC2 + void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; + convert_etc1s_to_pvrtc2_rgb(pDst_block, pEndpoints, pSelector); +#endif + break; + } + case block_format::cPVRTC2_4_RGBA: + { +#if BASISD_SUPPORT_PVRTC2 + assert(transcode_alpha); + + void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; + + convert_etc1s_to_pvrtc2_rgba(pDst_block, pEndpoints, pSelector, &m_endpoints[0], &m_selectors[0]); +#endif + break; + } + case block_format::cIndices: { uint16_t* pDst_block = reinterpret_cast(static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes); pDst_block[0] = static_cast(endpoint_index); pDst_block[1] = static_cast(selector_index); break; } - case cA32: + case block_format::cA32: { assert(sizeof(uint32_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint32_t); @@ -6857,7 +8703,7 @@ namespace basist break; } - case cRGB32: + case block_format::cRGB32: { assert(sizeof(uint32_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint32_t); @@ -6886,7 +8732,7 @@ namespace basist break; } - case cRGBA32: + case block_format::cRGBA32: { assert(sizeof(uint32_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint32_t); @@ -6916,8 +8762,8 @@ namespace basist break; } - case cRGB565: - case cBGR565: + case block_format::cRGB565: + case block_format::cBGR565: { assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); @@ -6929,7 +8775,7 @@ namespace basist decoder_etc_block::get_block_colors5(colors, pEndpoints->m_color5, pEndpoints->m_inten5); uint16_t packed_colors[4]; - if (fmt == cRGB565) + if (fmt == block_format::cRGB565) { for (uint32_t i = 0; i < 4; i++) packed_colors[i] = static_cast(((colors[i].r >> 3) << 11) | ((colors[i].g >> 2) << 5) | (colors[i].b >> 3)); @@ -6952,7 +8798,7 @@ namespace basist break; } - case cRGBA4444_COLOR: + case block_format::cRGBA4444_COLOR: { assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); @@ -6983,7 +8829,7 @@ namespace basist break; } - case cRGBA4444_COLOR_OPAQUE: + case block_format::cRGBA4444_COLOR_OPAQUE: { assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); @@ -7010,7 +8856,7 @@ namespace basist break; } - case cRGBA4444_ALPHA: + case block_format::cRGBA4444_ALPHA: { assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); @@ -7037,6 +8883,16 @@ namespace basist break; } + case block_format::cETC2_EAC_R11: + { +#if BASISD_SUPPORT_ETC2_EAC_RG11 + void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; + convert_etc1s_to_etc2_eac_r11(static_cast(pDst_block), pEndpoints, pSelector); +#else + assert(0); +#endif + break; + } default: { assert(0); @@ -7058,9 +8914,9 @@ namespace basist #if BASISD_SUPPORT_PVRTC1 // PVRTC post process - create per-pixel modulation values. - if (fmt == cPVRTC1_4_RGB) + if (fmt == block_format::cPVRTC1_4_RGB) fixup_pvrtc1_4_modulation_rgb((decoder_etc_block*)pPVRTC_work_mem, pPVRTC_endpoints, pDst_blocks, num_blocks_x, num_blocks_y, pvrtc_wrap_addressing); - else if (fmt == cPVRTC1_4_RGBA) + else if (fmt == block_format::cPVRTC1_4_RGBA) fixup_pvrtc1_4_modulation_rgba((decoder_etc_block*)pPVRTC_work_mem, pPVRTC_endpoints, pDst_blocks, num_blocks_x, num_blocks_y, pvrtc_wrap_addressing, pAlpha_blocks, &m_endpoints[0], &m_selectors[0]); #endif // BASISD_SUPPORT_PVRTC1 @@ -7612,7 +9468,7 @@ namespace basist const basis_slice_desc& slice_desc = reinterpret_cast(pDataU8 + pHeader->m_slice_desc_file_ofs)[slice_index]; - uint32_t total_blocks = slice_desc.m_num_blocks_x * slice_desc.m_num_blocks_y; + uint32_t total_4x4_blocks = slice_desc.m_num_blocks_x * slice_desc.m_num_blocks_y; if (basis_block_format_is_uncompressed(fmt)) { @@ -7630,18 +9486,30 @@ namespace basist return false; } } + else if (fmt == block_format::cFXT1_RGB) + { + const uint32_t num_blocks_fxt1_x = (slice_desc.m_orig_width + 7) / 8; + const uint32_t num_blocks_fxt1_y = (slice_desc.m_orig_height + 3) / 4; + const uint32_t total_blocks_fxt1 = num_blocks_fxt1_x * num_blocks_fxt1_y; + + if (output_blocks_buf_size_in_blocks_or_pixels < total_blocks_fxt1) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_slice: output_blocks_buf_size_in_blocks_or_pixels < total_blocks_fxt1\n"); + return false; + } + } else { - if (output_blocks_buf_size_in_blocks_or_pixels < total_blocks) + if (output_blocks_buf_size_in_blocks_or_pixels < total_4x4_blocks) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_slice: output_blocks_buf_size_in_blocks_or_pixels < total_blocks\n"); return false; } } - if (fmt != cETC1) + if (fmt != block_format::cETC1) { - if ((fmt == cPVRTC1_4_RGB) || (fmt == cPVRTC1_4_RGBA)) + if ((fmt == block_format::cPVRTC1_4_RGB) || (fmt == block_format::cPVRTC1_4_RGBA)) { if ((!basisu::is_pow2(slice_desc.m_num_blocks_x * 4)) || (!basisu::is_pow2(slice_desc.m_num_blocks_y * 4))) { @@ -7731,11 +9599,11 @@ namespace basist if (!output_row_pitch_in_blocks_or_pixels) output_row_pitch_in_blocks_or_pixels = num_blocks_x; - - if (fmt == cETC2_EAC_A8) + + if ((fmt == block_format::cETC2_EAC_A8) || (fmt == block_format::cETC2_EAC_R11)) { #if BASISD_SUPPORT_ETC2_EAC_A8 - eac_a8_block blk; + eac_block blk; blk.m_base = 255; blk.m_multiplier = 1; blk.m_table = 13; @@ -7755,7 +9623,7 @@ namespace basist } #endif } - else if (fmt == cBC4) + else if (fmt == block_format::cBC4) { #if BASISD_SUPPORT_DXT5A dxt5a_block blk; @@ -7822,10 +9690,10 @@ namespace basist return false; } - if ((fmt == cTFPVRTC1_4_RGBA) && (!basis_file_has_alpha_slices)) + if ((fmt == transcoder_texture_format::cTFPVRTC1_4_RGBA) && (!basis_file_has_alpha_slices)) { // Switch to PVRTC1 RGB if the input doesn't have alpha. - fmt = cTFPVRTC1_4_RGB; + fmt = transcoder_texture_format::cTFPVRTC1_4_RGB; } if (pSlice_descs[slice_index].m_flags & cSliceDescFlagsIsAlphaData) @@ -7866,7 +9734,7 @@ namespace basist const uint32_t total_slice_blocks = pSlice_descs[slice_index].m_num_blocks_x * pSlice_descs[slice_index].m_num_blocks_y; - if (((fmt == cTFPVRTC1_4_RGB) || (fmt == cTFPVRTC1_4_RGBA)) && (output_blocks_buf_size_in_blocks_or_pixels > total_slice_blocks)) + if (((fmt == transcoder_texture_format::cTFPVRTC1_4_RGB) || (fmt == transcoder_texture_format::cTFPVRTC1_4_RGBA)) && (output_blocks_buf_size_in_blocks_or_pixels > total_slice_blocks)) { // The transcoder doesn't write beyond total_slice_blocks, so we need to clear the rest ourselves. // For GL usage, PVRTC1 4bpp image size is (max(width, 8)* max(height, 8) * 4 + 7) / 8. @@ -7876,21 +9744,21 @@ namespace basist switch (fmt) { - case cTFETC1: + case transcoder_texture_format::cTFETC1_RGB: { uint32_t slice_index_to_decode = slice_index; // If the caller wants us to transcode the mip level's alpha data, then use the next slice. if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cETC1, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC1 failed\n"); } break; } - case cTFBC1: + case transcoder_texture_format::cTFBC1_RGB: { #if !BASISD_SUPPORT_DXT1 return false; @@ -7900,14 +9768,14 @@ namespace basist if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC1, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC1 failed\n"); } break; } - case cTFBC4: + case transcoder_texture_format::cTFBC4_R: { #if !BASISD_SUPPORT_DXT5A return false; @@ -7917,14 +9785,14 @@ namespace basist if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC4, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC4 failed\n"); } break; } - case cTFPVRTC1_4_RGB: + case transcoder_texture_format::cTFPVRTC1_4_RGB: { #if !BASISD_SUPPORT_PVRTC1 return false; @@ -7935,14 +9803,14 @@ namespace basist slice_index_to_decode++; // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cPVRTC1_4_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGB failed\n"); } break; } - case cTFPVRTC1_4_RGBA: + case transcoder_texture_format::cTFPVRTC1_4_RGBA: { #if !BASISD_SUPPORT_PVRTC1 return false; @@ -7953,7 +9821,7 @@ namespace basist std::vector temp_block_indices(total_slice_blocks); // First transcode alpha data to temp buffer - status = transcode_slice(pData, data_size, slice_index + 1, &temp_block_indices[0], total_slice_blocks, cIndices, sizeof(uint32_t), decode_flags, pSlice_descs[slice_index].m_num_blocks_x, pState); + status = transcode_slice(pData, data_size, slice_index + 1, &temp_block_indices[0], total_slice_blocks, block_format::cIndices, sizeof(uint32_t), decode_flags, pSlice_descs[slice_index].m_num_blocks_x, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGBA failed (0)\n"); @@ -7961,7 +9829,7 @@ namespace basist else { // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cPVRTC1_4_RGBA, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, &temp_block_indices[0]); + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGBA, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, &temp_block_indices[0]); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGBA failed (1)\n"); @@ -7970,7 +9838,7 @@ namespace basist break; } - case cTFBC7_M6_OPAQUE_ONLY: + case transcoder_texture_format::cTFBC7_M6_RGB: { #if !BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY return false; @@ -7980,50 +9848,54 @@ namespace basist if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC7_M6_OPAQUE_ONLY, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M6_OPAQUE_ONLY, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC7 m6 opaque only failed\n"); } break; } - case cTFBC7_M5: + case transcoder_texture_format::cTFBC7_M5_RGBA: { #if !BASISD_SUPPORT_BC7_MODE5 return false; #else + assert(bytes_per_block == 16); + // First transcode the color slice. The cBC7_M5_COLOR transcoder will output opaque mode 5 blocks. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC7_M5_COLOR, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_COLOR, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if ((status) && (basis_file_has_alpha_slices)) { // Now transcode the alpha slice. The cBC7_M5_ALPHA transcoder will now change the opaque mode 5 blocks to blocks with alpha. - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC7_M5_ALPHA, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_ALPHA, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); } break; #endif } - case cTFETC2: + case transcoder_texture_format::cTFETC2_RGBA: { #if !BASISD_SUPPORT_ETC2_EAC_A8 return false; #endif + assert(bytes_per_block == 16); + if (basis_file_has_alpha_slices) { // First decode the alpha data - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cETC2_EAC_A8, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); } else { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cETC2_EAC_A8, 16, output_row_pitch_in_blocks_or_pixels); + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, output_row_pitch_in_blocks_or_pixels); status = true; } if (status) { // Now decode the color data - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, cETC1, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 RGB failed\n"); @@ -8035,7 +9907,7 @@ namespace basist } break; } - case cTFBC3: + case transcoder_texture_format::cTFBC3_RGBA: { #if !BASISD_SUPPORT_DXT1 return false; @@ -8043,21 +9915,23 @@ namespace basist #if !BASISD_SUPPORT_DXT5A return false; #endif + assert(bytes_per_block == 16); + // First decode the alpha data if (basis_file_has_alpha_slices) { - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); } else { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC4, 16, output_row_pitch_in_blocks_or_pixels); + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); status = true; } if (status) { // Now decode the color data. Forbid 3 color blocks, which aren't allowed in BC3. - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, cBC1, 16, decode_flags | cDecodeFlagsBC1ForbidThreeColorBlocks, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, 16, decode_flags | cDecodeFlagsBC1ForbidThreeColorBlocks, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 RGB failed\n"); @@ -8070,19 +9944,21 @@ namespace basist break; } - case cTFBC5: + case transcoder_texture_format::cTFBC5_RG: { #if !BASISD_SUPPORT_DXT5A return false; #endif + assert(bytes_per_block == 16); + // Decode the R data (actually the green channel of the color data slice in the basis file) - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (status) { if (basis_file_has_alpha_slices) { // Decode the G data (actually the green channel of the alpha data slice in the basis file) - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 1 failed\n"); @@ -8090,7 +9966,7 @@ namespace basist } else { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, cBC4, 16, output_row_pitch_in_blocks_or_pixels); + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); status = true; } } @@ -8100,15 +9976,17 @@ namespace basist } break; } - case cTFASTC_4x4: + case transcoder_texture_format::cTFASTC_4x4_RGBA: { #if !BASISD_SUPPORT_ASTC return false; #endif + assert(bytes_per_block == 16); + if (basis_file_has_alpha_slices) { // First decode the alpha data to the output (we're using the output texture as a temp buffer here). - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cIndices, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to failed\n"); @@ -8117,15 +9995,15 @@ namespace basist { // Now decode the color data and transcode to ASTC. The transcoder function will read the alpha selector data from the output texture as it converts and // transcode both the alpha and color data at the same time to ASTC. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cASTC_4x4, 16, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); } } else - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cASTC_4x4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); break; } - case cTFATC_RGB: + case transcoder_texture_format::cTFATC_RGB: { #if !BASISD_SUPPORT_ATC return false; @@ -8135,14 +10013,14 @@ namespace basist if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cATC_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC_RGB failed\n"); } break; } - case cTFATC_RGBA_INTERPOLATED_ALPHA: + case transcoder_texture_format::cTFATC_RGBA: { #if !BASISD_SUPPORT_ATC return false; @@ -8150,20 +10028,22 @@ namespace basist #if !BASISD_SUPPORT_DXT5A return false; #endif + assert(bytes_per_block == 16); + // First decode the alpha data if (basis_file_has_alpha_slices) { - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); } else { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cBC4, 16, output_row_pitch_in_blocks_or_pixels); + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); status = true; } if (status) { - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, cATC_RGB, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC RGB failed\n"); @@ -8173,22 +10053,67 @@ namespace basist { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC A failed\n"); } + break; + } + case transcoder_texture_format::cTFPVRTC2_4_RGB: + { +#if !BASISD_SUPPORT_PVRTC2 + return false; +#endif + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; + + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to cPVRTC2_4_RGB failed\n"); + } + break; + } + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + { +#if !BASISD_SUPPORT_PVRTC2 + return false; +#endif + if (basis_file_has_alpha_slices) + { + // First decode the alpha data to the output (we're using the output texture as a temp buffer here). + status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to failed\n"); + } + else + { + // Now decode the color data and transcode to PVRTC2 RGBA. + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGBA, bytes_per_block, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); + } + } + else + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to cPVRTC2_4_RGBA failed\n"); + } break; } - case cTFRGBA32: + case transcoder_texture_format::cTFRGBA32: { // Raw 32bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. // First decode the alpha data if (basis_file_has_alpha_slices) - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); else status = true; if (status) { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? cRGB32 : cRGBA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGB32 : block_format::cRGBA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 RGB failed\n"); @@ -8201,8 +10126,8 @@ namespace basist break; } - case cTFRGB565: - case cTFBGR565: + case transcoder_texture_format::cTFRGB565: + case transcoder_texture_format::cTFBGR565: { // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. @@ -8211,7 +10136,7 @@ namespace basist if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, (fmt == cTFRGB565) ? cRGB565 : cBGR565, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, (fmt == transcoder_texture_format::cTFRGB565) ? block_format::cRGB565 : block_format::cBGR565, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGB565 RGB failed\n"); @@ -8219,19 +10144,19 @@ namespace basist break; } - case cTFRGBA4444: + case transcoder_texture_format::cTFRGBA4444: { // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. // First decode the alpha data if (basis_file_has_alpha_slices) - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, cRGBA4444_ALPHA, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA4444_ALPHA, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); else status = true; if (status) { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? cRGBA4444_COLOR : cRGBA4444_COLOR_OPAQUE, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGBA4444_COLOR : block_format::cRGBA4444_COLOR_OPAQUE, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); if (!status) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 RGB failed\n"); @@ -8244,6 +10169,75 @@ namespace basist break; } + case transcoder_texture_format::cTFFXT1_RGB: + { +#if !BASISD_SUPPORT_FXT1 + return false; +#endif + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; + + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cFXT1_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to FXT1_RGB failed\n"); + } + break; + } + case transcoder_texture_format::cTFETC2_EAC_R11: + { +#if !BASISD_SUPPORT_ETC2_EAC_RG11 + return false; +#endif + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; + + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 failed\n"); + } + + break; + } + case transcoder_texture_format::cTFETC2_EAC_RG11: + { +#if !BASISD_SUPPORT_ETC2_EAC_RG11 + return false; +#endif + assert(bytes_per_block == 16); + + if (basis_file_has_alpha_slices) + { + // First decode the alpha data to G + status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t *)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + } + else + { + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t *)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + + if (status) + { + // Now decode the color data to R + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 R failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 G failed\n"); + } + + break; + } default: { assert(0); @@ -8259,26 +10253,31 @@ namespace basist { switch (fmt) { - case cTFETC1: - case cTFBC1: - case cTFBC4: - case cTFPVRTC1_4_RGB: - case cTFPVRTC1_4_RGBA: - case cTFATC_RGB: + case transcoder_texture_format::cTFETC1_RGB: + case transcoder_texture_format::cTFBC1_RGB: + case transcoder_texture_format::cTFBC4_R: + case transcoder_texture_format::cTFPVRTC1_4_RGB: + case transcoder_texture_format::cTFPVRTC1_4_RGBA: + case transcoder_texture_format::cTFATC_RGB: + case transcoder_texture_format::cTFPVRTC2_4_RGB: + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + case transcoder_texture_format::cTFETC2_EAC_R11: return 8; - case cTFBC7_M6_OPAQUE_ONLY: - case cTFBC7_M5: - case cTFETC2: - case cTFBC3: - case cTFBC5: - case cTFASTC_4x4: - case cTFATC_RGBA_INTERPOLATED_ALPHA: + case transcoder_texture_format::cTFBC7_M6_RGB: + case transcoder_texture_format::cTFBC7_M5_RGBA: + case transcoder_texture_format::cTFETC2_RGBA: + case transcoder_texture_format::cTFBC3_RGBA: + case transcoder_texture_format::cTFBC5_RG: + case transcoder_texture_format::cTFASTC_4x4_RGBA: + case transcoder_texture_format::cTFATC_RGBA: + case transcoder_texture_format::cTFFXT1_RGB: + case transcoder_texture_format::cTFETC2_EAC_RG11: return 16; - case cTFRGBA32: + case transcoder_texture_format::cTFRGBA32: return sizeof(uint32_t) * 16; - case cTFRGB565: - case cTFBGR565: - case cTFRGBA4444: + case transcoder_texture_format::cTFRGB565: + case transcoder_texture_format::cTFBGR565: + case transcoder_texture_format::cTFRGBA4444: return sizeof(uint16_t) * 16; default: assert(0); @@ -8292,23 +10291,28 @@ namespace basist { switch (fmt) { - case cTFETC1: return "ETC1"; - case cTFBC1: return "BC1"; - case cTFBC4: return "BC4"; - case cTFPVRTC1_4_RGB: return "PVRTC1_4_RGB"; - case cTFPVRTC1_4_RGBA: return "PVRTC1_4_RGBA"; - case cTFBC7_M6_OPAQUE_ONLY: return "BC7_M6_OPAQUE_ONLY"; - case cTFBC7_M5: return "BC7_M5"; - case cTFETC2: return "ETC2"; - case cTFBC3: return "BC3"; - case cTFBC5: return "BC5"; - case cTFASTC_4x4: return "ASTC"; - case cTFATC_RGB: return "ATC_RGB"; - case cTFATC_RGBA_INTERPOLATED_ALPHA: return "ATC_RGBA_INTERPOLATED_ALPHA"; - case cTFRGBA32: return "RGBA32"; - case cTFRGB565: return "RGB565"; - case cTFBGR565: return "BGR565"; - case cTFRGBA4444: return "RGBA4444"; + case transcoder_texture_format::cTFETC1_RGB: return "ETC1_RGB"; + case transcoder_texture_format::cTFBC1_RGB: return "BC1_RGB"; + case transcoder_texture_format::cTFBC4_R: return "BC4_R"; + case transcoder_texture_format::cTFPVRTC1_4_RGB: return "PVRTC1_4_RGB"; + case transcoder_texture_format::cTFPVRTC1_4_RGBA: return "PVRTC1_4_RGBA"; + case transcoder_texture_format::cTFBC7_M6_RGB: return "BC7_M6_RGB"; + case transcoder_texture_format::cTFBC7_M5_RGBA: return "BC7_M5_RGBA"; + case transcoder_texture_format::cTFETC2_RGBA: return "ETC2_RGBA"; + case transcoder_texture_format::cTFBC3_RGBA: return "BC3_RGBA"; + case transcoder_texture_format::cTFBC5_RG: return "BC5_RG"; + case transcoder_texture_format::cTFASTC_4x4_RGBA: return "ASTC_RGBA"; + case transcoder_texture_format::cTFATC_RGB: return "ATC_RGB"; + case transcoder_texture_format::cTFATC_RGBA: return "ATC_RGBA"; + case transcoder_texture_format::cTFRGBA32: return "RGBA32"; + case transcoder_texture_format::cTFRGB565: return "RGB565"; + case transcoder_texture_format::cTFBGR565: return "BGR565"; + case transcoder_texture_format::cTFRGBA4444: return "RGBA4444"; + case transcoder_texture_format::cTFFXT1_RGB: return "FXT1_RGB"; + case transcoder_texture_format::cTFPVRTC2_4_RGB: return "PVRTC2_4_RGB"; + case transcoder_texture_format::cTFPVRTC2_4_RGBA: return "PVRTC2_4_RGBA"; + case transcoder_texture_format::cTFETC2_EAC_R11: return "ETC2_EAC_R11"; + case transcoder_texture_format::cTFETC2_EAC_RG11: return "ETC2_EAC_RG11"; default: assert(0); BASISU_DEVEL_ERROR("basis_get_basisu_texture_format: Invalid fmt\n"); @@ -8338,14 +10342,15 @@ namespace basist { switch (fmt) { - case cTFETC2: - case cTFBC3: - case cTFASTC_4x4: - case cTFBC7_M5: - case cTFPVRTC1_4_RGBA: - case cTFATC_RGBA_INTERPOLATED_ALPHA: - case cTFRGBA32: - case cTFRGBA4444: + case transcoder_texture_format::cTFETC2_RGBA: + case transcoder_texture_format::cTFBC3_RGBA: + case transcoder_texture_format::cTFASTC_4x4_RGBA: + case transcoder_texture_format::cTFBC7_M5_RGBA: + case transcoder_texture_format::cTFPVRTC1_4_RGBA: + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + case transcoder_texture_format::cTFATC_RGBA: + case transcoder_texture_format::cTFRGBA32: + case transcoder_texture_format::cTFRGBA4444: return true; default: break; @@ -8357,39 +10362,44 @@ namespace basist { switch (fmt) { - case cTFETC1: return basisu::cETC1; - case cTFBC1: return basisu::cBC1; - case cTFBC4: return basisu::cBC4; - case cTFPVRTC1_4_RGB: return basisu::cPVRTC1_4_RGB; - case cTFPVRTC1_4_RGBA: return basisu::cPVRTC1_4_RGBA; - case cTFBC7_M6_OPAQUE_ONLY: return basisu::cBC7; - case cTFBC7_M5: return basisu::cBC7; - case cTFETC2: return basisu::cETC2_RGBA; - case cTFBC3: return basisu::cBC3; - case cTFBC5: return basisu::cBC5; - case cTFASTC_4x4: return basisu::cASTC4x4; - case cTFATC_RGB: return basisu::cATC_RGB; - case cTFATC_RGBA_INTERPOLATED_ALPHA: return basisu::cATC_RGBA_INTERPOLATED_ALPHA; - case cTFRGBA32: return basisu::cRGBA32; - case cTFRGB565: return basisu::cRGB565; - case cTFBGR565: return basisu::cBGR565; - case cTFRGBA4444: return basisu::cRGBA4444; + case transcoder_texture_format::cTFETC1_RGB: return basisu::texture_format::cETC1; + case transcoder_texture_format::cTFBC1_RGB: return basisu::texture_format::cBC1; + case transcoder_texture_format::cTFBC4_R: return basisu::texture_format::cBC4; + case transcoder_texture_format::cTFPVRTC1_4_RGB: return basisu::texture_format::cPVRTC1_4_RGB; + case transcoder_texture_format::cTFPVRTC1_4_RGBA: return basisu::texture_format::cPVRTC1_4_RGBA; + case transcoder_texture_format::cTFBC7_M6_RGB: return basisu::texture_format::cBC7; + case transcoder_texture_format::cTFBC7_M5_RGBA: return basisu::texture_format::cBC7; + case transcoder_texture_format::cTFETC2_RGBA: return basisu::texture_format::cETC2_RGBA; + case transcoder_texture_format::cTFBC3_RGBA: return basisu::texture_format::cBC3; + case transcoder_texture_format::cTFBC5_RG: return basisu::texture_format::cBC5; + case transcoder_texture_format::cTFASTC_4x4_RGBA: return basisu::texture_format::cASTC4x4; + case transcoder_texture_format::cTFATC_RGB: return basisu::texture_format::cATC_RGB; + case transcoder_texture_format::cTFATC_RGBA: return basisu::texture_format::cATC_RGBA_INTERPOLATED_ALPHA; + case transcoder_texture_format::cTFRGBA32: return basisu::texture_format::cRGBA32; + case transcoder_texture_format::cTFRGB565: return basisu::texture_format::cRGB565; + case transcoder_texture_format::cTFBGR565: return basisu::texture_format::cBGR565; + case transcoder_texture_format::cTFRGBA4444: return basisu::texture_format::cRGBA4444; + case transcoder_texture_format::cTFFXT1_RGB: return basisu::texture_format::cFXT1_RGB; + case transcoder_texture_format::cTFPVRTC2_4_RGB: return basisu::texture_format::cPVRTC2_4_RGBA; + case transcoder_texture_format::cTFPVRTC2_4_RGBA: return basisu::texture_format::cPVRTC2_4_RGBA; + case transcoder_texture_format::cTFETC2_EAC_R11: return basisu::texture_format::cETC2_R11_EAC; + case transcoder_texture_format::cTFETC2_EAC_RG11: return basisu::texture_format::cETC2_RG11_EAC; default: assert(0); BASISU_DEVEL_ERROR("basis_get_basisu_texture_format: Invalid fmt\n"); break; } - return basisu::cInvalidTextureFormat; + return basisu::texture_format::cInvalidTextureFormat; } bool basis_transcoder_format_is_uncompressed(transcoder_texture_format tex_type) { switch (tex_type) { - case cTFRGBA32: - case cTFRGB565: - case cTFBGR565: - case cTFRGBA4444: + case transcoder_texture_format::cTFRGBA32: + case transcoder_texture_format::cTFRGB565: + case transcoder_texture_format::cTFBGR565: + case transcoder_texture_format::cTFRGBA4444: return true; default: break; @@ -8401,14 +10411,14 @@ namespace basist { switch (tex_type) { - case cRGB32: - case cRGBA32: - case cA32: - case cRGB565: - case cBGR565: - case cRGBA4444_COLOR: - case cRGBA4444_ALPHA: - case cRGBA4444_COLOR_OPAQUE: + case block_format::cRGB32: + case block_format::cRGBA32: + case block_format::cA32: + case block_format::cRGB565: + case block_format::cBGR565: + case block_format::cRGBA4444_COLOR: + case block_format::cRGBA4444_ALPHA: + case block_format::cRGBA4444_COLOR_OPAQUE: return true; default: break; @@ -8420,17 +10430,106 @@ namespace basist { switch (fmt) { - case cTFRGBA32: + case transcoder_texture_format::cTFRGBA32: return sizeof(uint32_t); - case cTFRGB565: - case cTFBGR565: - case cTFRGBA4444: + case transcoder_texture_format::cTFRGB565: + case transcoder_texture_format::cTFBGR565: + case transcoder_texture_format::cTFRGBA4444: return sizeof(uint16_t); default: break; } return 0; } + + uint32_t basis_get_block_width(transcoder_texture_format tex_type) + { + switch (tex_type) + { + case transcoder_texture_format::cTFFXT1_RGB: + return 8; + default: + break; + } + return 4; + } + + uint32_t basis_get_block_height(transcoder_texture_format tex_type) + { + (void)tex_type; + return 4; + } + + bool basis_is_format_supported(transcoder_texture_format tex_type) + { + switch (tex_type) + { + // ETC1 and uncompressed are always supported. + case transcoder_texture_format::cTFETC1_RGB: + case transcoder_texture_format::cTFRGBA32: + case transcoder_texture_format::cTFRGB565: + case transcoder_texture_format::cTFBGR565: + case transcoder_texture_format::cTFRGBA4444: + return true; +#if BASISD_SUPPORT_DXT1 + case transcoder_texture_format::cTFBC1_RGB: + return true; +#endif +#if BASISD_SUPPORT_DXT5A + case transcoder_texture_format::cTFBC4_R: + case transcoder_texture_format::cTFBC5_RG: + return true; +#endif +#if BASISD_SUPPORT_DXT1 && BASISD_SUPPORT_DXT5A + case transcoder_texture_format::cTFBC3_RGBA: + return true; +#endif +#if BASISD_SUPPORT_PVRTC1 + case transcoder_texture_format::cTFPVRTC1_4_RGB: + case transcoder_texture_format::cTFPVRTC1_4_RGBA: + return true; +#endif +#if BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY + case transcoder_texture_format::cTFBC7_M6_RGB: + return true; +#endif +#if BASISD_SUPPORT_BC7_MODE5 + case transcoder_texture_format::cTFBC7_M5_RGBA: + return true; +#endif +#if BASISD_SUPPORT_ETC2_EAC_A8 + case transcoder_texture_format::cTFETC2_RGBA: + return true; +#endif +#if BASISD_SUPPORT_ASTC + case transcoder_texture_format::cTFASTC_4x4_RGBA: + return true; +#endif +#if BASISD_SUPPORT_ATC + case transcoder_texture_format::cTFATC_RGB: + case transcoder_texture_format::cTFATC_RGBA: + return true; +#endif +#if BASISD_SUPPORT_FXT1 + case transcoder_texture_format::cTFFXT1_RGB: + return true; +#endif +#if BASISD_SUPPORT_PVRTC2 + case transcoder_texture_format::cTFPVRTC2_4_RGB: + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + return true; +#endif +#if BASISD_SUPPORT_ETC2_EAC_RG11 + case transcoder_texture_format::cTFETC2_EAC_R11: + case transcoder_texture_format::cTFETC2_EAC_RG11: + return true; +#endif + default: + break; + } + + return false; + } } // namespace basist diff --git a/transcoder/basisu_transcoder.h b/transcoder/basisu_transcoder.h index 877dee4..6d96255 100644 --- a/transcoder/basisu_transcoder.h +++ b/transcoder/basisu_transcoder.h @@ -31,42 +31,64 @@ namespace basist // fully opaque (255) alpha channel. // - The PVRTC1 texture formats only support power of 2 dimension .basis files, but this may be relaxed in a future version. // - The PVRTC1 transcoders are real-time encoders, so don't expect the highest quality. We may add a slower encoder with improved quality. - enum transcoder_texture_format + // - These enums must be kept in sync with Javascript code that calls the transcoder. + enum class transcoder_texture_format { // Compressed formats // ETC1-2 - cTFETC1, // Opaque only, returns RGB or alpha data if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified - cTFETC2, // Opaque+alpha, ETC2_EAC_A8 block followed by a ETC1 block, alpha channel will be opaque for opaque .basis files + cTFETC1_RGB = 0, // Opaque only, returns RGB or alpha data if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified + cTFETC2_RGBA = 1, // Opaque+alpha, ETC2_EAC_A8 block followed by a ETC1 block, alpha channel will be opaque for opaque .basis files - // BC1-5, BC7 - cTFBC1, // Opaque only, no punchthrough alpha support yet, transcodes alpha slice if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified - cTFBC3, // Opaque+alpha, BC4 followed by a BC1 block, alpha channel will be opaque for opaque .basis files - cTFBC4, // Red only, alpha slice is transcoded to output if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified - cTFBC5, // XY: Two BC4 blocks, X=R and Y=Alpha, .basis file should have alpha data (if not Y will be all 255's) - cTFBC7_M6_OPAQUE_ONLY, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified. Highest quality of all the non-ETC1 formats. - cTFBC7_M5, // Opaque+alpha, alpha channel will be opaque for opaque .basis files + // BC1-5, BC7 (desktop, some mobile devices) + cTFBC1_RGB = 2, // Opaque only, no punchthrough alpha support yet, transcodes alpha slice if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified + cTFBC3_RGBA = 3, // Opaque+alpha, BC4 followed by a BC1 block, alpha channel will be opaque for opaque .basis files + cTFBC4_R = 4, // Red only, alpha slice is transcoded to output if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified + cTFBC5_RG = 5, // XY: Two BC4 blocks, X=R and Y=Alpha, .basis file should have alpha data (if not Y will be all 255's) + cTFBC7_M6_RGB = 6, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified. Highest quality of all the non-ETC1 formats. + cTFBC7_M5_RGBA = 7, // Opaque+alpha, alpha channel will be opaque for opaque .basis files - // PVRTC1 4bpp - cTFPVRTC1_4_RGB, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified, nearly lowest quality of any texture format. - cTFPVRTC1_4_RGBA, // Opaque+alpha, most useful for simple opacity maps. If .basis file doens't have alpha cTFPVRTC1_4_RGB will be used instead. Lowest quality of any supported texture format. + // PVRTC1 4bpp (mobile, PowerVR devices) + cTFPVRTC1_4_RGB = 8, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified, nearly lowest quality of any texture format. + cTFPVRTC1_4_RGBA = 9, // Opaque+alpha, most useful for simple opacity maps. If .basis file doens't have alpha cTFPVRTC1_4_RGB will be used instead. Lowest quality of any supported texture format. - // ASTC - cTFASTC_4x4, // Opaque+alpha, ASTC 4x4, alpha channel will be opaque for opaque .basis files. Transcoder uses RGB/RGBA/L/LA modes, void extent, and up to two ([0,47] and [0,255]) endpoint precisions. + // ASTC (mobile, Intel devices, hopefully all desktop GPU's one day) + cTFASTC_4x4_RGBA = 10, // Opaque+alpha, ASTC 4x4, alpha channel will be opaque for opaque .basis files. Transcoder uses RGB/RGBA/L/LA modes, void extent, and up to two ([0,47] and [0,255]) endpoint precisions. - // ATC - cTFATC_RGB, // Opaque, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified. ATI ATC (GL_ATC_RGB_AMD) - cTFATC_RGBA_INTERPOLATED_ALPHA, // Opaque+alpha, alpha channel will be opaque for opaque .basis files. ATI ATC (ATC_RGBA_INTERPOLATED_ALPHA_AMD) + // ATC (mobile, Adreno devices, this is a niche format) + cTFATC_RGB = 11, // Opaque, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified. ATI ATC (GL_ATC_RGB_AMD) + cTFATC_RGBA = 12, // Opaque+alpha, alpha channel will be opaque for opaque .basis files. ATI ATC (GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD) - cTFTotalBlockTextureFormats, + // FXT1 (desktop, Intel devices, this is a super obscure format) + cTFFXT1_RGB = 17, // Opaque only, uses exclusively CC_MIXED blocks. Notable for having a 8x4 block size. GL_3DFX_texture_compression_FXT1 is supported on Intel integrated GPU's (such as HD 630). + // Punch-through alpha is relatively easy to support, but full alpha is harder. This format is only here for completeness so opaque-only is fine for now. + // See the BASISU_USE_ORIGINAL_3DFX_FXT1_ENCODING macro in basisu_transcoder_internal.h. + cTFPVRTC2_4_RGB = 18, // Opaque-only, almost BC1 quality, much faster to transcode and supports arbitrary texture dimensions (unlike PVRTC1 RGB). + cTFPVRTC2_4_RGBA = 19, // Opaque+alpha, slower to encode than cTFPVRTC2_4_RGB. Premultiplied alpha is highly recommended, otherwise the color channel can leak into the alpha channel on transparent blocks. + + cTFETC2_EAC_R11 = 20, // R only (ETC2 EAC R11 unsigned) + cTFETC2_EAC_RG11 = 21, // RG only (ETC2 EAC RG11 unsigned), R=opaque.r, G=alpha - for tangent space normal maps + // Uncompressed (raw pixel) formats - cTFRGBA32 = cTFTotalBlockTextureFormats, // 32bpp RGBA image stored in raster (not block) order in memory, R is first byte, A is last byte. - cTFRGB565, // 166pp RGB image stored in raster (not block) order in memory, R at bit position 11 - cTFBGR565, // 16bpp RGB image stored in raster (not block) order in memory, R at bit position 0 - cTFRGBA4444, // 16bpp RGBA image stored in raster (not block) order in memory, R at bit position 12, A at bit position 0 + cTFRGBA32 = 13, // 32bpp RGBA image stored in raster (not block) order in memory, R is first byte, A is last byte. + cTFRGB565 = 14, // 166pp RGB image stored in raster (not block) order in memory, R at bit position 11 + cTFBGR565 = 15, // 16bpp RGB image stored in raster (not block) order in memory, R at bit position 0 + cTFRGBA4444 = 16, // 16bpp RGBA image stored in raster (not block) order in memory, R at bit position 12, A at bit position 0 - cTFTotalTextureFormats + cTFTotalTextureFormats = 22, + + // Old enums for compatibility with code compiled against previous versions + cTFETC1 = cTFETC1_RGB, + cTFETC2 = cTFETC2_RGBA, + cTFBC1 = cTFBC1_RGB, + cTFBC3 = cTFBC3_RGBA, + cTFBC4 = cTFBC4_R, + cTFBC5 = cTFBC5_RG, + cTFBC7_M6_OPAQUE_ONLY = cTFBC7_M6_RGB, + cTFBC7_M5 = cTFBC7_M5_RGBA, + cTFASTC_4x4 = cTFASTC_4x4_RGBA, + cTFATC_RGBA_INTERPOLATED_ALPHA = cTFATC_RGBA, }; uint32_t basis_get_bytes_per_block(transcoder_texture_format fmt); @@ -74,10 +96,16 @@ namespace basist bool basis_transcoder_format_has_alpha(transcoder_texture_format fmt); basisu::texture_format basis_get_basisu_texture_format(transcoder_texture_format fmt); const char* basis_get_texture_type_name(basis_texture_type tex_type); + bool basis_transcoder_format_is_uncompressed(transcoder_texture_format tex_type); - bool basis_block_format_is_uncompressed(block_format tex_type); uint32_t basis_get_uncompressed_bytes_per_pixel(transcoder_texture_format fmt); + uint32_t basis_get_block_width(transcoder_texture_format tex_type); + uint32_t basis_get_block_height(transcoder_texture_format tex_type); + + // Returns true if the specified format was enabled at compile time. + bool basis_is_format_supported(transcoder_texture_format tex_type); + class basisu_transcoder; // This struct holds all state used during transcoding. For video, it needs to persist between image transcodes (it holds the previous frame). @@ -292,7 +320,7 @@ namespace basist // The output buffer contains alpha endpoint/selector indices. // Used internally when decoding formats like ASTC that require both color and alpha data to be available when transcoding to the output format. - cDecodeFlagsOutputHasAlphaIndices = 16, + cDecodeFlagsOutputHasAlphaIndices = 16 }; // transcode_image_level() decodes a single mipmap level from the .basis file to any of the supported output texture formats. diff --git a/transcoder/basisu_transcoder_internal.h b/transcoder/basisu_transcoder_internal.h index ffa9b6f..a9c6823 100644 --- a/transcoder/basisu_transcoder_internal.h +++ b/transcoder/basisu_transcoder_internal.h @@ -42,7 +42,7 @@ namespace basist { // Low-level formats directly supported by the transcoder (other supported texture formats are combinations of these low-level block formats). // You probably don't care about these enum's unless you are going pretty low-level and calling the transcoder to decode individual slices. - enum block_format + enum class block_format { cETC1, // ETC1S RGB cBC1, // DXT1 RGB @@ -57,6 +57,7 @@ namespace basist // data. If you use a sRGB ASTC format you'll get ~1 LSB of additional error, because of the different way ASTC decoders scale 8-bit endpoints to 16-bits during unpacking. cATC_RGB, cATC_RGBA_INTERPOLATED_ALPHA, + cFXT1_RGB, // Opaque-only, has oddball 8x4 pixel block size cIndices, // Used internally: Write 16-bit endpoint and selector indices directly to output (output block must be at least 32-bits) @@ -71,6 +72,11 @@ namespace basist cRGBA4444_ALPHA, cRGBA4444_COLOR_OPAQUE, + cPVRTC2_4_RGB, + cPVRTC2_4_RGBA, + + cETC2_EAC_R11, + cTotalBlockFormats }; @@ -624,6 +630,11 @@ namespace basist struct decoder_etc_block; + inline uint8_t clamp255(int32_t i) + { + return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); + } + struct color32 { union @@ -647,6 +658,8 @@ namespace basist void set(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); c[3] = static_cast(va); } + void set_clamped(int vr, int vg, int vb, int va) { c[0] = clamp255(vr); c[1] = clamp255(vg); c[2] = clamp255(vb); c[3] = clamp255(va); } + uint8_t operator[] (uint32_t idx) const { assert(idx < 4); return c[idx]; } uint8_t &operator[] (uint32_t idx) { assert(idx < 4); return c[idx]; } @@ -733,6 +746,8 @@ namespace basist } }; + bool basis_block_format_is_uncompressed(block_format tex_type); + } // namespace basist diff --git a/webgl/transcoder/CMakeLists.txt b/webgl/transcoder/CMakeLists.txt index 7dce7a1..ec383ee 100644 --- a/webgl/transcoder/CMakeLists.txt +++ b/webgl/transcoder/CMakeLists.txt @@ -10,7 +10,7 @@ if (EMSCRIPTEN) basis_wrappers.cpp ) - target_compile_definitions(basis_transcoder.js PRIVATE NDEBUG BASISD_SUPPORT_BC7=0 BASISD_SUPPORT_ATC=0 BASISD_SUPPORT_ASTC_HIGHER_OPAQUE_QUALITY=0) + target_compile_definitions(basis_transcoder.js PRIVATE NDEBUG BASISD_SUPPORT_BC7=0 BASISD_SUPPORT_ATC=0 BASISD_SUPPORT_ASTC_HIGHER_OPAQUE_QUALITY=0 BASISD_SUPPORT_PVRTC2=0 BASISD_SUPPORT_FXT1=0 BASISD_SUPPORT_ETC2_EAC_RG11=0) target_compile_options(basis_transcoder.js PRIVATE -O3) target_include_directories(basis_transcoder.js PRIVATE ../../transcoder) diff --git a/webgl_videotest/basis.js b/webgl_videotest/basis.js index 5c4e1e0..41417aa 100644 --- a/webgl_videotest/basis.js +++ b/webgl_videotest/basis.js @@ -1,13 +1,13 @@ -var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module["stringToUTF16"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module["lengthBytesUTF16"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module["stringToUTF32"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}Module["lengthBytesUTF32"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||5e8;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+911328;__ATINIT__.push();memoryInitializer="basis.js.mem";var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0){if(info.destructor){Runtime.dynCall("vi",info.destructor,[ptr])}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(ptr));throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(asm["setTempRet0"](0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(asm["setTempRet0"](0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(asm["setTempRet0"](typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(asm["setTempRet0"](throwntype),thrown)|0}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}Module["_memset"]=_memset;function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall("vi",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}Module["_bitshift64Lshr"]=_bitshift64Lshr;Module["_bitshift64Shl"]=_bitshift64Shl;function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function _abort(){Module["abort"]()}function ___lock(){}function ___unlock(){}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.buffer.byteLength:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&146)>>1}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:(function(flags){flags&=~32768;if(flags in NODEFS.flagsToPermissionStringMap){return NODEFS.flagsToPermissionStringMap[flags]}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsToPermissionString(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;var nbuffer=new Buffer(length);var res;try{res=fs.readSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(res>0){for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var _stdin=allocate(1,"i32*",ALLOC_STATIC);var _stdout=allocate(1,"i32*",ALLOC_STATIC);var _stderr=allocate(1,"i32*",ALLOC_STATIC);var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if((flags&2097155)!==0||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}var mounts=FS.getMounts(FS.root.mount);var completed=0;function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=mounts.length){callback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdev:(function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){if(err===ERRNO_CODES.EISDIR)err=ERRNO_CODES.EPERM;throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module["printErr"]("read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream}),close:(function(stream){if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)}),munmap:(function(stream){return 0}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret}),writeFile:(function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";opts.encoding=opts.encoding||"utf8";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var stream=FS.open(path,opts.flags,opts.mode);if(opts.encoding==="utf8"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,0,opts.canOwn)}else if(opts.encoding==="binary"){FS.write(stream,data,0,data.length,0,opts.canOwn)}FS.close(stream)}),cwd:(function(){return FS.currentPath}),chdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path}),createDefaultDirectories:(function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")}),createDefaultDevices:(function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:(function(){return 0}),write:(function(stream,buffer,offset,length,pos){return length})});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto!=="undefined"){var randomBuffer=new Uint8Array(1);random_device=(function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]})}else if(ENVIRONMENT_IS_NODE){random_device=(function(){return require("crypto").randomBytes(1)[0]})}else{random_device=(function(){return Math.random()*256|0})}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")}),createSpecialDirectories:(function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:(function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:(function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:(function(){return stream.path})}};ret.parent=ret;return ret})};return node})},{},"/proc/self/fd")}),createStandardStreams:(function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");assert(stdin.fd===0,"invalid handle for stdin ("+stdin.fd+")");var stdout=FS.open("/dev/stdout","w");assert(stdout.fd===1,"invalid handle for stdout ("+stdout.fd+")");var stderr=FS.open("/dev/stderr","w");assert(stderr.fd===2,"invalid handle for stderr ("+stderr.fd+")")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=(function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}});this.setErrno(errno);this.message=ERRNO_MESSAGES[errno]};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}}),init:(function(input,output,error){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperty(lazyArray,"length",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})});Object.defineProperty(lazyArray,"chunkSize",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperty(node,"usedBytes",{get:(function(){return this.contents.length})});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);ret=ret.slice(0,Math.max(0,bufsize));writeStringToMemory(ret,buf,true);return ret.length}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___assert_fail(condition,filename,line,func){ABORT=true;throw"Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"]+" at "+stackTrace()}function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){setTimeout(Browser.mainLoop.runner,value)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(!window["setImmediate"]){var setImmediates=[];var emscriptenMainLoopMessageId="__emcc";function Browser_setImmediate_messageHandler(event){if(event.source===window&&event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}}window.addEventListener("message",Browser_setImmediate_messageHandler,true);window["setImmediate"]=function Browser_emulated_setImmediate(func){setImmediates.push(func);window.postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){window["setImmediate"](Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method==="timeout"&&Module.ctx){Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter((function(){if(typeof arg!=="undefined"){Runtime.dynCall("vi",func,[arg])}else{Runtime.dynCall("v",func)}}));if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var canvas=Module["canvas"];function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(function(){});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor="black"}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.cancelFullScreen=document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["webkitCancelFullScreen"]||document["msExitFullscreen"]||document["exitFullscreen"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullScreenChange,false);document.addEventListener("mozfullscreenchange",fullScreenChange,false);document.addEventListener("webkitfullscreenchange",fullScreenChange,false);document.addEventListener("MSFullscreenChange",fullScreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer["requestFullScreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullScreen"]?(function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module["noExitRuntime"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module["noExitRuntime"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)}),getMovementX:(function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0}),getMovementY:(function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency("al "+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}}));if(!noRunDep)addRunDependency("al "+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2]=ret}return ret}function _pthread_self(){return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _malloc(bytes){var ptr=Runtime.dynamicAlloc(bytes+8);return ptr+8&4294967288}Module["_malloc"]=_malloc;function ___cxa_allocate_exception(size){return _malloc(size)}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21506:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module["stringToUTF16"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module["lengthBytesUTF16"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module["stringToUTF32"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}Module["lengthBytesUTF32"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||5e8;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+980544;__ATINIT__.push();memoryInitializer="basis.js.mem";var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0){if(info.destructor){Runtime.dynCall("vi",info.destructor,[ptr])}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(ptr));throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(asm["setTempRet0"](0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(asm["setTempRet0"](0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(asm["setTempRet0"](typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(asm["setTempRet0"](throwntype),thrown)|0}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}Module["_memset"]=_memset;function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall("vi",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}Module["_bitshift64Lshr"]=_bitshift64Lshr;Module["_bitshift64Shl"]=_bitshift64Shl;function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function _abort(){Module["abort"]()}var _sqrtf=Math_sqrt;function ___unlock(){}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.buffer.byteLength:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&146)>>1}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:(function(flags){flags&=~32768;if(flags in NODEFS.flagsToPermissionStringMap){return NODEFS.flagsToPermissionStringMap[flags]}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsToPermissionString(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;var nbuffer=new Buffer(length);var res;try{res=fs.readSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(res>0){for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var _stdin=allocate(1,"i32*",ALLOC_STATIC);var _stdout=allocate(1,"i32*",ALLOC_STATIC);var _stderr=allocate(1,"i32*",ALLOC_STATIC);var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if((flags&2097155)!==0||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}var mounts=FS.getMounts(FS.root.mount);var completed=0;function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=mounts.length){callback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdev:(function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){if(err===ERRNO_CODES.EISDIR)err=ERRNO_CODES.EPERM;throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module["printErr"]("read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream}),close:(function(stream){if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)}),munmap:(function(stream){return 0}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret}),writeFile:(function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";opts.encoding=opts.encoding||"utf8";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var stream=FS.open(path,opts.flags,opts.mode);if(opts.encoding==="utf8"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,0,opts.canOwn)}else if(opts.encoding==="binary"){FS.write(stream,data,0,data.length,0,opts.canOwn)}FS.close(stream)}),cwd:(function(){return FS.currentPath}),chdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path}),createDefaultDirectories:(function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")}),createDefaultDevices:(function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:(function(){return 0}),write:(function(stream,buffer,offset,length,pos){return length})});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto!=="undefined"){var randomBuffer=new Uint8Array(1);random_device=(function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]})}else if(ENVIRONMENT_IS_NODE){random_device=(function(){return require("crypto").randomBytes(1)[0]})}else{random_device=(function(){return Math.random()*256|0})}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")}),createSpecialDirectories:(function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:(function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:(function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:(function(){return stream.path})}};ret.parent=ret;return ret})};return node})},{},"/proc/self/fd")}),createStandardStreams:(function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");assert(stdin.fd===0,"invalid handle for stdin ("+stdin.fd+")");var stdout=FS.open("/dev/stdout","w");assert(stdout.fd===1,"invalid handle for stdout ("+stdout.fd+")");var stderr=FS.open("/dev/stderr","w");assert(stderr.fd===2,"invalid handle for stderr ("+stderr.fd+")")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=(function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}});this.setErrno(errno);this.message=ERRNO_MESSAGES[errno]};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}}),init:(function(input,output,error){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperty(lazyArray,"length",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})});Object.defineProperty(lazyArray,"chunkSize",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperty(node,"usedBytes",{get:(function(){return this.contents.length})});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);ret=ret.slice(0,Math.max(0,bufsize));writeStringToMemory(ret,buf,true);return ret.length}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___assert_fail(condition,filename,line,func){ABORT=true;throw"Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"]+" at "+stackTrace()}function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;function ___lock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){setTimeout(Browser.mainLoop.runner,value)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(!window["setImmediate"]){var setImmediates=[];var emscriptenMainLoopMessageId="__emcc";function Browser_setImmediate_messageHandler(event){if(event.source===window&&event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}}window.addEventListener("message",Browser_setImmediate_messageHandler,true);window["setImmediate"]=function Browser_emulated_setImmediate(func){setImmediates.push(func);window.postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){window["setImmediate"](Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method==="timeout"&&Module.ctx){Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter((function(){if(typeof arg!=="undefined"){Runtime.dynCall("vi",func,[arg])}else{Runtime.dynCall("v",func)}}));if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var canvas=Module["canvas"];function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(function(){});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor="black"}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.cancelFullScreen=document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["webkitCancelFullScreen"]||document["msExitFullscreen"]||document["exitFullscreen"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullScreenChange,false);document.addEventListener("mozfullscreenchange",fullScreenChange,false);document.addEventListener("webkitfullscreenchange",fullScreenChange,false);document.addEventListener("MSFullscreenChange",fullScreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer["requestFullScreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullScreen"]?(function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module["noExitRuntime"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module["noExitRuntime"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)}),getMovementX:(function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0}),getMovementY:(function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency("al "+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}}));if(!noRunDep)addRunDependency("al "+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2]=ret}return ret}function _pthread_self(){return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _malloc(bytes){var ptr=Runtime.dynamicAlloc(bytes+8);return ptr+8&4294967288}Module["_malloc"]=_malloc;function ___cxa_allocate_exception(size){return _malloc(size)}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21506:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE>0]|0)==3;q=Z(j,h)|0;V=m+-13|0;if(!s)if(V>>>0<8){W=d[r+6>>0]<<8|d[r+5>>0];X=4}else{Y=h;_=w}else{W=s;X=4}if((X|0)==4)if(V>>>0>7|(w|0)!=0){Y=W;_=w}else{Y=W;_=d[r+8>>0]<<8|d[r+7>>0]}if(t){W=a[r+3>>0]|0;if((W&255)>15){$=0;i=x;return $|0}w=W&255;W=d[r+4>>0]&1;r=U+24+(W*192|0)+(w*12|0)|0;V=(c[U+24+(W*192|0)+(w*12|0)+4>>2]|0)-(c[r>>2]|0)>>2;if(q>>>0>V>>>0){Kb(r,q-V|0);aa=r}else aa=r}else aa=0;if((k|0)==0&(l|0)!=0){$=0;i=x;return $|0}r=k+l|0;l=f+172|0;V=c[l>>2]|0;c[I>>2]=0;w=I+4|0;c[w>>2]=0;c[I+8>>2]=0;if(!V)ba=0;else{wb(I,V);ba=c[l>>2]|0}W=I+12|0;c[W>>2]=V>>>1;V=f+16|0;s=f+12|0;ca=ba+(((c[V>>2]|0)-(c[s>>2]|0)|0)/11|0)|0;if((m+-3|0)>>>0<2){ba=Hc(q*12|0)|0;if(!ba)da=0;else{ea=ba+(q<<3)|0;fa=ba;X=16}}else{ea=0;fa=0;X=16}a:do if((X|0)==16){ba=(c[U+4>>2]|0)-(c[U>>2]|0)>>2;do if(ba>>>0>>0){Lb(U,h-ba|0);ga=U+12|0;ha=U+16|0;ia=c[ha>>2]|0;ja=c[ga>>2]|0;ka=ia-ja>>2;if(ka>>>0>>0){Lb(ga,h-ka|0);break}if(ka>>>0>h>>>0?(ka=ja+(h<<2)|0,(ia|0)!=(ka|0)):0)c[ha>>2]=ia+(~((ia+-4-ka|0)>>>2)<<2)}while(0);b:do if(j){ba=(h|0)==0;ka=f+32|0;ia=f+28|0;ha=f+40|0;ja=f+52|0;ga=f+68|0;la=f+64|0;na=f+76|0;oa=f+4|0;pa=f+88|0;qa=t^1;ra=f+104|0;sa=f+100|0;ta=f+112|0;ua=f+140|0;va=f+136|0;wa=f+148|0;xa=f+160|0;ya=f+124|0;za=m>>>0<2;Aa=(v|0)==0;Ba=y+1|0;Ca=y+2|0;Da=y+3|0;Ea=y+1|0;Fa=y+2|0;Ga=y+3|0;Ha=G+4|0;Ia=G+8|0;Ja=G+12|0;Ka=z+8|0;La=z+9|0;Ma=z+2|0;Na=z+4|0;Oa=z+1|0;Pa=z+3|0;Qa=z+5|0;Ra=H+4|0;Sa=H+8|0;Ta=H+12|0;Ua=z+6|0;Va=z+7|0;Wa=z+11|0;Xa=z+13|0;Ya=z+15|0;Za=z+17|0;_a=z+19|0;$a=z+21|0;ab=z+23|0;bb=z+25|0;cb=z+27|0;db=z+29|0;eb=z+31|0;fb=z+33|0;gb=z+35|0;jb=z+37|0;kb=z+39|0;lb=z+41|0;mb=A+4|0;nb=A+8|0;ob=A+12|0;pb=C+1|0;qb=C+12+1|0;rb=z+10|0;sb=z+12|0;tb=z+14|0;ub=z+16|0;vb=z+18|0;xb=z+20|0;yb=z+22|0;zb=z+24|0;Ab=z+26|0;Bb=z+28|0;Cb=z+30|0;Db=z+32|0;Eb=z+34|0;Fb=z+36|0;Hb=z+38|0;Ib=z+40|0;Jb=E+12|0;Mb=F+12|0;Nb=Mb+2|0;Ob=Mb+1|0;Pb=(n|0)==4;Qb=J+4|0;Rb=J+8|0;Sb=J+12|0;Tb=Y<<2;Ub=(n|0)==2;Vb=(m|0)==16;Wb=Y<<1;Xb=~Y;Yb=M+4|0;Zb=N+2|0;_b=M+8|0;$b=N+4|0;bc=M+12|0;cc=N+6|0;dc=M+2|0;ec=M+1|0;fc=M+4|0;gc=fc+2|0;hc=fc+1|0;ic=N+2|0;jc=M+8|0;kc=jc+2|0;lc=jc+1|0;mc=N+4|0;nc=M+12|0;oc=nc+2|0;pc=nc+1|0;qc=N+6|0;rc=O+4|0;sc=P+2|0;tc=O+8|0;uc=P+4|0;vc=O+12|0;wc=P+6|0;xc=Q+4|0;yc=R+2|0;zc=Q+8|0;Ac=R+4|0;Bc=Q+12|0;Cc=R+6|0;Dc=S+1|0;Ec=S+4+1|0;Fc=T+2|0;Gc=S+8+1|0;Jc=T+4|0;Kc=S+12+1|0;Lc=T+6|0;Mc=0;Nc=0;Oc=0;Pc=3;Qc=k;Tc=0;Uc=0;Vc=0;Wc=0;Xc=0;Yc=0;Zc=~_;_c=0;$c=0;c:while(1){ad=(Zc|0)>-5?~Zc:4;bd=Vc&1;d:do if(ba){cd=Oc;dd=Nc;ed=Mc;fd=Uc;gd=Tc;hd=Qc;id=Pc;jd=Wc;kd=Xc;ld=Yc;md=_c;nd=$c}else{od=(bd|0)==0;pd=U+((bd^1)*12|0)|0;qd=U+(bd*12|0)|0;rd=Z(Vc,h)|0;sd=Z(Vc,Y)|0;td=Vc<<2;ud=Z(td,Y)|0;vd=(_|0)==(td|0);td=(Vc|0)==0;wd=(Vc|0)!=0;xd=Mc;yd=Nc;zd=Oc;Ad=Pc;Bd=Qc;Cd=Tc;Dd=Uc;Ed=0;Fd=Wc;Gd=Xc;Hd=Yc;Id=Xb;Jd=_c;Kd=$c;while(1){Ld=(Id|0)>-5?~Id:4;do if(!(Ed&1)){if(!od){Md=Dd;Nd=Cd;Od=Bd;Pd=d[(c[qd>>2]|0)+(Ed<<2)+2>>0]|0;Qd=Hd;Rd=Kd;break}do if(!Hd){if((c[ka>>2]|0)==(c[ia>>2]|0)){X=31;break c}else{Sd=Dd;Td=Bd;Ud=Cd}while(1){if(Sd>>>0>=16){Vd=Ud;Wd=Td;Xd=Sd;break}if(Td>>>0>>0){Yd=Td+1|0;Zd=d[Td>>0]|0}else{Yd=Td;Zd=0}Ud=Zd<>>0>=33){X=36;break c}else Td=Yd}_d=c[(c[ha>>2]|0)+((Vd&1023)<<2)>>2]|0;if((_d|0)>-1){$d=_d>>16;ae=_d&65535}else{be=c[ja>>2]|0;ce=10;de=_d;while(1){_d=ce+1|0;ee=b[be+((Vd>>>ce&1)+~de<<1)>>1]|0;fe=ee<<16>>16;if(ee<<16>>16<0){ce=_d;de=fe}else{$d=_d;ae=fe;break}}}de=Vd>>>$d;ce=Xd-$d|0;if((ae|0)==256){ge=ce;he=de;ie=Wd;je=0;ke=0}else{le=ce;me=de;ne=Wd;oe=0;pe=ae;break}while(1){de=ge;ce=ie;be=he;while(1){if(de>>>0>=5){qe=be;re=ce;se=de;break}if(ce>>>0>>0){te=ce+1|0;ue=d[ce>>0]|0}else{te=ce;ue=0}be=ue<>>0>=33){X=47;break c}else ce=te}ce=qe>>>5;de=se+-5|0;be=(qe&15)<>>0>31){X=50;break c}else{ge=de;he=ce;ie=re;je=fe;ke=be}}le=xe;me=we;ne=ve;oe=ye+2|0;pe=Kd}else{le=Dd;me=Cd;ne=Bd;oe=Hd+-1|0;pe=Kd}while(0);a[(c[pd>>2]|0)+(Ed<<2)+2>>0]=pe>>>4;Md=le;Nd=me;Od=ne;Pd=pe;Qd=oe;Rd=pe}else{Md=Dd;Nd=Cd;Od=Bd;Pd=Fd;Qd=Hd;Rd=Kd}while(0);be=Pd&3;fe=Pd>>>2;e:do switch(be|0){case 0:{if(!Ed){X=56;break c}else{ze=Jd;X=80}break}case 1:{if(td){X=59;break c}ze=e[(c[pd>>2]|0)+(Ed<<2)>>1]|0;X=80;break}case 2:{if(t){ce=c[(c[aa>>2]|0)+(Ed+rd<<2)>>2]|0;Ae=Md;Be=Nd;Ce=Od;De=ce&65535;Ee=ce>>>16;X=81;break e}if(!(wd&(Ed|0)!=0)){X=65;break c}Ae=Md;Be=Nd;Ce=Od;De=e[(c[pd>>2]|0)+(Ed+-1<<2)>>1]|0;Ee=0;X=81;break}default:{if((c[ga>>2]|0)==(c[la>>2]|0)){X=69;break c}else{Fe=Md;Ge=Od;He=Nd}while(1){if(Fe>>>0>=16){Ie=He;Je=Ge;Ke=Fe;break}if(Ge>>>0>>0){Le=Ge+1|0;Me=d[Ge>>0]|0}else{Le=Ge;Me=0}He=Me<>>0>=33){X=74;break c}else Ge=Le}ce=c[(c[na>>2]|0)+((Ie&1023)<<2)>>2]|0;if((ce|0)>-1){Ne=ce>>16;Oe=ce&65535}else{de=c[pa>>2]|0;_d=10;ee=ce;while(1){ce=_d+1|0;Pe=b[de+((Ie>>>_d&1)+~ee<<1)>>1]|0;Qe=Pe<<16>>16;if(Pe<<16>>16<0){_d=ce;ee=Qe}else{Ne=ce;Oe=Qe;break}}}ee=Oe+Jd|0;_d=(c[oa>>2]|0)-(c[f>>2]|0)>>3;Ae=Ke-Ne|0;Be=Ie>>>Ne;Ce=Je;De=ee-(ee>>>0<_d>>>0?0:_d)|0;Ee=0;X=81}}while(0);if((X|0)==80){X=0;_d=ze&65535;b[(c[qd>>2]|0)+(Ed<<2)>>1]=_d;Re=_d;Se=Od;Te=Nd;Ue=Md;Ve=ze;X=82}else if((X|0)==81){X=0;_d=De&65535;b[(c[qd>>2]|0)+(Ed<<2)>>1]=_d;if((be|0)!=2|qa){Re=_d;Se=Ce;Te=Be;Ue=Ae;Ve=De;X=82}else{We=_d;Xe=Ae;Ye=Be;Ze=Ce;_e=Gd;$e=De;af=Ee}}do if((X|0)==82){X=0;if(!Gd){if((c[ra>>2]|0)==(c[sa>>2]|0)){X=85;break c}else{bf=Ue;cf=Se;df=Te}while(1){if(bf>>>0>=16){ef=df;ff=cf;gf=bf;break}if(cf>>>0>>0){hf=cf+1|0;jf=d[cf>>0]|0}else{hf=cf;jf=0}df=jf<>>0>=33){X=90;break c}else cf=hf}_d=c[(c[ta>>2]|0)+((ef&1023)<<2)>>2]|0;if((_d|0)>-1){kf=_d>>16;lf=_d&65535}else{ee=c[ya>>2]|0;de=10;Qe=_d;while(1){_d=de+1|0;ce=b[ee+((ef>>>de&1)+~Qe<<1)>>1]|0;Pe=ce<<16>>16;if(ce<<16>>16<0){de=_d;Qe=Pe}else{kf=_d;lf=Pe;break}}}Qe=ef>>>kf;de=gf-kf|0;if((lf|0)==(ca|0)){if((c[ua>>2]|0)==(c[va>>2]|0)){X=97;break c}else{mf=de;nf=ff;of=Qe}while(1){if(mf>>>0>=16){pf=of;qf=nf;rf=mf;break}if(nf>>>0>>0){sf=nf+1|0;tf=d[nf>>0]|0}else{sf=nf;tf=0}of=tf<>>0>=33){X=102;break c}else nf=sf}ee=c[(c[wa>>2]|0)+((pf&1023)<<2)>>2]|0;if((ee|0)>-1){uf=ee>>16;vf=ee&65535}else{Pe=c[xa>>2]|0;_d=10;ce=ee;while(1){ee=_d+1|0;wf=b[Pe+((pf>>>_d&1)+~ce<<1)>>1]|0;xf=wf<<16>>16;if(wf<<16>>16<0){_d=ee;ce=xf}else{uf=ee;vf=xf;break}}}ce=pf>>>uf;_d=rf-uf|0;do if((vf|0)==63){Pe=_d;xf=qf;ee=ce;while(1){if(Pe>>>0>=8){yf=ee;zf=xf;Af=Pe;break}if(xf>>>0>>0){Bf=xf+1|0;Cf=d[xf>>0]|0}else{Bf=xf;Cf=0}ee=Cf<>>0>=33){X=112;break c}else xf=Bf}xf=yf>>>8;Pe=Af+-8|0;ee=yf&127;if(!(yf&128)){Df=Pe;Ef=xf;Ff=zf;Gf=ee;break}else{Hf=Pe;If=zf;Jf=xf}while(1){if(Hf>>>0>=8){Kf=Jf;Lf=If;Mf=Hf;break}if(If>>>0>>0){Nf=If+1|0;Of=d[If>>0]|0}else{Nf=If;Of=0}Jf=Of<>>0>=33){X=112;break c}else If=Nf}xf=Kf>>>8;Pe=Mf+-8|0;wf=Kf<<7&16256|ee;if(!(Kf&128)){Df=Pe;Ef=xf;Ff=Lf;Gf=wf;break}else{Pf=Pe;Qf=Lf;Rf=xf}while(1){if(Pf>>>0>=8){Sf=Rf;Tf=Qf;Uf=Pf;break}if(Qf>>>0>>0){Vf=Qf+1|0;Wf=d[Qf>>0]|0}else{Vf=Qf;Wf=0}Rf=Wf<>>0>=33){X=112;break c}else Qf=Vf}ee=Sf>>>8;xf=Uf+-8|0;Pe=Sf<<14&2080768|wf;if(!(Sf&128)){Df=xf;Ef=ee;Ff=Tf;Gf=Pe;break}else{Xf=xf;Yf=Tf;Zf=ee}while(1){if(Xf>>>0>=8){_f=Zf;$f=Yf;ag=Xf;break}if(Yf>>>0>>0){bg=Yf+1|0;cg=d[Yf>>0]|0}else{bg=Yf;cg=0}Zf=cg<>>0>=33){X=112;break c}else Yf=bg}wf=_f>>>8;ee=ag+-8|0;xf=_f<<21&266338304|Pe;if(!(_f&128)){Df=ee;Ef=wf;Ff=$f;Gf=xf;break}else{dg=ee;eg=$f;fg=wf}while(1){if(dg>>>0>=8){gg=fg;hg=eg;ig=dg;break}if(eg>>>0>>0){jg=eg+1|0;kg=d[eg>>0]|0}else{jg=eg;kg=0}fg=kg<>>0>=33){X=112;break c}else eg=jg}if(!(gg&128)){Df=ig+-8|0;Ef=gg>>>8;Ff=hg;Gf=gg<<28|xf}else{X=680;break c}}else{Df=_d;Ef=ce;Ff=qf;Gf=vf}while(0);if((Gf+3|0)>>>0>q>>>0){X=115;break c}lg=Df;mg=Ef;ng=Ff;og=Gf+2|0;pg=((c[V>>2]|0)-(c[s>>2]|0)|0)/11|0}else{lg=de;mg=Qe;ng=ff;og=0;pg=lf}}else{lg=Ue;mg=Te;ng=Se;og=Gd+-1|0;pg=((c[V>>2]|0)-(c[s>>2]|0)|0)/11|0}ce=((c[V>>2]|0)-(c[s>>2]|0)|0)/11|0;_d=(c[l>>2]|0)==0;if((pg|0)<(ce|0)){if(_d){We=Re;Xe=lg;Ye=mg;Ze=ng;_e=og;$e=Ve;af=pg;break}Pe=c[W>>2]|0;c[W>>2]=Pe+1;wf=c[I>>2]|0;c[wf+(Pe<<2)>>2]=pg;Pe=c[W>>2]|0;if((Pe|0)!=((c[w>>2]|0)-wf>>2|0)){We=Re;Xe=lg;Ye=mg;Ze=ng;_e=og;$e=Ve;af=pg;break}c[W>>2]=Pe>>>1;We=Re;Xe=lg;Ye=mg;Ze=ng;_e=og;$e=Ve;af=pg;break}if(_d){X=120;break c}_d=pg-ce|0;Pe=c[I>>2]|0;if((_d|0)>=((c[w>>2]|0)-Pe>>2|0)){X=122;break c}wf=Pe+(_d<<2)|0;ee=c[wf>>2]|0;if((pg|0)==(ce|0)){We=Re;Xe=lg;Ye=mg;Ze=ng;_e=og;$e=Ve;af=ee}else{ce=Pe+(_d>>>1<<2)|0;_d=c[ce>>2]|0;c[ce>>2]=ee;c[wf>>2]=_d;We=Re;Xe=lg;Ye=mg;Ze=ng;_e=og;$e=Ve;af=ee}}while(0);ee=c[f>>2]|0;if($e>>>0>=(c[oa>>2]|0)-ee>>3>>>0){X=131;break c}_d=c[s>>2]|0;if(af>>>0>=(((c[V>>2]|0)-_d|0)/11|0)>>>0){X=131;break c}if(t)c[(c[aa>>2]|0)+(Ed+rd<<2)>>2]=af<<16|$e;wf=c[123158]|0;f:do if(t&(be|0)==2&(za&(wf&1|0)!=0)){ce=g+(Z(Ed+sd|0,n)|0)|0;c[ce>>2]=-1;c[ce+4>>2]=-1;qg=Ad;rg=zd;sg=yd;tg=xd}else{ce=ee+($e<<3)|0;Pe=_d+(af*11|0)|0;do switch(m|0){case 0:{ug=Z(Ed+sd|0,n)|0;vg=a[ce>>0]|0;wg=a[ce+1>>0]|0;xg=d[ce+2>>0]|0;yg=(wg&255)<31?(wg&255)<<5:992;wg=(xg>>>0<31?xg:31)|yg;xg=(yg|((vg&255)<31?(vg&255)<<10:31744))>>>7&248|xd&7;vg=wg>>>2&248|yd&7;yg=wg<<3|zd&7;wg=a[ee+($e<<3)+4>>0]|0;zg=wg&255;if((wg&255)>=8){X=139;break c}wg=zg<<5|Ad&3|zg<<2;c[g+ug>>2]=xg|wg<<24|yg<<16&16711680|vg<<8;zg=a[_d+(af*11|0)+5>>0]|0;Ag=a[_d+(af*11|0)+6>>0]|0;Bg=a[_d+(af*11|0)+7>>0]|0;a[g+(ug+4)>>0]=a[_d+(af*11|0)+4>>0]|0;a[g+(ug+5)>>0]=zg;a[g+(ug+6)>>0]=Ag;a[g+(ug+7)>>0]=Bg;qg=wg&255;rg=yg&255;sg=vg&255;tg=xg&255;break f;break}case 1:{xg=Z(Ed+sd|0,n)|0;vg=g+xg|0;hb(vg,ce,Pe,p);if(!(wf&6)){qg=Ad;rg=zd;sg=yd;tg=xd;break f}yg=c[123158]|0;if(yg&2){a[vg>>0]=-1;a[g+(xg+1)>>0]=-1;a[g+(xg+2)>>0]=0;a[g+(xg+3)>>0]=0;qg=Ad;rg=zd;sg=yd;tg=xd;break f}if(!(yg&4)){qg=Ad;rg=zd;sg=yd;tg=xd;break f}a[g+(xg+4)>>0]=0;a[g+(xg+5)>>0]=0;a[g+(xg+6)>>0]=85;a[g+(xg+7)>>0]=85;qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 2:{xg=Z(Ed+sd|0,n)|0;yg=g+xg|0;vg=a[_d+(af*11|0)+8>>0]|0;wg=vg&255;Bg=a[_d+(af*11|0)+9>>0]|0;ug=Bg&255;Ag=d[ee+($e<<3)+4>>0]|0;g:do if(vg<<24>>24==Bg<<24>>24){if((vg&255)>=4){X=147;break c}zg=d[ce>>0]|0;Cg=(zg<<3|zg>>>2)+(c[509600+(Ag<<4)+(wg<<2)>>2]|0)|0;if(Cg>>>0>255)if((Cg|0)<0){Dg=0;X=150}else Eg=255;else{Dg=Cg;X=150}if((X|0)==150){X=0;Eg=Dg}Cg=Eg&255;a[yg>>0]=Cg;a[g+(xg+1)>>0]=Cg;Cg=g+(xg+2)|0;a[Cg>>0]=0;a[Cg+1>>0]=0;a[Cg+2>>0]=0;a[Cg+3>>0]=0;a[Cg+4>>0]=0;a[Cg+5>>0]=0}else{if((a[_d+(af*11|0)+10>>0]|0)==2){ib(F,ce,Ag);Cg=a[F+(ug<<2)>>0]|0;a[yg>>0]=a[F+(wg<<2)>>0]|0;a[g+(xg+1)>>0]=Cg;Cg=0;while(1){zg=_d+(af*11|0)+Cg|0;Fg=Cg<<2;Gg=0;do{if((Gg|Cg)>>>0>=4){X=157;break c}Hg=(Gg+Fg|0)*3|0;Ig=Hg>>>3;Jg=Hg&7;Kg=yg+2+Ig|0;Lg=d[Kg>>0]|0;Mg=Hg>>>0<40;if(Mg)Ng=d[Ig+1+(yg+2)>>0]<<8|Lg;else Ng=Lg;Lg=Ng&~(7<>0]|0)>>>(Gg<<1)&3|0)==(ug|0)&1)<>0]=Lg;if(Mg)a[Ig+1+(yg+2)>>0]=Lg>>>8;Gg=Gg+1|0}while(Gg>>>0<4);Cg=Cg+1|0;if(Cg>>>0>=4)break g}}h:do switch(vg<<24>>24){case 0:{if(Bg<<24>>24==3){Og=0;break h}if(Bg<<24>>24==2)Og=2;else X=178;break}case 1:{if(Bg<<24>>24==3){Og=1;break h}if(Bg<<24>>24==2)Og=3;else X=178;break}default:X=178}while(0);if((X|0)==178){X=0;Og=4}Cg=Og>>>0>3?0:Og;Gg=(d[ce>>0]|0)+(Ag<<5)|0;a[yg>>0]=a[695072+(Gg<<4)+(Cg<<2)>>0]|0;a[g+(xg+1)>>0]=a[695072+(Gg<<4)+(Cg<<2)+1>>0]|0;zg=695072+(Gg<<4)+(Cg<<2)+2|0;Cg=0;do{Gg=_d+(af*11|0)+Cg|0;Fg=Cg<<2;Lg=0;do{if((Lg|Cg)>>>0>=4){X=168;break c}Ig=(Lg+Fg|0)*3|0;Mg=Ig>>>3;Kg=Ig&7;Jg=yg+2+Mg|0;Hg=d[Jg>>0]|0;Pg=Ig>>>0<40;if(Pg)Qg=d[Mg+1+(yg+2)>>0]<<8|Hg;else Qg=Hg;Hg=Qg&~(7<>1]|0)>>>(((d[Gg>>0]|0)>>>(Lg<<1)&3)*3|0)&7)<>0]=Hg;if(Pg)a[Mg+1+(yg+2)>>0]=Hg>>>8;Lg=Lg+1|0}while(Lg>>>0<4);Cg=Cg+1|0}while(Cg>>>0<4)}while(0);qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 3:{yg=a[ce>>0]|0;xg=a[ce+1>>0]|0;Ag=d[ce+2>>0]|0;Bg=(xg&255)<31?(xg&255)<<5:992;xg=(Ag>>>0<31?Ag:31)|Bg;Ag=(Bg|((yg&255)<31?(yg&255)<<10:31744))>>>7&248|xd&7;yg=Ag&255;Bg=xg>>>2&248|yd&7;vg=Bg&255;ug=xg<<3|zd&7;xg=ug&255;wg=ee+($e<<3)+4|0;xf=a[wg>>0]|0;Cg=xf&255;if((xf&255)>=8){X=181;break c}xf=Cg<<5|Ad&3|Cg<<2;Cg=a[_d+(af*11|0)+4>>0]|0;zg=a[_d+(af*11|0)+5>>0]|0;Lg=a[_d+(af*11|0)+6>>0]|0;Gg=Ed+rd|0;Fg=Sc(d[_d+(af*11|0)+7>>0]|0,0,56)|0;Hg=B;Mg=Sc(Lg&255|0,0,48)|0;Lg=B;Pg=Sc(zg&255|0,0,40)|0;zg=fa+(Gg<<3)|0;c[zg>>2]=Ag|xf<<24|ug<<16&16711680|Bg<<8|Pg|Mg|Fg;c[zg+4>>2]=Cg&255|B|Lg|Hg;Hg=xf&255;xf=d[wg>>0]|0;wg=d[_d+(af*11|0)+9>>0]|0;Lg=c[ce>>2]|0;Cg=Lg&255;zg=Lg>>>5;Fg=Lg>>>10&63;Mg=Lg>>>13;Pg=Lg>>>18&63;Lg=Cg<<3&248|Cg>>>2;Cg=c[509600+(xf<<4)+(d[_d+(af*11|0)+8>>0]<<2)>>2]|0;Bg=Lg+Cg|0;if(Bg>>>0>255)if((Bg|0)<0){Rg=0;X=184}else Sg=255;else{Rg=Bg;X=184}if((X|0)==184){X=0;Sg=Rg}Bg=zg&248|Fg;Fg=Bg+Cg|0;if(Fg>>>0>255)if((Fg|0)<0){Tg=0;X=187}else Ug=255;else{Tg=Fg;X=187}if((X|0)==187){X=0;Ug=Tg}Fg=Mg&248|Pg;Pg=Fg+Cg|0;if(Pg>>>0>255)if((Pg|0)<0){Vg=0;X=190}else Wg=255;else{Vg=Pg;X=190}if((X|0)==190){X=0;Wg=Vg}Pg=Sg&255;Cg=Ug&255;Mg=Wg&255;zg=c[509600+(xf<<4)+(wg<<2)>>2]|0;wg=zg+Lg|0;if(wg>>>0>255)if((wg|0)<0){Xg=0;X=193}else Yg=255;else{Xg=wg;X=193}if((X|0)==193){X=0;Yg=Xg}wg=zg+Bg|0;if(wg>>>0>255)if((wg|0)<0){Zg=0;X=196}else _g=255;else{Zg=wg;X=196}if((X|0)==196){X=0;_g=Zg}wg=zg+Fg|0;if(wg>>>0>255)if((wg|0)<0){$g=0;X=199}else ah=255;else{$g=wg;X=199}if((X|0)==199){X=0;ah=$g}if((Pg&255)>(Yg&255)){X=201;break c}if((Cg&255)>(_g&255)){X=203;break c}if((Mg&255)>(ah&255)){X=205;break c}Mg=d[901274+(Wg&255)>>0]<<1;if(Mg>>>0>=32){X=207;break c}Cg=Mg|d[901018+(Ug&255)>>0]<<5|d[901018+(Sg&255)>>0]<<10|32768;if(Cg>>>0>=65536){X=209;break c}Mg=d[901605+(ah&255)>>0]|d[901605+(_g&255)>>0]<<5|d[901605+(Yg&255)>>0]<<10|32768;if(Mg>>>0>=65536){X=211;break c}c[ea+(Gg<<2)>>2]=Mg<<16|Cg&65534;qg=Hg;rg=xg;sg=vg;tg=yg;break f;break}case 4:{if(Aa){X=214;break c}yg=a[ce>>0]|0;vg=a[ce+1>>0]|0;xg=d[ce+2>>0]|0;Hg=(vg&255)<31?(vg&255)<<5:992;vg=(xg>>>0<31?xg:31)|Hg;xg=(Hg|((yg&255)<31?(yg&255)<<10:31744))>>>7&248|xd&7;yg=xg&255;Hg=vg>>>2&248|yd&7;Cg=Hg&255;Mg=vg<<3|zd&7;vg=Mg&255;Gg=ee+($e<<3)+4|0;Pg=a[Gg>>0]|0;wg=Pg&255;if((Pg&255)>=8){X=216;break c}Pg=wg<<5|Ad&3|wg<<2;wg=a[Pe>>0]|0;Fg=a[_d+(af*11|0)+1>>0]|0;zg=a[_d+(af*11|0)+2>>0]|0;Bg=Ed+rd|0;Lg=Sc(d[_d+(af*11|0)+3>>0]|0,0,56)|0;xf=B;ug=Sc(zg&255|0,0,48)|0;zg=B;Ag=Sc(Fg&255|0,0,40)|0;Fg=fa+(Bg<<3)|0;c[Fg>>2]=xg|Pg<<24|Mg<<16&16711680|Hg<<8|Ag|ug|Lg;c[Fg+4>>2]=wg&255|B|zg|xf;xf=Pg&255;Pg=d[Gg>>0]|0;Gg=d[_d+(af*11|0)+9>>0]|0;zg=c[ce>>2]|0;wg=zg&255;Fg=zg>>>5;Lg=zg>>>10&63;ug=zg>>>13;Ag=zg>>>18&63;zg=wg<<3&248|wg>>>2;wg=c[509600+(Pg<<4)+(d[_d+(af*11|0)+8>>0]<<2)>>2]|0;Hg=zg+wg|0;if(Hg>>>0>255)if((Hg|0)<0){bh=0;X=219}else ch=255;else{bh=Hg;X=219}if((X|0)==219){X=0;ch=bh}Hg=Fg&248|Lg;Lg=Hg+wg|0;if(Lg>>>0>255)if((Lg|0)<0){dh=0;X=222}else eh=255;else{dh=Lg;X=222}if((X|0)==222){X=0;eh=dh}Lg=ug&248|Ag;Ag=Lg+wg|0;if(Ag>>>0>255)if((Ag|0)<0){fh=0;X=225}else gh=255;else{fh=Ag;X=225}if((X|0)==225){X=0;gh=fh}Ag=ch&255;wg=eh&255;ug=gh&255;Fg=c[509600+(Pg<<4)+(Gg<<2)>>2]|0;Gg=Fg+zg|0;if(Gg>>>0>255)if((Gg|0)<0){hh=0;X=228}else ih=255;else{hh=Gg;X=228}if((X|0)==228){X=0;ih=hh}Gg=Fg+Hg|0;if(Gg>>>0>255)if((Gg|0)<0){jh=0;X=231}else kh=255;else{jh=Gg;X=231}if((X|0)==231){X=0;kh=jh}Gg=Fg+Lg|0;if(Gg>>>0>255)if((Gg|0)<0){lh=0;X=234}else mh=255;else{lh=Gg;X=234}if((X|0)==234){X=0;mh=lh}if((Ag&255)>(ih&255)){X=236;break c}if((wg&255)>(kh&255)){X=238;break c}if((ug&255)>(mh&255)){X=240;break c}ug=Bg<<2;wg=e[v+ug>>1]|0;Ag=e[v+(ug|2)>>1]|0;ug=d[ee+(wg<<3)+4>>0]|0;Gg=d[_d+(Ag*11|0)+9>>0]|0;Lg=d[ee+(wg<<3)+1>>0]|0;wg=Lg<<3&248|Lg>>>2;Lg=wg+(c[509600+(ug<<4)+(d[_d+(Ag*11|0)+8>>0]<<2)>>2]|0)|0;if(Lg>>>0>255)if((Lg|0)<0){nh=0;X=243}else oh=255;else{nh=Lg;X=243}if((X|0)==243){X=0;oh=nh}Lg=(c[509600+(ug<<4)+(Gg<<2)>>2]|0)+wg|0;if(Lg>>>0>255)if((Lg|0)<0){ph=0;X=246}else qh=255;else{ph=Lg;X=246}if((X|0)==246){X=0;qh=ph}if(oh>>>0>qh>>>0){X=248;break c}Lg=qh&255;wg=a[902117+(oh&255)>>0]|0;Gg=ch&255;if((oh&255)<<24>>24==-1){ug=a[901018+Gg>>0]|0;Ag=a[901018+(eh&255)>>0]|0;if(((Ag|ug)&255)>=32){X=251;break c}Fg=(ug&255)<<10|(Ag&255)<<5|d[901274+(gh&255)>>0]<<1|32768;if(Fg>>>0<65536)rh=Fg;else{X=253;break c}}else{Fg=a[901274+Gg>>0]|0;Gg=a[901274+(eh&255)>>0]|0;Ag=a[902373+(gh&255)>>0]|0;if(!(((Gg|Fg)&255)<16&((Ag|wg)&255)<8)){X=255;break c}ug=(Fg&255)<<8|(wg&255)<<12|(Gg&255)<<4|(Ag&255)<<1;if(ug>>>0<65536)rh=ug;else{X=257;break c}}ug=qh&255;Ag=a[902766+ug>>0]|0;Gg=ih&255;if((ug+-239|0)>>>0<17){ug=a[901605+Gg>>0]|0;wg=a[901605+(kh&255)>>0]|0;Fg=a[901605+(mh&255)>>0]|0;if(((wg|ug|Fg)&255)>=32){X=260;break c}Hg=(ug&255)<<10|(wg&255)<<5|Fg&255|32768;if(Hg>>>0>=65536){X=262;break c}sh=Hg<<16|rh&65535}else{Hg=a[901861+Gg>>0]|0;Gg=a[901861+(kh&255)>>0]|0;Fg=a[901861+(mh&255)>>0]|0;if(!((Lg&255)<239?((Gg|Hg|Fg)&255)<16:0)){X=265;break c}Lg=(Hg&255)<<8|(Ag&255)<<12|(Gg&255)<<4|Fg&255;if(Lg>>>0>=65536){X=267;break c}sh=Lg<<16|rh&65535}c[ea+(Bg<<2)>>2]=sh;qg=xf;rg=vg;sg=Cg;tg=yg;break f;break}case 5:{yg=Z(Ed+sd|0,n)|0;Cg=g+yg|0;vg=d[_d+(af*11|0)+8>>0]|0;xf=d[_d+(af*11|0)+9>>0]|0;Bg=a[ce>>0]|0;Lg=a[ce+1>>0]|0;Fg=a[ce+2>>0]|0;Gg=d[ee+($e<<3)+4>>0]|0;if((d[_d+(af*11|0)+10>>0]|0)<3){Ag=Cg;Hg=c[Ag+4>>2]&-2147352577|2147352576;wg=Cg;c[wg>>2]=c[Ag>>2]&-128|64;c[wg+4>>2]=Hg;a[y>>0]=Bg;a[Ba>>0]=Lg;a[Ca>>0]=Fg;a[Da>>0]=-1;ib(F,y,Gg);Hg=c[F+(vg<<2)>>2]|0;wg=((Hg>>>8&1)+(Hg&1)+(Hg>>>16&1)|0)>>>0>1;Ag=c[F+(xf<<2)>>2]|0;ug=((Ag>>>8&1)+(Ag&1)+(Ag>>>16&1)|0)>>>0>1;zg=Hg>>>1&127;Pg=Cg;Mg=c[Pg>>2]|0;xg=c[Pg+4>>2]|0;Pg=Sc(zg|0,0,7)|0;Jg=B;Kg=Hg>>>9&127;Ig=Sc(Kg|0,0,21)|0;th=B;uh=Hg>>>17&127;Hg=Sc(uh|0,0,35)|0;vh=B;wh=Sc(wg&1|0,0,63)|0;xh=B;yh=Ag>>>1&127;zh=Sc(yh|0,0,14)|0;Ah=B;Bh=Ag>>>9&127;Ch=Sc(Bh|0,0,28)|0;Dh=B;Eh=Ag>>>17&127;Ag=Sc(Eh|0,0,42)|0;Fh=Pg|Mg&127|Ig|Hg|zh|Ch|Ag|wh;wh=Jg|xg&2147352576|th|vh|Ah|Dh|B|xh;xh=Cg;c[xh>>2]=Fh;c[xh+4>>2]=wh;xh=Sc(yh|0,0,7)|0;yh=B;Dh=Sc(Bh|0,0,21)|0;Bh=B;Ah=Sc(Eh|0,0,35)|0;Eh=B;vh=Sc(zg|0,0,14)|0;zg=B;th=Sc(Kg|0,0,28)|0;Kg=B;xg=Sc(uh|0,0,42)|0;uh=th|vh|xg|xh|Dh|Ah;Ah=Kg|zg|B|yh|Bh|Eh;Eh=Fh;Fh=wh;wh=ug&1;Bh=ug&1;ug=wg&1;wg=0;yh=1;zg=0;Kg=0;while(1){Dh=_d+(af*11|0)+Kg|0;xh=a[Dh>>0]|0;xg=(xh&3|0)==(vg|0)?zg:zg^15;do if(!Kg){if(!(xg&8)){Gh=Bh;Hh=wg;Ih=xh;Jh=Eh;Kh=Fh;Lh=ug;Mh=wh;Nh=3;Oh=xg;Ph=zg;break}vh=Sc(wh|0,0,63)|0;th=uh|Eh&127|vh;vh=Ah|Fh&2147352576|B;Jg=Cg;c[Jg>>2]=th;c[Jg+4>>2]=vh;Gh=ug|Bh&-2;Hh=wg;Ih=a[Dh>>0]|0;Jh=th;Kh=vh;Lh=wh;Mh=ug;Nh=3;Oh=0;Ph=15}else{Gh=Bh;Hh=wg;Ih=xh;Jh=Eh;Kh=Fh;Lh=ug;Mh=wh;Nh=4;Oh=xg;Ph=zg}while(0);xg=Sc(Oh|0,0,yh|0)|0;xh=B|Hh;Dh=Nh+yh|0;vh=Ih&255;th=Ph^15;Jg=Sc(((vh>>>2&3|0)==(vg|0)?Ph:th)|0,0,Dh|0)|0;Ag=B;Ch=Sc(((vh>>>4&3|0)==(vg|0)?Ph:th)|0,0,Dh+4|0)|0;zh=B;Hg=Sc(((vh>>>6|0)==(vg|0)?Ph:th)|0,0,Dh+8|0)|0;th=xg|Gh|Hg|Jg|Ch;Ch=xh|B|Ag|zh;Kg=Kg+1|0;if((Kg|0)==4){Qh=Mh;Rh=th;Sh=Ch;break}else{Eh=Jh;Fh=Kh;wh=Mh;Bh=th;ug=Lh;wg=Ch;yh=Dh+12|0;zg=Ph}}zg=g+(yg+8)|0;c[zg>>2]=Rh;c[zg+4>>2]=Sh;if((Rh&1|0)!=(Qh|0)){X=276;break c}}else{zg=Gg<<5;yh=c[491608+(zg+(Bg&255)<<2)>>2]|0;wg=(c[509088+(vg<<4)+(xf<<2)>>2]|0)*48|0;ug=c[491608+(zg+(Lg&255)<<2)>>2]|0;Bh=c[491608+(zg+(Fg&255)<<2)>>2]|0;zg=(c[ug+(wg<<2)>>2]|0)+(c[yh+(wg<<2)>>2]|0)+(c[Bh+(wg<<2)>>2]|0)<<14;wh=wg|1;Fh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|1;wh=wg|2;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|2;wh=Eh>>>0>>0?Eh:zg;zg=wg|3;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|3;zg=Eh>>>0>>0?Eh:Fh;Fh=wg|4;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|4;Fh=Eh>>>0>>0?Eh:wh;wh=wg|5;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|5;wh=Eh>>>0>>0?Eh:zg;zg=wg|6;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|6;zg=Eh>>>0>>0?Eh:Fh;Fh=wg|7;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|7;Fh=Eh>>>0>>0?Eh:wh;wh=wg|8;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|8;wh=Eh>>>0>>0?Eh:zg;zg=wg|9;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|9;zg=Eh>>>0>>0?Eh:Fh;Fh=wg|10;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|10;Fh=Eh>>>0>>0?Eh:wh;wh=wg|11;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|11;wh=Eh>>>0>>0?Eh:zg;zg=wg|12;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|12;zg=Eh>>>0>>0?Eh:Fh;Fh=wg|13;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|13;Fh=Eh>>>0>>0?Eh:wh;wh=wg|14;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|14;wh=Eh>>>0>>0?Eh:zg;zg=wg|15;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|15;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+16|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|16;Fh=Eh>>>0>>0?Eh:wh;wh=wg+17|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|17;wh=Eh>>>0>>0?Eh:zg;zg=wg+18|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|18;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+19|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|19;Fh=Eh>>>0>>0?Eh:wh;wh=wg+20|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|20;wh=Eh>>>0>>0?Eh:zg;zg=wg+21|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|21;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+22|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|22;Fh=Eh>>>0>>0?Eh:wh;wh=wg+23|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|23;wh=Eh>>>0>>0?Eh:zg;zg=wg+24|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|24;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+25|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|25;Fh=Eh>>>0>>0?Eh:wh;wh=wg+26|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|26;wh=Eh>>>0>>0?Eh:zg;zg=wg+27|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|27;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+28|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|28;Fh=Eh>>>0>>0?Eh:wh;wh=wg+29|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|29;wh=Eh>>>0>>0?Eh:zg;zg=wg+30|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|30;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+31|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|31;Fh=Eh>>>0>>0?Eh:wh;wh=wg+32|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|32;wh=Eh>>>0>>0?Eh:zg;zg=wg+33|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|33;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+34|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|34;Fh=Eh>>>0>>0?Eh:wh;wh=wg+35|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|35;wh=Eh>>>0>>0?Eh:zg;zg=wg+36|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|36;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+37|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|37;Fh=Eh>>>0>>0?Eh:wh;wh=wg+38|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|38;wh=Eh>>>0>>0?Eh:zg;zg=wg+39|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|39;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+40|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|40;Fh=Eh>>>0>>0?Eh:wh;wh=wg+41|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|41;wh=Eh>>>0>>0?Eh:zg;zg=wg+42|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|42;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+43|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|43;Fh=Eh>>>0>>0?Eh:wh;wh=wg+44|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|44;wh=Eh>>>0>>0?Eh:zg;zg=wg+45|0;Eh=(c[ug+(zg<<2)>>2]|0)+(c[yh+(zg<<2)>>2]|0)+(c[Bh+(zg<<2)>>2]|0)<<14|45;zg=Eh>>>0>>0?Eh:Fh;Fh=wg+46|0;Eh=(c[ug+(Fh<<2)>>2]|0)+(c[yh+(Fh<<2)>>2]|0)+(c[Bh+(Fh<<2)>>2]|0)<<14|46;Fh=Eh>>>0>>0?Eh:wh;wh=wg+47|0;Eh=(c[ug+(wh<<2)>>2]|0)+(c[yh+(wh<<2)>>2]|0)+(c[Bh+(wh<<2)>>2]|0)<<14|47;wh=Eh>>>0>>0?Eh:zg;zg=(Fh>>>0>>0?Fh:wh)&255;wh=Cg;Fh=c[wh>>2]&-128|64;Eh=c[wh+4>>2]&-2147352577|2147352576;wh=Cg;c[wh>>2]=Fh;c[wh+4>>2]=Eh;wh=zg+wg|0;wg=yh+(wh<<2)|0;yh=(c[wg>>2]|0)>>>18&127;if(!(a[(d[Pe>>0]&3)+(895279+(zg<<2))>>0]&8)){Kg=Sc(yh|0,0,7)|0;Ah=Kg|Fh&-16320;Kg=B|Eh;uh=Cg;c[uh>>2]=Ah;c[uh+4>>2]=Kg;uh=ug+(wh<<2)|0;Dh=Sc((c[uh>>2]|0)>>>18|0,0,21)|0;Ch=Dh&266338304|Ah&-266338368;Ah=Cg;c[Ah>>2]=Ch;c[Ah+4>>2]=Kg;Ah=Bh+(wh<<2)|0;Sc((c[Ah>>2]|0)>>>18|0,0,35)|0;Dh=Kg&-1017|B&1016;Kg=Cg;c[Kg>>2]=Ch;c[Kg+4>>2]=Dh;Kg=Sc((c[wg>>2]|0)>>>25|0,0,14)|0;th=Ch&-2080832|Kg;Kg=Dh|B;Dh=Cg;c[Dh>>2]=th;c[Dh+4>>2]=Kg;Dh=Sc((c[uh>>2]|0)>>>25|0,0,28)|0;uh=th&268435392|Dh;Dh=Kg&-8|B;Kg=Cg;c[Kg>>2]=uh;c[Kg+4>>2]=Dh;Kg=Sc((c[Ah>>2]|0)>>>25|0,0,42)|0;Ah=Cg;c[Ah>>2]=uh&-64|Kg;c[Ah+4>>2]=Dh&2147353599|B;Dh=g+(yg+8)|0;Ah=Dh;Kg=c[Ah+4>>2]|0;uh=Dh;c[uh>>2]=c[Ah>>2]|1;c[uh+4>>2]=Kg;Th=Dh;Uh=1;Vh=0;Wh=895279}else{Dh=Sc(yh|0,0,14)|0;yh=Dh|Fh&-2080832;Fh=B|Eh;Eh=Cg;c[Eh>>2]=yh;c[Eh+4>>2]=Fh;Eh=ug+(wh<<2)|0;ug=Sc((c[Eh>>2]|0)>>>18|0,0,28)|0;Dh=ug&-268435456|yh&268435392;yh=B&7|Fh&-8;Fh=Cg;c[Fh>>2]=Dh;c[Fh+4>>2]=yh;Fh=Bh+(wh<<2)|0;Sc((c[Fh>>2]|0)>>>18|0,0,42)|0;wh=yh&-130049|B&130048;yh=Cg;c[yh>>2]=Dh;c[yh+4>>2]=wh;yh=Sc((c[wg>>2]|0)>>>25|0,0,7)|0;wg=Dh&-16320|yh;yh=wh|B;wh=Cg;c[wh>>2]=wg;c[wh+4>>2]=yh;wh=Sc((c[Eh>>2]|0)>>>25|0,0,21)|0;Eh=wg&-266338368|wh;wh=yh|B;yh=Cg;c[yh>>2]=Eh;c[yh+4>>2]=wh;yh=Sc((c[Fh>>2]|0)>>>25|0,0,35)|0;Fh=Cg;c[Fh>>2]=yh|Eh&-64;c[Fh+4>>2]=B|wh&2147482631|-2147483648;wh=g+(yg+8)|0;Fh=wh;Eh=c[Fh+4>>2]|0;yh=wh;c[yh>>2]=c[Fh>>2]&-2;c[yh+4>>2]=Eh;Th=wh;Uh=0;Vh=0;Wh=895471}wh=d[Pe>>0]|0;Eh=Sc(d[(wh&3)+(Wh+(zg<<2))>>0]|0,0,1)|0;yh=B;Fh=d[_d+(af*11|0)+1>>0]|0;wg=Sc(d[(Fh&3)+(Wh+(zg<<2))>>0]|0,0,16)|0;Dh=B;Bh=d[_d+(af*11|0)+2>>0]|0;ug=d[(Bh&3)+(Wh+(zg<<2))>>0]|0;Kg=d[_d+(af*11|0)+3>>0]|0;uh=Sc(d[(Kg&3)+(Wh+(zg<<2))>>0]|0,0,48)|0;Ah=B;th=Sc(d[(wh>>>2&3)+(Wh+(zg<<2))>>0]|0,0,4)|0;Ch=B;zh=Sc(d[(Fh>>>2&3)+(Wh+(zg<<2))>>0]|0,0,20)|0;Ag=B;xh=Sc(d[(Bh>>>2&3)+(Wh+(zg<<2))>>0]|0,0,36)|0;Jg=B;Hg=Sc(d[(Kg>>>2&3)+(Wh+(zg<<2))>>0]|0,0,52)|0;xg=B;vh=Sc(d[(wh>>>4&3)+(Wh+(zg<<2))>>0]|0,0,8)|0;Ig=B;Mg=Sc(d[(Fh>>>4&3)+(Wh+(zg<<2))>>0]|0,0,24)|0;Pg=B;Xh=Sc(d[(Bh>>>4&3)+(Wh+(zg<<2))>>0]|0,0,40)|0;Yh=B;Zh=Sc(d[(Kg>>>4&3)+(Wh+(zg<<2))>>0]|0,0,56)|0;_h=B;$h=Sc(d[(wh>>>6)+(Wh+(zg<<2))>>0]|0,0,12)|0;wh=B;ai=Sc(d[(Fh>>>6)+(Wh+(zg<<2))>>0]|0,0,28)|0;Fh=B;bi=Sc(d[(Bh>>>6)+(Wh+(zg<<2))>>0]|0,0,44)|0;Bh=B;ci=Sc(d[(Kg>>>6)+(Wh+(zg<<2))>>0]|0,0,60)|0;zg=Th;c[zg>>2]=Eh|Uh|wg|uh|th|zh|xh|Hg|vh|Mg|Xh|Zh|$h|ai|bi|ci;c[zg+4>>2]=yh|Vh|Dh|ug|Ah|Ch|Ag|Jg|xg|Ig|Pg|Yh|_h|wh|Fh|Bh|B}qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 6:{Bh=Z(Ed+sd|0,n)|0;Fh=g+Bh|0;wh=Fh;c[wh>>2]=32;c[wh+4>>2]=-262144;wh=g+(Bh+8)|0;c[wh>>2]=3;c[wh+4>>2]=0;wh=a[_d+(af*11|0)+8>>0]|0;_h=wh&255;Yh=d[_d+(af*11|0)+9>>0]|0;Pg=a[ce>>0]|0;Ig=a[ce+1>>0]|0;xg=a[ce+2>>0]|0;Jg=d[ee+($e<<3)+4>>0]|0;switch(a[_d+(af*11|0)+10>>0]|0){case 1:{if((wh&255)>=4){X=285;break c}wh=Pg&255;Ag=Ig&255;Ch=Ag<<3|Ag>>>2;Ag=xg&255;Ah=Ag<<3|Ag>>>2;Ag=c[509600+(Jg<<4)+(_h<<2)>>2]|0;ug=Ag+(wh<<3|wh>>>2)|0;if(ug>>>0>255)if((ug|0)<0){di=0;X=288}else ei=255;else{di=ug;X=288}if((X|0)==288){X=0;ei=di}ug=Ag+Ch|0;if(ug>>>0>255)if((ug|0)<0){fi=0;X=291}else gi=255;else{fi=ug;X=291}if((X|0)==291){X=0;gi=fi}ug=Ag+Ah|0;if(ug>>>0>255)if((ug|0)<0){hi=0;X=294}else ii=255;else{hi=ug;X=294}if((X|0)==294){X=0;ii=hi}ug=Sc(d[903074+(ei<<1)+1>>0]|0,0,8)|0;Ah=Sc(d[903074+(gi<<1)+1>>0]|0,0,22)|0;Sc(d[903074+(ii<<1)+1>>0]|0,0,36)|0;Ag=B&2032;Ch=Sc(d[903074+(ei<<1)>>0]|0,0,15)|0;wh=Sc(d[903074+(gi<<1)>>0]|0,0,29)|0;Dh=B&15;yh=Fh;c[yh>>2]=Sc(d[903074+(ii<<1)>>0]|0,0,43)|0|(ug&32512|Ah&532676608|Ch&4161536|wh&-536870912)|32;c[yh+4>>2]=Ag|Dh|B|-262144;Dh=66;Ag=31;yh=715827883;wh=2147483647;while(1){Ch=Dh&7;Ah=8-Ch|0;ug=Ah>>>0>>0?Ah:Ag;Ah=g+((Dh>>>3)+Bh)|0;a[Ah>>0]=d[Ah>>0]&(wh<>>ug;wh=wh>>>ug}}break}case 2:{a[y>>0]=Pg;a[Ea>>0]=Ig;a[Fa>>0]=xg;a[Ga>>0]=-1;ib(F,y,Jg);wh=c[F+(_h<<2)>>2]|0;yh=wh>>>9&127;Ag=wh>>>17&127;Dh=c[F+(Yh<<2)>>2]|0;yg=Dh>>>9&127;Cg=Dh>>>17&127;Fg=wh>>>1&127;wh=Fh;Lg=c[wh>>2]|0;xf=c[wh+4>>2]|0;wh=Sc(Fg|0,0,8)|0;vg=B;Bg=Sc(yh|0,0,22)|0;Gg=B;ug=Sc(Ag|0,0,36)|0;Ch=B;Ah=Dh>>>1&127;Dh=Sc(Ah|0,0,15)|0;zg=B;ci=Sc(yg|0,0,29)|0;bi=B;ai=Sc(Cg|0,0,43)|0;$h=wh|Lg&255|Bg|ug|Dh|ci|ai;ai=vg|xf&-262144|Gg|Ch|zg|bi|B;bi=Fh;c[bi>>2]=$h;c[bi+4>>2]=ai;bi=Sc(Ah|0,0,8)|0;Ah=B;zg=Sc(yg|0,0,22)|0;yg=B;Ch=Sc(Cg|0,0,36)|0;Cg=B;Gg=Sc(Fg|0,0,15)|0;Fg=B;xf=Sc(yh|0,0,29)|0;yh=B;vg=Sc(Ag|0,0,43)|0;Ag=xf|Gg|vg|bi|zg|Ch;Ch=yh|Fg|B|Ah|yg|Cg;Cg=$h;$h=ai;ai=0;yg=0;Ah=0;Fg=0;while(1){yh=_d+(af*11|0)+Fg|0;zg=a[yh>>0]|0;bi=(zg&3|0)==(_h|0)?Ah:Ah^3;do if(!Fg){if(!(bi&2)){ji=zg;ki=Cg;li=$h;mi=1;ni=bi;oi=Ah;break}vg=Ag|Cg&255;Gg=Ch|$h&-262144;xf=Fh;c[xf>>2]=vg;c[xf+4>>2]=Gg;ji=a[yh>>0]|0;ki=vg;li=Gg;mi=1;ni=0;oi=3}else{ji=zg;ki=Cg;li=$h;mi=2;ni=bi;oi=Ah}while(0);bi=mi+ai|0;zg=ji&255;yh=oi^3;Gg=ni<>>6|0)==(_h|0)?oi:yh)<>>2&3|0)==(_h|0)?oi:yh)<>>4&3|0)==(_h|0)?oi:yh)<-1){qi=66;ri=31;si=pi;ti=2147483647}else{X=302;break c}while(1){Ah=qi&7;yg=8-Ah|0;ai=yg>>>0>>0?yg:ri;yg=g+((qi>>>3)+Bh)|0;a[yg>>0]=d[yg>>0]&(ti<>>ai;ti=ti>>>ai}}break}default:{ai=Jg<<5;Ah=(c[509152+(_h<<4)+(Yh<<2)>>2]|0)*10|0;yg=Ah+((ai+(Pg&255)|0)*60|0)|0;$h=Ah+((ai+(Ig&255)|0)*60|0)|0;Cg=Ah+((ai+(xg&255)|0)*60|0)|0;ai=(e[699168+($h<<2)+2>>1]|0)+(e[699168+(yg<<2)+2>>1]|0)+(e[699168+(Cg<<2)+2>>1]|0)|0;Ah=(e[699168+(($h|1)<<2)+2>>1]|0)+(e[699168+((yg|1)<<2)+2>>1]|0)+(e[699168+((Cg|1)<<2)+2>>1]|0)|0;Fg=Ah>>>0>>0;Ch=Fg?Ah:ai;ai=(e[699168+($h+2<<2)+2>>1]|0)+(e[699168+(yg+2<<2)+2>>1]|0)+(e[699168+(Cg+2<<2)+2>>1]|0)|0;Ah=ai>>>0>>0;Ag=Ah?ai:Ch;Ch=(e[699168+($h+3<<2)+2>>1]|0)+(e[699168+(yg+3<<2)+2>>1]|0)+(e[699168+(Cg+3<<2)+2>>1]|0)|0;ai=Ch>>>0>>0;Gg=ai?Ch:Ag;Ag=(e[699168+($h+4<<2)+2>>1]|0)+(e[699168+(yg+4<<2)+2>>1]|0)+(e[699168+(Cg+4<<2)+2>>1]|0)|0;Ch=Ag>>>0>>0;bi=Ch?Ag:Gg;Gg=(e[699168+($h+5<<2)+2>>1]|0)+(e[699168+(yg+5<<2)+2>>1]|0)+(e[699168+(Cg+5<<2)+2>>1]|0)|0;Ag=Gg>>>0>>0;yh=Ag?Gg:bi;bi=(e[699168+($h+6<<2)+2>>1]|0)+(e[699168+(yg+6<<2)+2>>1]|0)+(e[699168+(Cg+6<<2)+2>>1]|0)|0;Gg=bi>>>0>>0;zg=Gg?bi:yh;yh=(e[699168+($h+7<<2)+2>>1]|0)+(e[699168+(yg+7<<2)+2>>1]|0)+(e[699168+(Cg+7<<2)+2>>1]|0)|0;bi=yh>>>0>>0;vg=bi?yh:zg;zg=(e[699168+($h+8<<2)+2>>1]|0)+(e[699168+(yg+8<<2)+2>>1]|0)+(e[699168+(Cg+8<<2)+2>>1]|0)|0;yh=zg>>>0>>0;xf=((e[699168+($h+9<<2)+2>>1]|0)+(e[699168+(yg+9<<2)+2>>1]|0)+(e[699168+(Cg+9<<2)+2>>1]|0)|0)>>>0<(yh?zg:vg)>>>0?9:yh?8:bi?7:Gg?6:Ag?5:Ch?4:ai?3:Ah?2:Fg&1;Fg=xf+yg|0;yg=a[699168+(Fg<<2)>>0]|0;if(!(a[(d[Pe>>0]&3)+(908511+(xf<<2))>>0]&2)){Ah=Fh;ai=c[Ah>>2]|0;Ch=c[Ah+4>>2]|0;Ah=Sc(yg&255|0,0,8)|0;Ag=xf+$h|0;Gg=Sc(d[699168+(Ag<<2)>>0]|0,0,22)|0;bi=xf+Cg|0;Sc(d[699168+(bi<<2)>>0]|0,0,36)|0;yh=Ch&-2048|B&2032;Ch=Sc(d[699168+(Fg<<2)+1>>0]|0,0,15)|0;vg=Sc(d[699168+(Ag<<2)+1>>0]|0,0,29)|0;Ag=ai&255|Ah&32512|Gg&532676608|Ch&4161536|vg&-536870912;vg=yh|B&15;yh=Fh;c[yh>>2]=Ag;c[yh+4>>2]=vg;Sc(d[699168+(bi<<2)+1>>0]|0,0,43)|0;ui=Ag;vi=vg&-260097|B&260096;wi=0}else{vg=Fh;Ag=c[vg>>2]|0;bi=c[vg+4>>2]|0;vg=Sc(d[699168+(Fg<<2)+1>>0]|0,0,8)|0;Fg=xf+$h|0;$h=Sc(d[699168+(Fg<<2)+1>>0]|0,0,22)|0;yh=xf+Cg|0;Sc(d[699168+(yh<<2)+1>>0]|0,0,36)|0;Cg=B&2032;Ch=Sc(yg&255|0,0,15)|0;yg=Sc(d[699168+(Fg<<2)>>0]|0,0,29)|0;Fg=Ag&255|Ch&4161536|vg&32512|$h&532676608|yg&-536870912;yg=bi&-2048|Cg|B&15;Cg=Fh;c[Cg>>2]=Fg;c[Cg+4>>2]=yg;Sc(d[699168+(yh<<2)>>0]|0,0,43)|0;ui=Fg;vi=yg&-260097|B&260096;wi=3}yg=Fh;c[yg>>2]=ui;c[yg+4>>2]=vi;yg=0;Fg=0;yh=0;while(1){Cg=d[_d+(af*11|0)+yh>>0]|0;bi=((yh|0)==0?1:2)+yg|0;$h=(d[(Cg>>>4&3)+(908511+(xf<<2))>>0]^wi)<>>2&3)+(908511+(xf<<2))>>0]^wi)<>0]^wi)<>>6)+(908511+(xf<<2))>>0]^wi)<>>0>=4){xi=$h;break}else{yg=bi+6|0;Fg=$h}}if((xi|0)>-1){yi=66;zi=31;Ai=xi;Bi=2147483647}else{X=309;break c}while(1){Fg=yi&7;yg=8-Fg|0;yh=yg>>>0>>0?yg:zi;yg=g+((yi>>>3)+Bh)|0;a[yg>>0]=d[yg>>0]&(Bi<>>yh;Bi=Bi>>>yh}}}}qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 7:{Bh=Z(Ed+sd|0,n)|0;yh=g+Bh|0;Fg=a[_d+(af*11|0)+8>>0]|0;yg=Fg&255;xf=d[_d+(af*11|0)+9>>0]|0;Fh=d[ee+($e<<3)+4>>0]|0;switch(a[_d+(af*11|0)+10>>0]|0){case 1:{if((Fg&255)>=4){X=316;break c}Fg=d[ce>>0]|0;xg=(Fg<<3|Fg>>>2)+(c[509600+(Fh<<4)+(yg<<2)>>2]|0)|0;if(xg>>>0>255)if((xg|0)<0){Ci=0;X=319}else Di=255;else{Ci=xg;X=319}if((X|0)==319){X=0;Di=Ci}xg=yh;Fg=c[xg>>2]|0;Ig=c[xg+4>>2]|0;Sc(Di|0,0,50)|0;xg=B;Pg=yh;c[Pg>>2]=Sc(Di|0,0,58)|0|Fg;c[Pg+4>>2]=B|Ig&262143|xg&66846720;xg=g+(Bh+8)|0;Ig=xg;Pg=c[Ig+4>>2]|0;Fg=xg;c[Fg>>2]=c[Ig>>2]&-4|Di>>>6&3;c[Fg+4>>2]=Pg;break}case 2:{Pg=d[ce+1>>0]|0;Fg=Pg<<3|Pg>>>2;Pg=Fg+(c[509600+(Fh<<4)>>2]|0)|0;if(Pg>>>0>255)if((Pg|0)<0){Ei=0;X=323}else Fi=255;else{Ei=Pg;X=323}if((X|0)==323){X=0;Fi=Ei}c[G>>2]=Fi;Pg=(c[509600+(Fh<<4)+4>>2]|0)+Fg|0;if(Pg>>>0>255)if((Pg|0)<0){Gi=0;X=326}else Hi=255;else{Gi=Pg;X=326}if((X|0)==326){X=0;Hi=Gi}c[Ha>>2]=Hi;Pg=(c[509600+(Fh<<4)+8>>2]|0)+Fg|0;if(Pg>>>0>255)if((Pg|0)<0){Ii=0;X=329}else Ji=255;else{Ii=Pg;X=329}if((X|0)==329){X=0;Ji=Ii}c[Ia>>2]=Ji;Pg=(c[509600+(Fh<<4)+12>>2]|0)+Fg|0;if(Pg>>>0>255)if((Pg|0)<0){Ki=0;X=332}else Li=255;else{Ki=Pg;X=332}if((X|0)==332){X=0;Li=Ki}c[Ja>>2]=Li;Pg=c[G+(yg<<2)>>2]|0;Fg=yh;Ig=c[Fg>>2]|0;xg=c[Fg+4>>2]|0;Sc(Pg|0,0,50)|0;Fg=B&66846720|xg&262143;xg=c[G+(xf<<2)>>2]|0;Yh=Ig|(Sc(xg|0,0,58)|0);Ig=Fg|B;Fg=yh;c[Fg>>2]=Yh;c[Fg+4>>2]=Ig;Fg=g+(Bh+8)|0;_h=Fg;Jg=c[_h+4>>2]|0;$h=xg>>>6&3|c[_h>>2]&-4;_h=Fg;c[_h>>2]=$h;c[_h+4>>2]=Jg;Sc(xg|0,0,50)|0;xg=B&66846720;_h=Sc(Pg|0,0,58)|0;bi=Pg>>>6&3;Pg=xg|B;xg=Ig;Ig=Yh;Yh=$h;$h=Jg;Jg=0;Cg=0;vg=0;Ch=0;while(1){Ag=_d+(af*11|0)+Ch|0;Gg=(d[Ag>>0]&3|0)==(yg|0)?vg:vg^3;do if(!Ch){if(!(Gg&2)){Mi=Yh;Ni=$h;Oi=Ig;Pi=xg;Qi=1;Ri=Gg;Si=vg;break}Ah=_h|Ig;ai=Pg|xg&262143;zg=yh;c[zg>>2]=Ah;c[zg+4>>2]=ai;zg=Yh&-4|bi;ci=Fg;c[ci>>2]=zg;c[ci+4>>2]=$h;Mi=zg;Ni=$h;Oi=Ah;Pi=ai;Qi=1;Ri=0;Si=3}else{Mi=Yh;Ni=$h;Oi=Ig;Pi=xg;Qi=2;Ri=Gg;Si=vg}while(0);Gg=Qi+Jg|0;ai=d[Ag>>0]|0;Ah=Si^3;zg=((ai>>>6|0)==(yg|0)?Si:Ah)<>>4&3|0)==(yg|0)?Si:Ah)<>>2&3|0)==(yg|0)?Si:Ah)<>>0>=4){Ti=zg;break}else{xg=Pi;Ig=Oi;Yh=Mi;$h=Ni;Jg=Gg+6|0;Cg=zg;vg=Si}}if((Ti|0)>-1){Ui=97;Vi=31;Wi=Ti;Xi=2147483647}else{X=338;break c}while(1){vg=Ui&7;Cg=8-vg|0;Jg=Cg>>>0>>0?Cg:Vi;Cg=g+((Ui>>>3)+Bh)|0;a[Cg>>0]=d[Cg>>0]&(Xi<>>Jg;Xi=Xi>>>Jg}}break}default:{Jg=(c[509216+(yg<<4)+(xf<<2)>>2]|0)+(Fh*192|0)+((d[ce>>0]|0)*6|0)|0;vg=a[903626+(Jg*3|0)>>0]|0;Cg=vg&255;$h=yh;Yh=c[$h>>2]|0;Ig=c[$h+4>>2]|0;$h=Sc(Cg|0,0,50)|0;xg=B;Ch=a[903626+(Jg*3|0)+1>>0]|0;Fg=Ch&255;bi=Sc(Fg|0,0,58)|0;Pg=Yh|$h|bi;bi=Ig&262143|xg|B;xg=yh;c[xg>>2]=Pg;c[xg+4>>2]=bi;xg=g+(Bh+8)|0;Ig=xg;$h=c[Ig+4>>2]|0;Yh=(Ch&255)>>>6|c[Ig>>2]&-4;Ig=xg;c[Ig>>2]=Yh;c[Ig+4>>2]=$h;Ig=d[903626+(Jg*3|0)+2>>0]|0;Jg=Sc(Fg|0,0,50)|0;Fg=B;Ch=Sc(Cg|0,0,58)|0;Cg=(vg&255)>>>6;vg=Jg|Ch;Ch=Fg|B;Fg=bi;bi=Pg;Pg=Yh;Yh=$h;$h=0;Jg=0;_h=Ig;Ig=0;while(1){zg=_d+(af*11|0)+Ig|0;Gg=_h>>>(d[zg>>0]<<1&6);Ah=Gg&3;do if(!Ig){if(!(Gg&2)){Yi=Pg;Zi=Yh;_i=bi;$i=Fg;aj=1;bj=Ah;cj=_h;break}ai=vg|bi;ci=Ch|Fg&262143;Dh=yh;c[Dh>>2]=ai;c[Dh+4>>2]=ci;Dh=Pg&-4|Cg;ug=xg;c[ug>>2]=Dh;c[ug+4>>2]=Yh;Yi=Dh;Zi=Yh;_i=ai;$i=ci;aj=1;bj=Ah^3;cj=_h^255}else{Yi=Pg;Zi=Yh;_i=bi;$i=Fg;aj=2;bj=Ah;cj=_h}while(0);Ah=aj+$h|0;Gg=d[zg>>0]|0;Ag=(cj>>>(Gg>>>5&6)&3)<>>(Gg>>>3&6)&3)<>>(Gg>>>1&6)&3)<>>0>=4){dj=Ag;break}else{Fg=$i;bi=_i;Pg=Yi;Yh=Zi;$h=Ah+6|0;Jg=Ag;_h=cj}}if((dj|0)>-1){ej=97;fj=31;gj=dj;hj=2147483647}else{X=345;break c}while(1){_h=ej&7;Jg=8-_h|0;$h=Jg>>>0>>0?Jg:fj;Jg=g+((ej>>>3)+Bh)|0;a[Jg>>0]=d[Jg>>0]&(hj<<_h^255)|gj<<_h;if((fj|0)==($h|0))break;else{ej=$h+ej|0;fj=fj-$h|0;gj=gj>>>$h;hj=hj>>>$h}}}}qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 8:{Bh=Z(Ed+sd|0,n)|0;$h=g+Bh|0;_h=a[_d+(af*11|0)+8>>0]|0;Jg=_h&255;Yh=a[_d+(af*11|0)+9>>0]|0;Pg=d[ee+($e<<3)+4>>0]|0;if(_h<<24>>24==Yh<<24>>24){if((_h&255)>=4){X=351;break c}bi=d[ce>>0]|0;Fg=(bi<<3|bi>>>2)+(c[509600+(Pg<<4)+(Jg<<2)>>2]|0)|0;if(Fg>>>0>255)if((Fg|0)<0){ij=0;X=354}else jj=255;else{ij=Fg;X=354}if((X|0)==354){X=0;jj=ij}b[$h>>1]=jj&255|7424;Fg=g+(Bh+2)|0;a[Fg>>0]=a[888096]|0;a[Fg+1>>0]=a[888097]|0;a[Fg+2>>0]=a[888098]|0;a[Fg+3>>0]=a[888099]|0;a[Fg+4>>0]=a[888100]|0;a[Fg+5>>0]=a[888101]|0;qg=Ad;rg=zd;sg=yd;tg=xd;break f}i:do switch(_h<<24>>24){case 0:{if(Yh<<24>>24==3){kj=0;break i}if(Yh<<24>>24==2)kj=2;else X=363;break}case 1:{if(Yh<<24>>24==3){kj=1;break i}if(Yh<<24>>24==2)kj=3;else X=363;break}default:X=363}while(0);if((X|0)==363){X=0;kj=4}Yh=kj>>>0>3?0:kj;_h=(d[ce>>0]|0)+(Pg<<5)|0;Fg=a[760608+(_h<<4)+(Yh<<2)+1>>0]|0;b[$h>>1]=(Fg&255)<<12&65535|d[760608+(_h<<4)+(Yh<<2)>>0]|((Fg&255)>>>4&255)<<8&65535;Fg=e[760608+(_h<<4)+(Yh<<2)+2>>1]|0;Yh=0;_h=0;Jg=0;while(1){bi=d[_d+(af*11|0)+Jg>>0]|0;Ig=Z(Jg,-3)|0;xg=Sc(Fg>>>((bi>>>4&3)*3|0)&7|0,0,Ig+21|0)|0;Cg=B;yh=Sc(Fg>>>((bi>>>2&3)*3|0)&7|0,0,Ig+33|0)|0;Ch=B;vg=Sc(Fg>>>((bi&3)*3|0)&7|0,0,Ig+45|0)|0;Fh=B|_h;xf=Sc(Fg>>>((bi>>>6)*3|0)&7|0,0,Ig+9|0)|0;Ig=vg|Yh|xf|yh|xg;xg=Fh|B|Ch|Cg;Jg=Jg+1|0;if(Jg>>>0>=4){lj=Ig;mj=xg;break}else{Yh=Ig;_h=xg}}_h=Rc(lj|0,mj|0,40)|0;a[g+(Bh+2)>>0]=_h;a[g+(Bh+3)>>0]=mj;_h=Rc(lj|0,mj|0,24)|0;a[g+(Bh+4)>>0]=_h;_h=Rc(lj|0,mj|0,16)|0;a[g+(Bh+5)>>0]=_h;_h=Rc(lj|0,mj|0,8)|0;a[g+(Bh+6)>>0]=_h;a[g+(Bh+7)>>0]=lj;qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 9:{_h=Z(Ed+sd|0,n)|0;Yh=g+_h|0;a[Ka>>0]=0;a[La>>0]=0;do if(u){Jg=e[g+(_h+2)>>1]|0;Fg=a[_d+(Jg*11|0)+10>>0]|0;$h=Fg&255;if(Fg<<24>>24!=1){nj=255;oj=$h;break}Fg=e[Yh>>1]|0;Pg=d[ee+(Fg<<3)+4>>0]|0;xg=d[ee+(Fg<<3)+1>>0]|0;Fg=xg<<3|xg>>>2;xg=Fg+(c[509600+(Pg<<4)>>2]|0)|0;if(xg>>>0>255)if((xg|0)<0){pj=0;X=368}else qj=255;else{pj=xg;X=368}if((X|0)==368){X=0;qj=pj}c[G>>2]=qj;xg=(c[509600+(Pg<<4)+4>>2]|0)+Fg|0;if(xg>>>0>255)if((xg|0)<0){rj=0;X=371}else sj=255;else{rj=xg;X=371}if((X|0)==371){X=0;sj=rj}c[Ha>>2]=sj;xg=(c[509600+(Pg<<4)+8>>2]|0)+Fg|0;if(xg>>>0>255)if((xg|0)<0){tj=0;X=374}else uj=255;else{tj=xg;X=374}if((X|0)==374){X=0;uj=tj}c[Ia>>2]=uj;xg=(c[509600+(Pg<<4)+12>>2]|0)+Fg|0;if(xg>>>0>255)if((xg|0)<0){vj=0;X=377}else wj=255;else{vj=xg;X=377}if((X|0)==377){X=0;wj=vj}c[Ja>>2]=wj;nj=c[G+(d[_d+(Jg*11|0)+8>>0]<<2)>>2]|0;oj=$h}else{nj=255;oj=1}while(0);Bh=a[ee+($e<<3)+4>>0]|0;$h=Bh&255;Jg=_d+(af*11|0)+8|0;xg=a[Jg>>0]|0;Fg=xg&255;Pg=_d+(af*11|0)+9|0;Ig=a[Pg>>0]|0;Cg=Ig&255;Ch=_d+(af*11|0)+10|0;Fh=a[Ch>>0]|0;j:do if((oj|0)==1&Fh<<24>>24==1){if((xg&255)>=4){X=381;break c}yh=d[ce>>0]|0;xf=d[ce+1>>0]|0;vg=xf<<3|xf>>>2;xf=d[ce+2>>0]|0;bi=xf<<3|xf>>>2;xf=c[509600+($h<<4)+(Fg<<2)>>2]|0;yg=(yh<<3|yh>>>2)+xf|0;if(yg>>>0>255)if((yg|0)<0){xj=0;X=384}else yj=255;else{xj=yg;X=384}if((X|0)==384){X=0;yj=xj}yg=vg+xf|0;if(yg>>>0>255)if((yg|0)<0){zj=0;X=387}else Aj=255;else{zj=yg;X=387}if((X|0)==387){X=0;Aj=zj}yg=bi+xf|0;if(yg>>>0>255)if((yg|0)<0){Bj=0;X=390}else Cj=255;else{Bj=yg;X=390}if((X|0)==390){X=0;Cj=Bj}a[Yh>>0]=-4;a[g+(_h+1)>>0]=-3;a[g+(_h+2)>>0]=-1;a[g+(_h+3)>>0]=-1;c[g+(_h+4)>>2]=-1;c[g+(_h+8)>>2]=0;c[g+(_h+12)>>2]=0;yg=yj<<8|yj;xf=64;bi=16;while(1){vg=xf&7;yh=8-vg|0;Ag=(yh|0)<(bi|0)?yh:bi;yh=g+((xf>>3)+_h)|0;a[yh>>0]=d[yh>>0]|yg<>>Ag;xf=vg;bi=bi-Ag|0}}bi=Aj<<8|Aj;xf=Dj;yg=16;while(1){zg=xf&7;Ag=8-zg|0;vg=(Ag|0)<(yg|0)?Ag:yg;Ag=g+((xf>>3)+_h)|0;a[Ag>>0]=d[Ag>>0]|bi<>>vg;xf=zg;yg=yg-vg|0}}yg=Cj<<8|Cj;xf=Ej;bi=16;while(1){vg=xf&7;zg=8-vg|0;Ag=(zg|0)<(bi|0)?zg:bi;zg=g+((xf>>3)+_h)|0;a[zg>>0]=d[zg>>0]|yg<>>Ag;xf=vg;bi=bi-Ag|0}}bi=nj<<8|nj;xf=Fj;yg=16;while(1){Ag=xf&7;vg=8-Ag|0;zg=(vg|0)<(yg|0)?vg:yg;vg=g+((xf>>3)+_h)|0;a[vg>>0]=d[vg>>0]|bi<>>zg;xf=zg+xf|0;yg=yg-zg|0}}}else{if(oj>>>0<3&(Fh&255)<3){ib(F,ce,$h);yg=c[F+(Fg<<2)>>2]|0;xf=yg&255;a[z>>0]=xf;bi=(yg&65535)>>>8;zg=bi&255;a[Ma>>0]=zg;Ag=yg>>>16;vg=Ag&255;a[Na>>0]=vg;yh=c[F+(Cg<<2)>>2]|0;Ah=yh&255;a[Oa>>0]=Ah;Gg=(yh&65535)>>>8;ci=Gg&255;a[Pa>>0]=ci;ai=yh>>>16;Dh=ai&255;a[Qa>>0]=Dh;if(((ai&255)+(yh&255)+(Gg&65535)|0)<((Ag&255)+(yg&255)+(bi&65535)|0)){a[z>>0]=Ah;a[Oa>>0]=xf;a[Ma>>0]=ci;a[Pa>>0]=zg;a[Na>>0]=Dh;a[Qa>>0]=vg;Gj=Ah;Hj=1}else{Gj=xf;Hj=0}if(u){xf=e[Yh>>1]|0;Ah=e[g+(_h+2)>>1]|0;vg=d[ee+(xf<<3)+4>>0]|0;Dh=d[_d+(Ah*11|0)+8>>0]|0;zg=d[_d+(Ah*11|0)+9>>0]|0;ci=d[ee+(xf<<3)+1>>0]|0;xf=ci<<3|ci>>>2;ci=xf+(c[509600+(vg<<4)>>2]|0)|0;if(ci>>>0>255)if((ci|0)<0){Ij=0;X=405}else Jj=255;else{Ij=ci;X=405}if((X|0)==405){X=0;Jj=Ij}c[H>>2]=Jj;ci=(c[509600+(vg<<4)+4>>2]|0)+xf|0;if(ci>>>0>255)if((ci|0)<0){Kj=0;X=408}else Lj=255;else{Kj=ci;X=408}if((X|0)==408){X=0;Lj=Kj}c[Ra>>2]=Lj;ci=(c[509600+(vg<<4)+8>>2]|0)+xf|0;if(ci>>>0>255)if((ci|0)<0){Mj=0;X=411}else Nj=255;else{Mj=ci;X=411}if((X|0)==411){X=0;Nj=Mj}c[Sa>>2]=Nj;ci=(c[509600+(vg<<4)+12>>2]|0)+xf|0;if(ci>>>0>255)if((ci|0)<0){Oj=0;X=414}else Pj=255;else{Oj=ci;X=414}if((X|0)==414){X=0;Pj=Oj}c[Ta>>2]=Pj;a[Ua>>0]=c[H+(Dh<<2)>>2];a[Va>>0]=c[H+(zg<<2)>>2];Dh=d[_d+(Ah*11|0)>>0]|0;a[Wa>>0]=(Dh&3|0)==(zg|0)&1;a[Xa>>0]=(Dh>>>2&3|0)==(zg|0)&1;a[Ya>>0]=(Dh>>>4&3|0)==(zg|0)&1;a[Za>>0]=(Dh>>>6|0)==(zg|0)&1;Dh=d[_d+(Ah*11|0)+1>>0]|0;a[_a>>0]=(Dh&3|0)==(zg|0)&1;a[$a>>0]=(Dh>>>2&3|0)==(zg|0)&1;a[ab>>0]=(Dh>>>4&3|0)==(zg|0)&1;a[bb>>0]=(Dh>>>6|0)==(zg|0)&1;Dh=d[_d+(Ah*11|0)+2>>0]|0;a[cb>>0]=(Dh&3|0)==(zg|0)&1;a[db>>0]=(Dh>>>2&3|0)==(zg|0)&1;a[eb>>0]=(Dh>>>4&3|0)==(zg|0)&1;a[fb>>0]=(Dh>>>6|0)==(zg|0)&1;Dh=d[_d+(Ah*11|0)+3>>0]|0;a[gb>>0]=(Dh&3|0)==(zg|0)&1;a[jb>>0]=(Dh>>>2&3|0)==(zg|0)&1;a[kb>>0]=(Dh>>>4&3|0)==(zg|0)&1;Qj=(Dh>>>6|0)==(zg|0)&1}else{a[Ua>>0]=-1;a[Va>>0]=-1;a[Wa>>0]=0;a[Xa>>0]=0;a[Ya>>0]=0;a[Za>>0]=0;a[_a>>0]=0;a[$a>>0]=0;a[ab>>0]=0;a[bb>>0]=0;a[cb>>0]=0;a[db>>0]=0;a[eb>>0]=0;a[fb>>0]=0;a[gb>>0]=0;a[jb>>0]=0;a[kb>>0]=0;Qj=0}a[lb>>0]=Qj;zg=d[_d+(af*11|0)>>0]|0;Dh=Hj^(zg&3|0)==(Cg|0);a[rb>>0]=Dh&1;a[sb>>0]=(Hj^(zg>>>2&3|0)==(Cg|0))&1;a[tb>>0]=(Hj^(zg>>>4&3|0)==(Cg|0))&1;a[ub>>0]=(Hj^(zg>>>6|0)==(Cg|0))&1;zg=d[_d+(af*11|0)+1>>0]|0;a[vb>>0]=(Hj^(zg&3|0)==(Cg|0))&1;a[xb>>0]=(Hj^(zg>>>2&3|0)==(Cg|0))&1;a[yb>>0]=(Hj^(zg>>>4&3|0)==(Cg|0))&1;a[zb>>0]=(Hj^(zg>>>6|0)==(Cg|0))&1;zg=d[_d+(af*11|0)+2>>0]|0;a[Ab>>0]=(Hj^(zg&3|0)==(Cg|0))&1;a[Bb>>0]=(Hj^(zg>>>2&3|0)==(Cg|0))&1;a[Cb>>0]=(Hj^(zg>>>4&3|0)==(Cg|0))&1;a[Db>>0]=(Hj^(zg>>>6|0)==(Cg|0))&1;zg=d[_d+(af*11|0)+3>>0]|0;a[Eb>>0]=(Hj^(zg&3|0)==(Cg|0))&1;a[Fb>>0]=(Hj^(zg>>>2&3|0)==(Cg|0))&1;a[Hb>>0]=(Hj^(zg>>>4&3|0)==(Cg|0))&1;a[Ib>>0]=(Hj^(zg>>>6|0)==(Cg|0))&1;a[Yh>>0]=65;a[g+(_h+1)>>0]=-124;a[g+(_h+2)>>0]=1;zg=g+(_h+3)|0;Ah=zg;a[Ah>>0]=0;a[Ah+1>>0]=0;a[Ah+2>>0]=0;a[Ah+3>>0]=0;Ah=zg+4|0;a[Ah>>0]=0;a[Ah+1>>0]=0;a[Ah+2>>0]=0;a[Ah+3>>0]=0;a[g+(_h+11)>>0]=-64;c[g+(_h+12)>>2]=0;Ah=Gj;zg=17;ci=0;while(1){xf=Ah&255;vg=zg;bi=8;while(1){yg=vg&7;Ag=8-yg|0;Gg=(Ag|0)<(bi|0)?Ag:bi;Ag=g+((vg>>3)+_h)|0;a[Ag>>0]=d[Ag>>0]|xf<>>Gg;vg=yg;bi=bi-Gg|0}}bi=ci+1|0;if((bi|0)==8)break;Ah=a[z+bi>>0]|0;zg=Rj;ci=bi}ci=g+(_h+15)|0;a[ci>>0]=d[ci>>0]|(Dh&1)<<7;ci=1;while(1){zg=127-ci|0;Ah=g+((zg>>>3)+_h)|0;a[Ah>>0]=d[Ah>>0]|d[z+10+ci>>0]<<(zg&7);ci=ci+1|0;if((ci|0)==32)break j}}k:do if(u){ci=e[Yh>>1]|0;Dh=ee+(ci<<3)|0;zg=e[g+(_h+2)>>1]|0;Ah=a[ee+(ci<<3)+4>>0]|0;ci=Ah&255;bi=a[_d+(zg*11|0)+8>>0]|0;vg=bi&255;xf=a[_d+(zg*11|0)+9>>0]|0;Gg=xf&255;if(bi<<24>>24!=xf<<24>>24){do if((Ah&255)>6){if(!(xf<<24>>24==3&(bi<<24>>24==0?(a[_d+(zg*11|0)+10>>0]|0)==2:0)))break;ib(C,Dh,ci);yg=d[qb>>0]|0;a[Ua>>0]=a[898220+(d[pb>>0]|0)>>0]|0;a[Va>>0]=a[898220+yg>>0]|0;yg=d[_d+(zg*11|0)>>0]|0;a[Wa>>0]=(yg&3|0)==(Gg|0)?3:0;a[Xa>>0]=(yg>>>2&3|0)==(Gg|0)?3:0;a[Ya>>0]=(yg>>>4&3|0)==(Gg|0)?3:0;a[Za>>0]=(yg>>>6|0)==(Gg|0)?3:0;yg=d[_d+(zg*11|0)+1>>0]|0;a[_a>>0]=(yg&3|0)==(Gg|0)?3:0;a[$a>>0]=(yg>>>2&3|0)==(Gg|0)?3:0;a[ab>>0]=(yg>>>4&3|0)==(Gg|0)?3:0;a[bb>>0]=(yg>>>6|0)==(Gg|0)?3:0;yg=d[_d+(zg*11|0)+2>>0]|0;a[cb>>0]=(yg&3|0)==(Gg|0)?3:0;a[db>>0]=(yg>>>2&3|0)==(Gg|0)?3:0;a[eb>>0]=(yg>>>4&3|0)==(Gg|0)?3:0;a[fb>>0]=(yg>>>6|0)==(Gg|0)?3:0;yg=d[_d+(zg*11|0)+3>>0]|0;a[gb>>0]=(yg&3|0)==(Gg|0)?3:0;a[jb>>0]=(yg>>>2&3|0)==(Gg|0)?3:0;a[kb>>0]=(yg>>>4&3|0)==(Gg|0)?3:0;a[lb>>0]=(yg>>>6|0)==(Gg|0)?3:0;break k}while(0);bi=c[509280+(vg<<4)+(Gg<<2)>>2]|0;xf=d[Dh+1>>0]|0;Ah=d[896172+(xf*48|0)+(ci*6|0)+bi>>0]|0;yg=Ah+(bi*10|0)+((xf+(ci<<5)|0)*60|0)|0;a[Ua>>0]=a[510752+(yg<<2)>>0]|0;a[Va>>0]=a[510752+(yg<<2)+1>>0]|0;yg=d[_d+(zg*11|0)>>0]|0;a[Wa>>0]=a[(yg&3)+(908511+(Ah<<2))>>0]|0;a[Xa>>0]=a[(yg>>>2&3)+(908511+(Ah<<2))>>0]|0;a[Ya>>0]=a[(yg>>>4&3)+(908511+(Ah<<2))>>0]|0;a[Za>>0]=a[(yg>>>6)+(908511+(Ah<<2))>>0]|0;yg=d[_d+(zg*11|0)+1>>0]|0;a[_a>>0]=a[(yg&3)+(908511+(Ah<<2))>>0]|0;a[$a>>0]=a[(yg>>>2&3)+(908511+(Ah<<2))>>0]|0;a[ab>>0]=a[(yg>>>4&3)+(908511+(Ah<<2))>>0]|0;a[bb>>0]=a[(yg>>>6)+(908511+(Ah<<2))>>0]|0;yg=d[_d+(zg*11|0)+2>>0]|0;a[cb>>0]=a[(yg&3)+(908511+(Ah<<2))>>0]|0;a[db>>0]=a[(yg>>>2&3)+(908511+(Ah<<2))>>0]|0;a[eb>>0]=a[(yg>>>4&3)+(908511+(Ah<<2))>>0]|0;a[fb>>0]=a[(yg>>>6)+(908511+(Ah<<2))>>0]|0;yg=d[_d+(zg*11|0)+3>>0]|0;a[gb>>0]=a[(yg&3)+(908511+(Ah<<2))>>0]|0;a[jb>>0]=a[(yg>>>2&3)+(908511+(Ah<<2))>>0]|0;a[kb>>0]=a[(yg>>>4&3)+(908511+(Ah<<2))>>0]|0;a[lb>>0]=a[(yg>>>6)+(908511+(Ah<<2))>>0]|0;break}Ah=d[Dh+1>>0]|0;yg=Ah<<3|Ah>>>2;Ah=yg+(c[509600+(ci<<4)>>2]|0)|0;if(Ah>>>0>255)if((Ah|0)<0){Sj=0;X=426}else Tj=255;else{Sj=Ah;X=426}if((X|0)==426){X=0;Tj=Sj}c[A>>2]=Tj;Ah=(c[509600+(ci<<4)+4>>2]|0)+yg|0;if(Ah>>>0>255)if((Ah|0)<0){Uj=0;X=429}else Vj=255;else{Uj=Ah;X=429}if((X|0)==429){X=0;Vj=Uj}c[mb>>2]=Vj;Ah=(c[509600+(ci<<4)+8>>2]|0)+yg|0;if(Ah>>>0>255)if((Ah|0)<0){Wj=0;X=432}else Xj=255;else{Wj=Ah;X=432}if((X|0)==432){X=0;Xj=Wj}c[nb>>2]=Xj;Ah=(c[509600+(ci<<4)+12>>2]|0)+yg|0;if(Ah>>>0>255)if((Ah|0)<0){Yj=0;X=435}else Zj=255;else{Yj=Ah;X=435}if((X|0)==435){X=0;Zj=Yj}c[ob>>2]=Zj;Ah=c[A+(vg<<2)>>2]|0;a[Ua>>0]=a[897708+(Ah<<1)>>0]|0;a[Va>>0]=a[897708+(Ah<<1)+1>>0]|0;a[Wa>>0]=1;a[Xa>>0]=1;a[Ya>>0]=1;a[Za>>0]=1;a[_a>>0]=1;a[$a>>0]=1;a[ab>>0]=1;a[bb>>0]=1;a[cb>>0]=1;a[db>>0]=1;a[eb>>0]=1;a[fb>>0]=1;a[gb>>0]=1;a[jb>>0]=1;a[kb>>0]=1;a[lb>>0]=1}else{a[Ua>>0]=1;a[Va>>0]=1;a[Wa>>0]=0;a[Xa>>0]=0;a[Ya>>0]=0;a[Za>>0]=0;a[_a>>0]=0;a[$a>>0]=0;a[ab>>0]=0;a[bb>>0]=0;a[cb>>0]=0;a[db>>0]=0;a[eb>>0]=0;a[fb>>0]=0;a[gb>>0]=0;a[jb>>0]=0;a[kb>>0]=0;a[lb>>0]=0}while(0);l:do if(xg<<24>>24==Ig<<24>>24){ib(D,ce,$h);Ah=c[D+(Fg<<2)>>2]|0;yg=Ah&255;xf=Ah>>>8&255;bi=Ah>>>16&255;Ah=a[897708+(yg<<1)>>0]|0;a[z>>0]=Ah;Ag=a[897708+(yg<<1)+1>>0]|0;a[Oa>>0]=Ag;yg=a[897708+(xf<<1)>>0]|0;a[Ma>>0]=yg;yh=a[897708+(xf<<1)+1>>0]|0;a[Pa>>0]=yh;xf=a[897708+(bi<<1)>>0]|0;a[Na>>0]=xf;ai=a[897708+(bi<<1)+1>>0]|0;a[Qa>>0]=ai;if(((c[509344+((yh&255)<<2)>>2]|0)+(c[509344+((Ag&255)<<2)>>2]|0)+(c[509344+((ai&255)<<2)>>2]|0)|0)<((c[509344+((yg&255)<<2)>>2]|0)+(c[509344+((Ah&255)<<2)>>2]|0)+(c[509344+((xf&255)<<2)>>2]|0)|0)){a[z>>0]=Ag;a[Oa>>0]=Ah;a[Ma>>0]=yh;a[Pa>>0]=yg;a[Na>>0]=ai;a[Qa>>0]=xf;_j=2}else _j=1;a[rb>>0]=_j;a[sb>>0]=_j;a[tb>>0]=_j;a[ub>>0]=_j;a[vb>>0]=_j;a[xb>>0]=_j;a[yb>>0]=_j;a[zb>>0]=_j;a[Ab>>0]=_j;a[Bb>>0]=_j;a[Cb>>0]=_j;a[Db>>0]=_j;a[Eb>>0]=_j;a[Fb>>0]=_j;a[Hb>>0]=_j;a[Ib>>0]=_j}else{do if((Bh&255)>6){if((a[Ch>>0]|0)!=2)break;if(a[Jg>>0]|0)break;if((a[Pg>>0]|0)!=3)break;ib(E,ce,$h);xf=c[E>>2]|0;ai=c[Jb>>2]|0;yg=a[898220+(xf&255)>>0]|0;a[z>>0]=yg;yh=a[898220+(ai&255)>>0]|0;a[Oa>>0]=yh;Ah=a[898220+(xf>>>8&255)>>0]|0;a[Ma>>0]=Ah;Ag=a[898220+(ai>>>8&255)>>0]|0;a[Pa>>0]=Ag;bi=a[898220+(xf>>>16&255)>>0]|0;a[Na>>0]=bi;xf=a[898220+(ai>>>16&255)>>0]|0;a[Qa>>0]=xf;if(((c[509344+((Ag&255)<<2)>>2]|0)+(c[509344+((yh&255)<<2)>>2]|0)+(c[509344+((xf&255)<<2)>>2]|0)|0)<((c[509344+((Ah&255)<<2)>>2]|0)+(c[509344+((yg&255)<<2)>>2]|0)+(c[509344+((bi&255)<<2)>>2]|0)|0)){a[z>>0]=yh;a[Oa>>0]=yg;a[Ma>>0]=Ag;a[Pa>>0]=Ah;a[Na>>0]=xf;a[Qa>>0]=bi;$j=1}else $j=0;bi=0;while(1){xf=d[_d+(af*11|0)+bi>>0]|0;Ah=(xf&3|0)==(Fg|0)?0:3;Ag=bi<<3;a[z+10+Ag>>0]=$j?Ah^3:Ah;Ah=(xf>>>2&3|0)==(Fg|0)?0:3;a[(Ag|2)+(z+10)>>0]=$j?Ah^3:Ah;Ah=(xf>>>4&3|0)==(Fg|0)?0:3;a[(Ag|4)+(z+10)>>0]=$j?Ah^3:Ah;Ah=(xf>>>6|0)==(Fg|0)?0:3;a[(Ag|6)+(z+10)>>0]=$j?Ah^3:Ah;bi=bi+1|0;if(bi>>>0>=4)break l}}while(0);vg=$h<<5;ci=(c[509280+(Fg<<4)+(Cg<<2)>>2]|0)*10|0;Dh=(((d[ce>>0]|0)+vg|0)*60|0)+ci|0;zg=(((d[ce+1>>0]|0)+vg|0)*60|0)+ci|0;Gg=(((d[ce+2>>0]|0)+vg|0)*60|0)+ci|0;ci=(e[510752+(zg<<2)+2>>1]|0)+(e[510752+(Dh<<2)+2>>1]|0)+(e[510752+(Gg<<2)+2>>1]|0)|0;vg=(e[510752+((zg|1)<<2)+2>>1]|0)+(e[510752+((Dh|1)<<2)+2>>1]|0)+(e[510752+((Gg|1)<<2)+2>>1]|0)|0;bi=vg>>>0>>0;Ah=bi?vg:ci;ci=(e[510752+(zg+2<<2)+2>>1]|0)+(e[510752+(Dh+2<<2)+2>>1]|0)+(e[510752+(Gg+2<<2)+2>>1]|0)|0;vg=ci>>>0>>0;Ag=vg?ci:Ah;Ah=(e[510752+(zg+3<<2)+2>>1]|0)+(e[510752+(Dh+3<<2)+2>>1]|0)+(e[510752+(Gg+3<<2)+2>>1]|0)|0;ci=Ah>>>0>>0;xf=ci?Ah:Ag;Ag=(e[510752+(zg+4<<2)+2>>1]|0)+(e[510752+(Dh+4<<2)+2>>1]|0)+(e[510752+(Gg+4<<2)+2>>1]|0)|0;Ah=Ag>>>0>>0;yg=Ah?Ag:xf;xf=(e[510752+(zg+5<<2)+2>>1]|0)+(e[510752+(Dh+5<<2)+2>>1]|0)+(e[510752+(Gg+5<<2)+2>>1]|0)|0;Ag=xf>>>0>>0;yh=Ag?xf:yg;yg=(e[510752+(zg+6<<2)+2>>1]|0)+(e[510752+(Dh+6<<2)+2>>1]|0)+(e[510752+(Gg+6<<2)+2>>1]|0)|0;xf=yg>>>0>>0;ai=xf?yg:yh;yh=(e[510752+(zg+7<<2)+2>>1]|0)+(e[510752+(Dh+7<<2)+2>>1]|0)+(e[510752+(Gg+7<<2)+2>>1]|0)|0;yg=yh>>>0>>0;ug=yg?yh:ai;ai=(e[510752+(zg+8<<2)+2>>1]|0)+(e[510752+(Dh+8<<2)+2>>1]|0)+(e[510752+(Gg+8<<2)+2>>1]|0)|0;yh=ai>>>0>>0;Bg=((e[510752+(zg+9<<2)+2>>1]|0)+(e[510752+(Dh+9<<2)+2>>1]|0)+(e[510752+(Gg+9<<2)+2>>1]|0)|0)>>>0<(yh?ai:ug)>>>0?9:yh?8:yg?7:xf?6:Ag?5:Ah?4:ci?3:vg?2:bi&1;bi=Bg+Dh|0;Dh=a[510752+(bi<<2)>>0]|0;a[z>>0]=Dh;vg=a[510752+(bi<<2)+1>>0]|0;a[Oa>>0]=vg;bi=Bg+zg|0;zg=a[510752+(bi<<2)>>0]|0;a[Ma>>0]=zg;ci=a[510752+(bi<<2)+1>>0]|0;a[Pa>>0]=ci;bi=Bg+Gg|0;Gg=a[510752+(bi<<2)>>0]|0;a[Na>>0]=Gg;Ah=a[510752+(bi<<2)+1>>0]|0;a[Qa>>0]=Ah;if(((c[509344+((ci&255)<<2)>>2]|0)+(c[509344+((vg&255)<<2)>>2]|0)+(c[509344+((Ah&255)<<2)>>2]|0)|0)<((c[509344+((zg&255)<<2)>>2]|0)+(c[509344+((Dh&255)<<2)>>2]|0)+(c[509344+((Gg&255)<<2)>>2]|0)|0)){a[z>>0]=vg;a[Oa>>0]=Dh;a[Ma>>0]=ci;a[Pa>>0]=zg;a[Na>>0]=Ah;a[Qa>>0]=Gg;ak=1}else ak=0;Gg=0;do{Ah=d[_d+(af*11|0)+Gg>>0]|0;zg=d[(Ah&3)+(908511+(Bg<<2))>>0]|0;ci=Gg<<3;a[z+10+ci>>0]=ak?3-zg|0:zg;zg=d[(Ah>>>2&3)+(908511+(Bg<<2))>>0]|0;a[(ci|2)+(z+10)>>0]=ak?3-zg|0:zg;zg=d[(Ah>>>4&3)+(908511+(Bg<<2))>>0]|0;a[(ci|4)+(z+10)>>0]=ak?3-zg|0:zg;zg=d[(Ah>>>6)+(908511+(Bg<<2))>>0]|0;a[(ci|6)+(z+10)>>0]=ak?3-zg|0:zg;Gg=Gg+1|0}while(Gg>>>0<4)}while(0);a[Yh>>0]=66;a[g+(_h+1)>>0]=-124;a[g+(_h+2)>>0]=1;Gg=g+(_h+3)|0;a[Gg>>0]=0;a[Gg+1>>0]=0;a[Gg+2>>0]=0;a[Gg+3>>0]=0;a[g+(_h+7)>>0]=-64;c[g+(_h+8)>>2]=0;c[g+(_h+12)>>2]=0;c[y>>2]=17;Gb(Yh,z,y);Gb(Yh,Qa,y);Gg=0;do{Bg=126-(Gg<<1)|0;zg=g+((Bg>>>3)+_h)|0;a[zg>>0]=d[zg>>0]|d[908234+(d[z+10+Gg>>0]|0)>>0]<<(Bg&6);Gg=Gg+1|0}while((Gg|0)!=32)}while(0);qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 10:{_h=Z(Ed+sd|0,n)|0;Yh=g+_h|0;Cg=a[_d+(af*11|0)+8>>0]|0;Fg=Cg&255;$h=a[_d+(af*11|0)+9>>0]|0;Pg=$h&255;Jg=a[ee+($e<<3)+4>>0]|0;Ch=Jg&255;m:do if(Cg<<24>>24!=$h<<24>>24){do if((Jg&255)>6){if(!($h<<24>>24==3&(Cg<<24>>24==0?(a[_d+(af*11|0)+10>>0]|0)==2:0)))break;ib(F,ce,Ch);Bh=c[F>>2]|0;Ig=a[899500+((Bh&255)<<1)+1>>0]|0;xg=a[899500+((Bh>>>8&255)<<1)+1>>0]|0;Fh=a[899500+((Bh>>>16&255)<<1)+1>>0]|0;if(((xg|Ig|Fh)&255)>=32){X=480;break c}Bh=d[Nb>>0]|0;Gg=d[Ob>>0]|0;Bg=d[Mb>>0]|0;zg=(xg&255)<<5;a[Yh>>0]=zg|Fh&255;a[g+(_h+1)>>0]=(zg|(Ig&255)<<10)>>>8;Ig=a[899500+(Bg<<1)+1>>0]|0;Bg=a[900012+(Gg<<1)+1>>0]|0;Gg=a[899500+(Bh<<1)+1>>0]|0;if(!((Bg&255)<64&((Gg|Ig)&255)<32)){X=482;break c}Bh=(Bg&255)<<5;a[g+(_h+2)>>0]=Bh|Gg&255;a[g+(_h+3)>>0]=(Bh|(Ig&255)<<11)>>>8;a[g+(_h+4)>>0]=a[Pe>>0]|0;a[g+(_h+5)>>0]=a[_d+(af*11|0)+1>>0]|0;a[g+(_h+6)>>0]=a[_d+(af*11|0)+2>>0]|0;a[g+(_h+7)>>0]=a[_d+(af*11|0)+3>>0]|0;break m}while(0);Ig=Ch<<5;Bh=(c[509536+(Fg<<4)+(Pg<<2)>>2]|0)*10|0;Gg=(((d[ce>>0]|0)+Ig|0)*60|0)+Bh|0;Bg=(((d[ce+1>>0]|0)+Ig|0)*60|0)+Bh|0;zg=(((d[ce+2>>0]|0)+Ig|0)*60|0)+Bh|0;Bh=(e[826144+(Bg<<2)+2>>1]|0)+(e[764704+(Gg<<2)+2>>1]|0)+(e[764704+(zg<<2)+2>>1]|0)|0;Ig=(e[826144+((Bg|1)<<2)+2>>1]|0)+(e[764704+((Gg|1)<<2)+2>>1]|0)+(e[764704+((zg|1)<<2)+2>>1]|0)|0;Fh=Ig>>>0>>0;xg=Fh?Ig:Bh;Bh=(e[826144+(Bg+2<<2)+2>>1]|0)+(e[764704+(Gg+2<<2)+2>>1]|0)+(e[764704+(zg+2<<2)+2>>1]|0)|0;Ig=Bh>>>0>>0;ci=Ig?Bh:xg;xg=(e[826144+(Bg+3<<2)+2>>1]|0)+(e[764704+(Gg+3<<2)+2>>1]|0)+(e[764704+(zg+3<<2)+2>>1]|0)|0;Bh=xg>>>0>>0;Ah=Bh?xg:ci;ci=(e[826144+(Bg+4<<2)+2>>1]|0)+(e[764704+(Gg+4<<2)+2>>1]|0)+(e[764704+(zg+4<<2)+2>>1]|0)|0;xg=ci>>>0>>0;Dh=xg?ci:Ah;Ah=(e[826144+(Bg+5<<2)+2>>1]|0)+(e[764704+(Gg+5<<2)+2>>1]|0)+(e[764704+(zg+5<<2)+2>>1]|0)|0;ci=Ah>>>0>>0;vg=ci?Ah:Dh;Dh=(e[826144+(Bg+6<<2)+2>>1]|0)+(e[764704+(Gg+6<<2)+2>>1]|0)+(e[764704+(zg+6<<2)+2>>1]|0)|0;Ah=Dh>>>0>>0;bi=Ah?Dh:vg;vg=(e[826144+(Bg+7<<2)+2>>1]|0)+(e[764704+(Gg+7<<2)+2>>1]|0)+(e[764704+(zg+7<<2)+2>>1]|0)|0;Dh=vg>>>0>>0;Ag=Dh?vg:bi;bi=(e[826144+(Bg+8<<2)+2>>1]|0)+(e[764704+(Gg+8<<2)+2>>1]|0)+(e[764704+(zg+8<<2)+2>>1]|0)|0;vg=bi>>>0>>0;xf=((e[826144+(Bg+9<<2)+2>>1]|0)+(e[764704+(Gg+9<<2)+2>>1]|0)+(e[764704+(zg+9<<2)+2>>1]|0)|0)>>>0<(vg?bi:Ag)>>>0?9:vg?8:Dh?7:Ah?6:ci?5:xg?4:Bh?3:Ig?2:Fh&1;Fh=xf+Gg|0;Gg=a[764704+(Fh<<2)>>0]|0;Ig=xf+Bg|0;Bg=a[826144+(Ig<<2)>>0]|0;Bh=xf+zg|0;zg=a[764704+(Bh<<2)>>0]|0;if(((Bg|Gg|zg)&255)>=32){X=485;break c}xg=(Bg&255)<<5;a[Yh>>0]=xg|zg&255;a[g+(_h+1)>>0]=(xg|(Gg&255)<<10)>>>8;Gg=a[764704+(Fh<<2)+1>>0]|0;Fh=a[826144+(Ig<<2)+1>>0]|0;Ig=a[764704+(Bh<<2)+1>>0]|0;if(!((Fh&255)<64&((Ig|Gg)&255)<32)){X=487;break c}Bh=(Fh&255)<<5;a[g+(_h+2)>>0]=Bh|Ig&255;a[g+(_h+3)>>0]=(Bh|(Gg&255)<<11)>>>8;Gg=a[Pe>>0]|0;if((xf|0)==6){a[g+(_h+4)>>0]=Gg;a[g+(_h+5)>>0]=a[_d+(af*11|0)+1>>0]|0;a[g+(_h+6)>>0]=a[_d+(af*11|0)+2>>0]|0;a[g+(_h+7)>>0]=a[_d+(af*11|0)+3>>0]|0;break}else{Bh=Gg&255;Gg=d[_d+(af*11|0)+1>>0]|0;Ig=d[_d+(af*11|0)+2>>0]|0;Fh=d[_d+(af*11|0)+3>>0]|0;xg=d[(Gg>>>2&3)+(908511+(xf<<2))>>0]<<2|d[(Gg&3)+(908511+(xf<<2))>>0]|d[(Gg>>>4&3)+(908511+(xf<<2))>>0]<<4|d[(Gg>>>6)+(908511+(xf<<2))>>0]<<6;Gg=d[(Ig>>>2&3)+(908511+(xf<<2))>>0]<<2|d[(Ig&3)+(908511+(xf<<2))>>0]|d[(Ig>>>4&3)+(908511+(xf<<2))>>0]<<4|d[(Ig>>>6)+(908511+(xf<<2))>>0]<<6;Ig=d[(Fh>>>2&3)+(908511+(xf<<2))>>0]<<2|d[(Fh&3)+(908511+(xf<<2))>>0]|d[(Fh>>>4&3)+(908511+(xf<<2))>>0]<<4|d[(Fh>>>6)+(908511+(xf<<2))>>0]<<6;a[g+(_h+4)>>0]=d[(Bh>>>2&3)+(908511+(xf<<2))>>0]<<2|d[(Bh&3)+(908511+(xf<<2))>>0]|d[(Bh>>>4&3)+(908511+(xf<<2))>>0]<<4|d[(Bh>>>6)+(908511+(xf<<2))>>0]<<6;a[g+(_h+5)>>0]=xg;a[g+(_h+6)>>0]=Gg;a[g+(_h+7)>>0]=Ig;break}}else{if((Cg&255)>=4){X=462;break c}Ig=d[ce>>0]|0;Gg=d[ce+1>>0]|0;xg=Gg<<3|Gg>>>2;Gg=d[ce+2>>0]|0;xf=Gg<<3|Gg>>>2;Gg=c[509600+(Ch<<4)+(Fg<<2)>>2]|0;Bh=(Ig<<3|Ig>>>2)+Gg|0;if(Bh>>>0>255)if((Bh|0)<0){bk=0;X=465}else ck=255;else{bk=Bh;X=465}if((X|0)==465){X=0;ck=bk}Bh=xg+Gg|0;if(Bh>>>0>255)if((Bh|0)<0){dk=0;X=468}else ek=255;else{dk=Bh;X=468}if((X|0)==468){X=0;ek=dk}Bh=xf+Gg|0;if(Bh>>>0>255)if((Bh|0)<0){fk=0;X=471}else gk=255;else{fk=Bh;X=471}if((X|0)==471){X=0;gk=fk}Bh=a[898476+(ck<<1)>>0]|0;Gg=a[898988+(ek<<1)>>0]|0;xf=a[898476+(gk<<1)>>0]|0;if(((Gg|Bh|xf)&255)>=32){X=473;break c}xg=(Gg&255)<<5;a[Yh>>0]=xg|xf&255;a[g+(_h+1)>>0]=(xg|(Bh&255)<<10)>>>8;Bh=a[898476+(ck<<1)+1>>0]|0;xg=a[898988+(ek<<1)+1>>0]|0;xf=a[898476+(gk<<1)+1>>0]|0;if(!((xg&255)<64&((xf|Bh)&255)<32)){X=475;break c}Gg=(xg&255)<<5;a[g+(_h+2)>>0]=Gg|xf&255;a[g+(_h+3)>>0]=(Gg|(Bh&255)<<11)>>>8;Bh=g+(_h+4)|0;a[Bh>>0]=85;a[Bh+1>>0]=85;a[Bh+2>>0]=85;a[Bh+3>>0]=85}while(0);qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 12:{_h=Z(Ed+sd|0,n)|0;b[g+_h>>1]=We;b[g+(_h+2)>>1]=af;qg=Ad;rg=zd;sg=yd;tg=xd;break f;break}case 15:{if(!Pb){X=494;break c}_h=Ed<<2;Yh=g+(_h+ud<<2)|0;Fg=Y-_h|0;_h=(Fg|0)>4?4:Fg;Fg=d[ee+($e<<3)+4>>0]|0;Ch=d[ce+1>>0]|0;Cg=Ch<<3|Ch>>>2;Ch=Cg+(c[509600+(Fg<<4)>>2]|0)|0;if(Ch>>>0>255)if((Ch|0)<0){hk=0;X=497}else ik=255;else{hk=Ch;X=497}if((X|0)==497){X=0;ik=hk}c[J>>2]=ik;Ch=(c[509600+(Fg<<4)+4>>2]|0)+Cg|0;if(Ch>>>0>255)if((Ch|0)<0){jk=0;X=500}else kk=255;else{jk=Ch;X=500}if((X|0)==500){X=0;kk=jk}c[Qb>>2]=kk;Ch=(c[509600+(Fg<<4)+8>>2]|0)+Cg|0;if(Ch>>>0>255)if((Ch|0)<0){lk=0;X=503}else mk=255;else{lk=Ch;X=503}if((X|0)==503){X=0;mk=lk}c[Rb>>2]=mk;Ch=(c[509600+(Fg<<4)+12>>2]|0)+Cg|0;if(Ch>>>0>255)if((Ch|0)<0){nk=0;X=506}else ok=255;else{nk=Ch;X=506}if((X|0)==506){X=0;ok=nk}c[Sb>>2]=ok;if((_h|0)==4){if(vd){qg=Ad;rg=zd;sg=yd;tg=xd;break f}else{pk=Yh;qk=0}while(1){Ch=d[_d+(af*11|0)+qk>>0]|0;a[pk+3>>0]=c[J+((Ch&3)<<2)>>2];a[pk+7>>0]=c[J+((Ch>>>2&3)<<2)>>2];a[pk+11>>0]=c[J+((Ch>>>4&3)<<2)>>2];a[pk+15>>0]=c[J+(Ch>>>6<<2)>>2];qk=qk+1|0;if((qk|0)==(ad|0)){qg=Ad;rg=zd;sg=yd;tg=xd;break f}else pk=pk+Tb|0}}if(vd){qg=Ad;rg=zd;sg=yd;tg=xd;break f}Ch=(_h|0)==0;Cg=Yh;Fg=0;while(1){Pg=d[_d+(af*11|0)+Fg>>0]|0;if(!Ch){$h=0;do{a[Cg+($h<<2|3)>>0]=c[J+((Pg>>>($h<<1)&3)<<2)>>2];$h=$h+1|0}while(($h|0)!=(Ld|0))}Fg=Fg+1|0;if((Fg|0)==(ad|0)){qg=Ad;rg=zd;sg=yd;tg=xd;break}else Cg=Cg+Tb|0}break}case 13:{if(!Pb){X=516;break c}Cg=Ed<<2;ib(K,ce,d[ee+($e<<3)+4>>0]|0);if(vd){qg=Ad;rg=zd;sg=yd;tg=xd;break f}Fg=(Y|0)==(Cg|0);Ch=g+(Cg+ud<<2)|0;Cg=0;while(1){Yh=d[_d+(af*11|0)+Cg>>0]|0;if(!Fg){_h=0;do{$h=K+((Yh>>>(_h<<1)&3)<<2)|0;Pg=_h<<2;a[Ch+Pg>>0]=a[$h>>0]|0;a[Ch+(Pg|1)>>0]=a[$h+1>>0]|0;a[Ch+(Pg|2)>>0]=a[$h+2>>0]|0;_h=_h+1|0}while((_h|0)!=(Ld|0))}Cg=Cg+1|0;if((Cg|0)==(ad|0)){qg=Ad;rg=zd;sg=yd;tg=xd;break}else Ch=Ch+Tb|0}break}case 14:{if(!Pb){X=523;break c}Ch=Ed<<2;ib(L,ce,d[ee+($e<<3)+4>>0]|0);if(vd){qg=Ad;rg=zd;sg=yd;tg=xd;break f}Cg=(Y|0)==(Ch|0);Fg=g+(Ch+ud<<2)|0;Ch=0;while(1){_h=d[_d+(af*11|0)+Ch>>0]|0;if(!Cg){Yh=0;do{$h=L+((_h>>>(Yh<<1)&3)<<2)|0;Pg=Yh<<2;a[Fg+Pg>>0]=a[$h>>0]|0;a[Fg+(Pg|1)>>0]=a[$h+1>>0]|0;a[Fg+(Pg|2)>>0]=a[$h+2>>0]|0;a[Fg+(Pg|3)>>0]=-1;Yh=Yh+1|0}while((Yh|0)!=(Ld|0))}Ch=Ch+1|0;if((Ch|0)==(ad|0)){qg=Ad;rg=zd;sg=yd;tg=xd;break}else Fg=Fg+Tb|0}break}case 17:case 16:{if(!Ub){X=530;break c}Fg=Ed<<2;ib(M,ce,d[ee+($e<<3)+4>>0]|0);if(Vb){Ch=c[M>>2]|0;b[N>>1]=Ch>>>5&2016|Ch<<8&63488|Ch>>>19&31;Ch=c[Yb>>2]|0;b[Zb>>1]=Ch>>>5&2016|Ch<<8&63488|Ch>>>19&31;Ch=c[_b>>2]|0;b[$b>>1]=Ch>>>5&2016|Ch<<8&63488|Ch>>>19&31;Ch=c[bc>>2]|0;b[cc>>1]=Ch>>>5&2016|Ch<<8&63488|Ch>>>19&31}else{b[N>>1]=(d[ec>>0]|0)>>>2<<5|(d[dc>>0]|0)>>>3<<11|(d[M>>0]|0)>>>3;b[ic>>1]=(d[hc>>0]|0)>>>2<<5|(d[gc>>0]|0)>>>3<<11|(d[fc>>0]|0)>>>3;b[mc>>1]=(d[lc>>0]|0)>>>2<<5|(d[kc>>0]|0)>>>3<<11|(d[jc>>0]|0)>>>3;b[qc>>1]=(d[pc>>0]|0)>>>2<<5|(d[oc>>0]|0)>>>3<<11|(d[nc>>0]|0)>>>3}if(vd){qg=Ad;rg=zd;sg=yd;tg=xd;break f}Ch=(Y|0)==(Fg|0);Cg=g+(Fg+ud<<1)|0;Fg=0;while(1){Yh=d[_d+(af*11|0)+Fg>>0]|0;if(!Ch){_h=0;do{b[Cg+(_h<<1)>>1]=b[N+((Yh>>>(_h<<1)&3)<<1)>>1]|0;_h=_h+1|0}while((_h|0)!=(Ld|0))}Fg=Fg+1|0;if((Fg|0)==(ad|0)){qg=Ad;rg=zd;sg=yd;tg=xd;break}else Cg=Cg+Wb|0}break}case 18:{if(!Ub){X=541;break c}Cg=Ed<<2;ib(O,ce,d[ee+($e<<3)+4>>0]|0);Fg=c[O>>2]|0;b[P>>1]=Fg>>>4&3840|Fg<<8&61440|Fg>>>16&240;Fg=c[rc>>2]|0;b[sc>>1]=Fg>>>4&3840|Fg<<8&61440|Fg>>>16&240;Fg=c[tc>>2]|0;b[uc>>1]=Fg>>>4&3840|Fg<<8&61440|Fg>>>16&240;Fg=c[vc>>2]|0;b[wc>>1]=Fg>>>4&3840|Fg<<8&61440|Fg>>>16&240;if(vd){qg=Ad;rg=zd;sg=yd;tg=xd;break f}Fg=(Y|0)==(Cg|0);Ch=g+(Cg+ud<<1)|0;Cg=0;while(1){_h=d[_d+(af*11|0)+Cg>>0]|0;if(!Fg){Yh=0;do{Pg=Ch+(Yh<<1)|0;b[Pg>>1]=e[Pg>>1]&15|e[P+((_h>>>(Yh<<1)&3)<<1)>>1];Yh=Yh+1|0}while((Yh|0)!=(Ld|0))}Cg=Cg+1|0;if((Cg|0)==(ad|0)){qg=Ad;rg=zd;sg=yd;tg=xd;break}else Ch=Ch+Wb|0}break}case 20:{if(!Ub){X=549;break c}Ch=Ed<<2;ib(Q,ce,d[ee+($e<<3)+4>>0]|0);Cg=c[Q>>2]|0;b[R>>1]=Cg<<8&61440|Cg>>>16&240|Cg>>>4&3840|15;Cg=c[xc>>2]|0;b[yc>>1]=Cg<<8&61440|Cg>>>16&240|Cg>>>4&3840|15;Cg=c[zc>>2]|0;b[Ac>>1]=Cg<<8&61440|Cg>>>16&240|Cg>>>4&3840|15;Cg=c[Bc>>2]|0;b[Cc>>1]=Cg<<8&61440|Cg>>>16&240|Cg>>>4&3840|15;if(vd){qg=Ad;rg=zd;sg=yd;tg=xd;break f}Cg=(Y|0)==(Ch|0);Fg=g+(Ch+ud<<1)|0;Ch=0;while(1){Yh=d[_d+(af*11|0)+Ch>>0]|0;if(!Cg){_h=0;do{b[Fg+(_h<<1)>>1]=b[R+((Yh>>>(_h<<1)&3)<<1)>>1]|0;_h=_h+1|0}while((_h|0)!=(Ld|0))}Ch=Ch+1|0;if((Ch|0)==(ad|0)){qg=Ad;rg=zd;sg=yd;tg=xd;break}else Fg=Fg+Wb|0}break}case 19:{if(!Ub){X=557;break c}Fg=Ed<<2;ib(S,ce,d[ee+($e<<3)+4>>0]|0);b[T>>1]=(d[Dc>>0]|0)>>>4&255;b[Fc>>1]=(d[Ec>>0]|0)>>>4&255;b[Jc>>1]=(d[Gc>>0]|0)>>>4&255;b[Lc>>1]=(d[Kc>>0]|0)>>>4&255;if(vd){qg=Ad;rg=zd;sg=yd;tg=xd;break f}Ch=(Y|0)==(Fg|0);Cg=g+(Fg+ud<<1)|0;Fg=0;while(1){_h=d[_d+(af*11|0)+Fg>>0]|0;if(!Ch){Yh=0;do{b[Cg+(Yh<<1)>>1]=b[T+((_h>>>(Yh<<1)&3)<<1)>>1]|0;Yh=Yh+1|0}while((Yh|0)!=(Ld|0))}Fg=Fg+1|0;if((Fg|0)==(ad|0)){qg=Ad;rg=zd;sg=yd;tg=xd;break}else Cg=Cg+Wb|0}break}default:{X=564;break c}}while(0)}while(0);Ed=Ed+1|0;if(Ed>>>0>=h>>>0){cd=rg;dd=sg;ed=tg;fd=Xe;gd=Ye;hd=Ze;id=qg;jd=fe;kd=_e;ld=Qd;md=$e;nd=Rd;break d}else{xd=tg;yd=sg;zd=rg;Ad=qg;Bd=Ze;Cd=Ye;Dd=Xe;Fd=fe;Gd=_e;Hd=Qd;Id=Id+4|0;Jd=$e;Kd=Rd}}}while(0);Vc=Vc+1|0;if(Vc>>>0>=j>>>0){rk=ld;X=567;break}else{Mc=ed;Nc=dd;Oc=cd;Pc=id;Qc=hd;Tc=gd;Uc=fd;Wc=jd;Xc=kd;Yc=ld;Zc=Zc+4|0;_c=md;$c=nd}}switch(X|0){case 31:{ma(900658,900560,429,900681);break}case 36:{ma(900637,900560,439,900681);break}case 47:{ma(900637,900560,316,900627);break}case 50:{ma(896047,900560,419,900878);break}case 56:{if(!fa){da=0;break a}Ic(fa);da=0;break a;break}case 59:{if(!fa){da=0;break a}Ic(fa);da=0;break a;break}case 65:{if(!fa){da=0;break a}Ic(fa);da=0;break a;break}case 69:{ma(900658,900560,429,900681);break}case 74:{ma(900637,900560,439,900681);break}case 85:{ma(900658,900560,429,900681);break}case 90:{ma(900637,900560,439,900681);break}case 97:{ma(900658,900560,429,900681);break}case 102:{ma(900637,900560,439,900681);break}case 112:{ma(900637,900560,316,900627);break}case 115:{if(!fa){da=0;break a}Ic(fa);da=0;break a;break}case 120:{ma(895715,895663,6571,895699);break}case 122:{if(!fa){da=0;break a}Ic(fa);da=0;break a;break}case 131:{if(!fa){da=0;break a}Ic(fa);da=0;break a;break}case 139:{ma(900905,895663,325,900889);break}case 147:{ma(900946,895663,660,900973);break}case 157:{ma(900696,900560,703,900865);break}case 168:{ma(900696,900560,703,900865);break}case 181:{ma(900905,895663,325,900889);break}case 201:{ma(895747,895663,6686,895699);break}case 203:{ma(895788,895663,6687,895699);break}case 205:{ma(895829,895663,6688,895699);break}case 207:{ma(901530,895663,2771,900992);break}case 209:{ma(901563,895663,2781,900992);break}case 211:{ma(901563,895663,2812,901580);break}case 214:{ma(895870,895663,6705,895699);break}case 216:{ma(900905,895663,325,900889);break}case 236:{ma(895747,895663,6722,895699);break}case 238:{ma(895788,895663,6723,895699);break}case 240:{ma(895829,895663,6724,895699);break}case 248:{ma(895884,895663,6737,895699);break}case 251:{ma(902646,895663,2836,902629);break}case 253:{ma(901563,895663,2865,902629);break}case 255:{ma(902679,895663,2853,902629);break}case 257:{ma(901563,895663,2865,902629);break}case 260:{ma(901530,895663,2843,902629);break}case 262:{ma(901563,895663,2865,902629);break}case 265:{ma(902722,895663,2860,902629);break}case 267:{ma(901563,895663,2865,902629);break}case 276:{ma(903022,895663,3571,903050);break}case 285:{ma(900946,895663,645,900956);break}case 302:{ma(903601,895663,3755,903586);break}case 309:{ma(903601,895663,3755,903586);break}case 316:{ma(900946,895663,660,900973);break}case 338:{ma(903601,895663,3755,903586);break}case 345:{ma(903601,895663,3755,903586);break}case 351:{ma(900946,895663,660,900973);break}case 381:{ma(900946,895663,645,900956);break}case 462:{ma(900946,895663,645,900956);break}case 473:{ma(901530,895663,5692,908551);break}case 475:{ma(908565,895663,5700,908598);break}case 480:{ma(901530,895663,5692,908551);break}case 482:{ma(908565,895663,5700,908598);break}case 485:{ma(901530,895663,5692,908551);break}case 487:{ma(908565,895663,5700,908598);break}case 494:{ma(895931,895663,6822,895699);break}case 516:{ma(895931,895663,6862,895699);break}case 523:{ma(895931,895663,6891,895699);break}case 530:{ma(895989,895663,6922,895699);break}case 541:{ma(895989,895663,6957,895699);break}case 549:{ma(895989,895663,6988,895699);break}case 557:{ma(895989,895663,7015,895699);break}case 564:{ma(896047,895663,7042,895699);break}case 567:{if(!rk)break b;else{da=0;break a}break}case 680:{ma(896047,900560,419,900878);break}}}while(0);switch(m|0){case 3:{$c=h+-1|0;_c=j+-1|0;if(!$c)sk=0;else{Zc=$c;Yc=0;while(1){Zc=Zc>>>1;Xc=Yc+1|0;if(!Zc){sk=Xc;break}else Yc=Xc}}if(!_c)tk=0;else{Yc=_c;Zc=0;while(1){Yc=Yc>>>1;Xc=Zc+1|0;if(!Yc){tk=Xc;break}else Zc=Xc}}Zc=sk>>>0>>0?sk:tk;Yc=Zc<<1;Xc=(1<0){Wc=(h|0)>0;Uc=(h|0)==(j|0);Tc=G+4|0;Qc=G+8|0;Pc=G+12|0;Oc=y+32|0;Nc=z+32|0;Mc=A+4|0;Vc=y+36|0;Wb=z+36|0;Kc=A+8|0;Lc=y+40|0;Gc=z+40|0;Jc=y+16|0;Ec=y+4|0;Fc=y+20|0;Dc=z+16|0;Ub=z+4|0;Cc=z+20|0;Bc=y+8|0;Ac=y+24|0;zc=z+8|0;yc=z+24|0;xc=h>>>0>j>>>0;wc=o?0:($c|0)<0?$c:0;vc=(o?1:($c|0)<1?$c:1)&$c;uc=0;tc=0;o:while(1){sc=0;do{rc=sc+tc|0;nc=rc+-1|0;if(o){uk=nc;vk=-1}else{uk=(rc|0)<1?0:(nc|0)>(_c|0)?_c:nc;vk=0}nc=Z(uk&_c,h)|0;c[A+(sc<<2)>>2]=ea+(nc<<2);rc=c[ea+((vk&$c)+nc<<2)>>2]|0;if(!(rc&32768)){X=579;break o}oc=rc&30;c[y+(sc<<2)>>2]=((((rc>>>10&31)+(rc>>>5&31)+(oc>>>4|oc)|0)*255|0)>>>0)/31|0;oc=rc>>>16;if(!(oc&32768)){X=581;break o}c[z+(sc<<2)>>2]=((((rc>>>26&31)+(rc>>>21&31)+(oc&31)|0)*255|0)>>>0)/31|0;oc=c[ea+(nc+wc<<2)>>2]|0;if(!(oc&32768)){X=579;break o}rc=oc&30;c[y+16+(sc<<2)>>2]=((((oc>>>10&31)+(oc>>>5&31)+(rc>>>4|rc)|0)*255|0)>>>0)/31|0;rc=oc>>>16;if(!(rc&32768)){X=581;break o}c[z+16+(sc<<2)>>2]=((((oc>>>26&31)+(oc>>>21&31)+(rc&31)|0)*255|0)>>>0)/31|0;rc=c[ea+(nc+vc<<2)>>2]|0;if(!(rc&32768)){X=579;break o}nc=rc&30;c[y+32+(sc<<2)>>2]=((((rc>>>10&31)+(rc>>>5&31)+(nc>>>4|nc)|0)*255|0)>>>0)/31|0;nc=rc>>>16;if(!(nc&32768)){X=581;break o}c[z+32+(sc<<2)>>2]=((((rc>>>26&31)+(rc>>>21&31)+(nc&31)|0)*255|0)>>>0)/31|0;sc=sc+1|0}while((sc|0)<3);if(Wc){sc=e[887584+(tc>>8<<1)>>1]<<16|e[887584+((tc&255)<<1)>>1];nc=c[A>>2]|0;rc=c[Mc>>2]|0;oc=c[Kc>>2]|0;pc=tc>>Zc<>8<<1)>>1]<<17|e[887584+((jc&255)<<1)>>1]<<1;do if(!Uc){lc=kc&Xc;if(xc){wk=lc|jc>>Zc<>2]=c[ea+(qc<<2)>>2];kc=fa+(qc<<3)|0;lc=c[kc>>2]|0;mc=lc>>>29;fc=(d[909699+(lc>>>11&31)>>0]|0)+(d[909699+(lc>>>3&31)>>0]|0)+(d[909699+(lc>>>19&31)>>0]|0)<<4;c[G>>2]=fc+(c[509728+(mc<<4)+8>>2]|0);c[Tc>>2]=fc+(c[509728+(mc<<4)+12>>2]|0);c[Qc>>2]=fc+(c[509728+(mc<<4)+4>>2]|0);c[Pc>>2]=(c[509728+(mc<<4)>>2]|0)+fc;jc=jc+1|0;fc=(o?jc:(jc|0)>($c|0)?$c:jc)&$c;mc=c[nc+(fc<<2)>>2]|0;if(!(mc&32768)){X=590;break o}lc=mc&30;c[Oc>>2]=((((mc>>>10&31)+(mc>>>5&31)+(lc>>>4|lc)|0)*255|0)>>>0)/31|0;lc=mc>>>16;if(!(lc&32768)){X=592;break o}c[Nc>>2]=((((mc>>>26&31)+(mc>>>21&31)+(lc&31)|0)*255|0)>>>0)/31|0;lc=c[rc+(fc<<2)>>2]|0;if(!(lc&32768)){X=594;break o}mc=lc&30;c[Vc>>2]=((((lc>>>10&31)+(lc>>>5&31)+(mc>>>4|mc)|0)*255|0)>>>0)/31|0;mc=lc>>>16;if(!(mc&32768)){X=596;break o}c[Wb>>2]=((((lc>>>26&31)+(lc>>>21&31)+(mc&31)|0)*255|0)>>>0)/31|0;mc=c[oc+(fc<<2)>>2]|0;if(!(mc&32768)){X=598;break o}fc=mc&30;c[Lc>>2]=((((mc>>>10&31)+(mc>>>5&31)+(fc>>>4|fc)|0)*255|0)>>>0)/31|0;fc=mc>>>16;if(!(fc&32768)){X=600;break o}lc=((((mc>>>26&31)+(mc>>>21&31)+(fc&31)|0)*255|0)>>>0)/31|0;c[Gc>>2]=lc;fc=d[kc+7>>0]|0;mc=d[kc+5>>0]|0;gc=mc<<4&240|fc&15;hc=mc&240|fc>>>4;fc=d[kc+6>>0]|0;mc=d[kc+4>>0]|0;kc=mc<<4&240|fc&15;ic=mc&240|fc>>>4;fc=c[y>>2]|0;mc=c[Jc>>2]|0;dc=c[Ec>>2]|0;ec=c[Fc>>2]|0;cc=c[z>>2]|0;bc=c[Dc>>2]|0;$b=c[Ub>>2]|0;_b=c[Cc>>2]|0;Zb=mc+fc+dc+ec<<2;Yb=bc+cc+$b+_b<<2;Vb=Yb-Zb|0;Tb=(c[G+(d[908613+gc>>0]<<2)>>2]|0)-Zb<<4;Pb=(Yb|0)<(Zb|0);Zb=Pb?0-Tb|0:Tb;Tb=Pb?0-Vb|0:Vb;Vb=fc<<1;Pb=mc*6|0;Yb=ec*6|0;Sb=Pb+Vb+(dc<<1)+Yb|0;Rb=cc<<1;Qb=bc*6|0;Mb=_b*6|0;Ob=Qb+Rb+($b<<1)+Mb|0;Nb=Ob-Sb|0;Qa=(c[G+(d[908613+hc>>0]<<2)>>2]|0)-Sb<<4;Na=(Ob|0)<(Sb|0);Sb=Na?0-Qa|0:Qa;Qa=Na?0-Nb|0:Nb;Nb=(mc<<1)+Vb+(dc*6|0)+Yb|0;Vb=(bc<<1)+Rb+($b*6|0)+Mb|0;Rb=Vb-Nb|0;Na=(c[G+(d[908869+gc>>0]<<2)>>2]|0)-Nb<<4;Ob=(Vb|0)<(Nb|0);Nb=Ob?0-Na|0:Na;Na=Ob?0-Rb|0:Rb;Rb=mc*3|0;Ob=dc*3|0;Vb=ec*9|0;Pa=Rb+fc+Ob+Vb|0;fc=bc*3|0;Ma=$b*3|0;Oa=_b*9|0;Jb=fc+cc+Ma+Oa|0;cc=Jb-Pa|0;Ib=(c[G+(d[908869+hc>>0]<<2)>>2]|0)-Pa<<4;Hb=(Jb|0)<(Pa|0);Pa=Hb?0-Ib|0:Ib;Ib=Hb?0-cc|0:cc;cc=c[Oc>>2]|0;Hb=c[Vc>>2]|0;Jb=c[Nc>>2]|0;Fb=c[Wb>>2]|0;Eb=ec+mc<<3;Db=_b+bc<<3;Cb=Db-Eb|0;Bb=(c[G+(d[908613+kc>>0]<<2)>>2]|0)-Eb<<4;Ab=(Db|0)<(Eb|0);Eb=Ab?0-Bb|0:Bb;Bb=Ab?0-Cb|0:Cb;Cb=Yb+Pb+(cc<<1)+(Hb<<1)|0;Pb=Mb+Qb+(Jb<<1)+(Fb<<1)|0;Qb=Pb-Cb|0;Mb=(c[G+(d[908613+ic>>0]<<2)>>2]|0)-Cb<<4;Yb=(Pb|0)<(Cb|0);Cb=Yb?0-Mb|0:Mb;Mb=Yb?0-Qb|0:Qb;Qb=ec*12|0;Yb=Qb+(mc<<2)|0;mc=_b*12|0;Pb=mc+(bc<<2)|0;bc=Pb-Yb|0;Ab=(c[G+(d[908869+kc>>0]<<2)>>2]|0)-Yb<<4;Db=(Pb|0)<(Yb|0);Yb=Db?0-Ab|0:Ab;Ab=Db?0-bc|0:bc;bc=Hb*3|0;Db=Vb+Rb+cc+bc|0;cc=Fb*3|0;Rb=Oa+fc+Jb+cc|0;Jb=Rb-Db|0;fc=(c[G+(d[908869+ic>>0]<<2)>>2]|0)-Db<<4;Pb=(Rb|0)<(Db|0);Db=Pb?0-fc|0:fc;fc=Pb?0-Jb|0:Jb;Jb=c[Bc>>2]|0;Pb=c[Ac>>2]|0;Rb=c[zc>>2]|0;zb=c[yc>>2]|0;yb=ec+dc|0;xb=yb<<3;vb=_b+$b|0;ub=vb<<3;tb=ub-xb|0;sb=(c[G+(d[909125+gc>>0]<<2)>>2]|0)-xb<<4;rb=(ub|0)<(xb|0);xb=rb?0-sb|0:sb;sb=rb?0-tb|0:tb;tb=Qb+(dc<<2)|0;dc=mc+($b<<2)|0;$b=dc-tb|0;rb=(c[G+(d[909125+hc>>0]<<2)>>2]|0)-tb<<4;ub=(dc|0)<(tb|0);tb=ub?0-rb|0:rb;rb=ub?0-$b|0:$b;$b=(Jb<<1)+(yb*6|0)+(Pb<<1)|0;yb=(Rb<<1)+(vb*6|0)+(zb<<1)|0;vb=yb-$b|0;ub=(c[G+(d[909381+gc>>0]<<2)>>2]|0)-$b<<4;gc=(yb|0)<($b|0);$b=gc?0-ub|0:ub;ub=gc?0-vb|0:vb;vb=Pb*3|0;gc=Vb+Ob+Jb+vb|0;Jb=zb*3|0;Ob=Oa+Ma+Rb+Jb|0;Rb=Ob-gc|0;Ma=(c[G+(d[909381+hc>>0]<<2)>>2]|0)-gc<<4;hc=(Ob|0)<(gc|0);gc=hc?0-Rb|0:Rb;Rb=hc?0-Ma|0:Ma;Ma=ec<<4;ec=_b<<4;_b=ec-Ma|0;hc=(c[G+(d[909125+kc>>0]<<2)>>2]|0)-Ma<<4;Ob=(ec|0)<(Ma|0);Ma=Ob?0-_b|0:_b;_b=Ob?0-hc|0:hc;hc=(Hb<<2)+Qb|0;Hb=(Fb<<2)+mc|0;Fb=Hb-hc|0;Ob=(c[G+(d[909125+ic>>0]<<2)>>2]|0)-hc<<4;ec=(Hb|0)<(hc|0);hc=ec?0-Fb|0:Fb;Fb=ec?0-Ob|0:Ob;Ob=(Pb<<2)+Qb|0;Qb=(zb<<2)+mc|0;mc=Qb-Ob|0;zb=(c[G+(d[909381+kc>>0]<<2)>>2]|0)-Ob<<4;kc=(Qb|0)<(Ob|0);Ob=kc?0-mc|0:mc;mc=kc?0-zb|0:zb;zb=bc+Vb+vb+(c[Lc>>2]|0)|0;vb=Oa+lc+cc+Jb|0;Jb=vb-zb|0;cc=(c[G+(d[909381+ic>>0]<<2)>>2]|0)-zb<<4;ic=(vb|0)<(zb|0);zb=ic?0-Jb|0:Jb;Jb=ic?0-cc|0:cc;c[g+(wk<<3)>>2]=((Sb|0)>(Qa*13|0)?12:(Sb|0)>(Qa<<3|0)?8:(Sb|0)>(Qa*3|0)?4:0)|((Zb|0)>(Tb*13|0)?3:(Zb|0)>(Tb<<3|0)?2:(Zb|0)>(Tb*3|0)&1)|((Nb|0)>(Na*13|0)?768:(Nb|0)>(Na<<3|0)?512:(Nb|0)>(Na*3|0)?256:0)|((Pa|0)>(Ib*13|0)?3072:(Pa|0)>(Ib<<3|0)?2048:(Pa|0)>(Ib*3|0)?1024:0)|((Eb|0)>(Bb*13|0)?48:(Eb|0)>(Bb<<3|0)?32:(Eb|0)>(Bb*3|0)?16:0)|((Cb|0)>(Mb*13|0)?192:(Cb|0)>(Mb<<3|0)?128:(Cb|0)>(Mb*3|0)?64:0)|((Yb|0)>(Ab*13|0)?12288:(Yb|0)>(Ab<<3|0)?8192:(Yb|0)>(Ab*3|0)?4096:0)|((Db|0)>(fc*13|0)?49152:(Db|0)>(fc<<3|0)?32768:(Db|0)>(fc*3|0)?16384:0)|((xb|0)>(sb*13|0)?196608:(xb|0)>(sb<<3|0)?131072:(xb|0)>(sb*3|0)?65536:0)|((tb|0)>(rb*13|0)?786432:(tb|0)>(rb<<3|0)?524288:(tb|0)>(rb*3|0)?262144:0)|(($b|0)>(ub*13|0)?50331648:($b|0)>(ub<<3|0)?33554432:($b|0)>(ub*3|0)?16777216:0)|((Rb|0)>(gc*13|0)?201326592:(Rb|0)>(gc<<3|0)?134217728:(Rb|0)>(gc*3|0)?67108864:0)|((_b|0)>(Ma*13|0)?3145728:(_b|0)>(Ma<<3|0)?2097152:(_b|0)>(Ma*3|0)?1048576:0)|((Fb|0)>(hc*13|0)?12582912:(Fb|0)>(hc<<3|0)?8388608:(Fb|0)>(hc*3|0)?4194304:0)|((mc|0)>(Ob*13|0)?805306368:(mc|0)>(Ob<<3|0)?536870912:(mc|0)>(Ob*3|0)?268435456:0)|((Jb|0)>(zb*13|0)?-1073741824:(Jb|0)>(zb<<3|0)?-2147483648:(Jb|0)>(zb*3|0)?1073741824:0);c[y>>2]=c[Jc>>2];c[Jc>>2]=c[Oc>>2];c[Ec>>2]=c[Fc>>2];c[Fc>>2]=c[Vc>>2];c[Bc>>2]=c[Ac>>2];c[Ac>>2]=c[Lc>>2];c[z>>2]=c[Dc>>2];c[Dc>>2]=c[Nc>>2];c[Ub>>2]=c[Cc>>2];c[Cc>>2]=c[Wb>>2];c[zc>>2]=c[yc>>2];c[yc>>2]=c[Gc>>2];zb=qc+1|0;if((jc|0)>=(h|0)){xk=zb;break}else qc=zb}}else xk=uc;tc=tc+1|0;if((tc|0)>=(j|0))break n;else uc=xk}if((X|0)==579)ma(909637,895663,2991,909653);else if((X|0)==581)ma(909637,895663,3006,909676);else if((X|0)==590)ma(909637,895663,2991,909653);else if((X|0)==592)ma(909637,895663,3006,909676);else if((X|0)==594)ma(909637,895663,2991,909653);else if((X|0)==596)ma(909637,895663,3006,909676);else if((X|0)==598)ma(909637,895663,2991,909653);else if((X|0)==600)ma(909637,895663,3006,909676)}while(0);break}case 4:{$c=c[f>>2]|0;Yc=c[s>>2]|0;Zc=h+-1|0;Xc=j+-1|0;if(!Zc)yk=0;else{_c=Zc;uc=0;while(1){_c=_c>>>1;tc=uc+1|0;if(!_c){yk=tc;break}else uc=tc}}if(!Xc)zk=0;else{uc=Xc;_c=0;while(1){uc=uc>>>1;tc=_c+1|0;if(!uc){zk=tc;break}else _c=tc}}_c=yk>>>0>>0?yk:zk;uc=_c<<1;tc=(1<0){Gc=(h|0)>0;yc=(h|0)==(j|0);zc=G+4|0;Wb=G+8|0;Cc=G+12|0;Ub=H+4|0;Nc=H+8|0;Dc=H+12|0;Lc=y+32|0;Ac=z+32|0;Bc=A+4|0;Vc=y+36|0;Fc=z+36|0;Ec=A+8|0;Oc=y+40|0;Jc=z+40|0;Pc=y+16|0;Qc=y+4|0;Tc=y+20|0;xc=z+16|0;Uc=z+4|0;Kc=z+20|0;Mc=y+8|0;Wc=y+24|0;vc=z+8|0;wc=z+24|0;qc=h>>>0>j>>>0;jc=0;oc=0;while(1){rc=0;do{nc=rc+oc|0;pc=nc+-1|0;if(o)Ak=pc;else Ak=(nc|0)<1?0:(pc|0)>(Xc|0)?Xc:pc;pc=Z(Ak&Xc,h)|0;c[A+(rc<<2)>>2]=ea+(pc<<2);nc=0;do{sc=nc+-1|0;if(o)Bk=sc;else Bk=(nc|0)<1?0:(sc|0)>(Zc|0)?Zc:sc;sc=c[ea+((Bk&Zc)+pc<<2)>>2]|0;if(!(sc&32768)){Ck=a[909755+(sc>>>12&7)>>0]|0;Dk=d[909747+(sc>>>1&7)>>0]|0;Ek=d[909731+(sc>>>4&15)>>0]|0;Fk=d[909731+(sc>>>8&15)>>0]|0}else{Ck=-1;Dk=d[909731+(sc>>>1&15)>>0]|0;Ek=d[909699+(sc>>>5&31)>>0]|0;Fk=d[909699+(sc>>>10&31)>>0]|0}c[y+(nc<<4)+(rc<<2)>>2]=Ek+Fk+Dk+(Ck&255);zb=sc>>>16;if(!(zb&32768)){Gk=a[909755+(sc>>>28&7)>>0]|0;Hk=d[909731+(zb&15)>>0]|0;Ik=d[909731+(sc>>>20&15)>>0]|0;Jk=d[909731+(sc>>>24&15)>>0]|0}else{Gk=-1;Hk=d[909699+(zb&31)>>0]|0;Ik=d[909699+(sc>>>21&31)>>0]|0;Jk=d[909699+(sc>>>26&31)>>0]|0}c[z+(nc<<4)+(rc<<2)>>2]=Ik+Jk+Hk+(Gk&255);nc=nc+1|0}while((nc|0)!=3);rc=rc+1|0}while((rc|0)!=3);if(Gc){rc=Z(oc,h)|0;nc=e[887584+(oc>>8<<1)>>1]<<16|e[887584+((oc&255)<<1)>>1];pc=c[A>>2]|0;sc=c[Bc>>2]|0;zb=c[Ec>>2]|0;Jb=oc>>_c<>2]|0;mc=c[Tc>>2]|0;hc=c[Pc>>2]|0;Fb=c[y>>2]|0;Ma=c[Uc>>2]|0;_b=c[Kc>>2]|0;gc=c[xc>>2]|0;Rb=c[z>>2]|0;ub=c[Mc>>2]|0;$b=c[Wc>>2]|0;rb=c[vc>>2]|0;tb=c[wc>>2]|0;sb=jc;xb=0;while(1){fc=v+(xb+rc<<2)|0;Db=e[fc>>1]|0;Ab=$c+(Db<<3)|0;Yb=e[fc+2>>1]|0;fc=nc|e[887584+(xb>>8<<1)>>1]<<17|e[887584+((xb&255)<<1)>>1]<<1;do if(!yc){Mb=fc&tc;if(qc){Kk=Mb|xb>>_c<>2]=c[ea+(sb<<2)>>2];fc=fa+(sb<<3)|0;Mb=c[fc>>2]|0;Cb=Mb>>>29;Bb=(d[909699+(Mb>>>11&31)>>0]|0)+(d[909699+(Mb>>>3&31)>>0]|0)+(d[909699+(Mb>>>19&31)>>0]|0)<<4;Mb=Bb+(c[509728+(Cb<<4)>>2]|0)|0;c[G>>2]=(Mb|0)<0?0:(Mb|0)>12240?12240:Mb;Mb=Bb+(c[509728+(Cb<<4)+4>>2]|0)|0;c[zc>>2]=(Mb|0)<0?0:(Mb|0)>12240?12240:Mb;Mb=Bb+(c[509728+(Cb<<4)+8>>2]|0)|0;c[Wb>>2]=(Mb|0)<0?0:(Mb|0)>12240?12240:Mb;Mb=(c[509728+(Cb<<4)+12>>2]|0)+Bb|0;c[Cc>>2]=(Mb|0)<0?0:(Mb|0)>12240?12240:Mb;Mb=d[909699+(d[Ab+1>>0]|0)>>0]<<4;Bb=d[$c+(Db<<3)+4>>0]|0;Cb=Mb+(c[509856+(Bb<<4)>>2]|0)|0;c[H>>2]=(Cb|0)<0?0:(Cb|0)>4080?4080:Cb;Cb=(c[509856+(Bb<<4)+4>>2]|0)+Mb|0;c[Ub>>2]=(Cb|0)<0?0:(Cb|0)>4080?4080:Cb;Cb=(c[509856+(Bb<<4)+8>>2]|0)+Mb|0;c[Nc>>2]=(Cb|0)<0?0:(Cb|0)>4080?4080:Cb;Cb=(c[509856+(Bb<<4)+12>>2]|0)+Mb|0;c[Dc>>2]=(Cb|0)<0?0:(Cb|0)>4080?4080:Cb;xb=xb+1|0;Cb=(o?xb:(xb|0)>(Zc|0)?Zc:xb)&Zc;Mb=c[pc+(Cb<<2)>>2]|0;if(!(Mb&32768)){Lk=a[909755+(Mb>>>12&7)>>0]|0;Mk=d[909747+(Mb>>>1&7)>>0]|0;Nk=d[909731+(Mb>>>4&15)>>0]|0;Ok=d[909731+(Mb>>>8&15)>>0]|0}else{Lk=-1;Mk=d[909731+(Mb>>>1&15)>>0]|0;Nk=d[909699+(Mb>>>5&31)>>0]|0;Ok=d[909699+(Mb>>>10&31)>>0]|0}Bb=Nk+Ok+Mk+(Lk&255)|0;Eb=Mb>>>16;if(!(Eb&32768)){Pk=a[909755+(Mb>>>28&7)>>0]|0;Qk=d[909731+(Eb&15)>>0]|0;Rk=d[909731+(Mb>>>20&15)>>0]|0;Sk=d[909731+(Mb>>>24&15)>>0]|0}else{Pk=-1;Qk=d[909699+(Eb&31)>>0]|0;Rk=d[909699+(Mb>>>21&31)>>0]|0;Sk=d[909699+(Mb>>>26&31)>>0]|0}Mb=Rk+Sk+Qk+(Pk&255)|0;Eb=c[sc+(Cb<<2)>>2]|0;if(!(Eb&32768)){Tk=a[909755+(Eb>>>12&7)>>0]|0;Uk=d[909747+(Eb>>>1&7)>>0]|0;Vk=d[909731+(Eb>>>4&15)>>0]|0;Wk=d[909731+(Eb>>>8&15)>>0]|0}else{Tk=-1;Uk=d[909731+(Eb>>>1&15)>>0]|0;Vk=d[909699+(Eb>>>5&31)>>0]|0;Wk=d[909699+(Eb>>>10&31)>>0]|0}Ib=Vk+Wk+Uk+(Tk&255)|0;Pa=Eb>>>16;if(!(Pa&32768)){Xk=a[909755+(Eb>>>28&7)>>0]|0;Yk=d[909731+(Pa&15)>>0]|0;Zk=d[909731+(Eb>>>20&15)>>0]|0;_k=d[909731+(Eb>>>24&15)>>0]|0}else{Xk=-1;Yk=d[909699+(Pa&31)>>0]|0;Zk=d[909699+(Eb>>>21&31)>>0]|0;_k=d[909699+(Eb>>>26&31)>>0]|0}Eb=Zk+_k+Yk+(Xk&255)|0;Pa=c[zb+(Cb<<2)>>2]|0;if(!(Pa&32768)){$k=a[909755+(Pa>>>12&7)>>0]|0;al=d[909747+(Pa>>>1&7)>>0]|0;bl=d[909731+(Pa>>>4&15)>>0]|0;cl=d[909731+(Pa>>>8&15)>>0]|0}else{$k=-1;al=d[909731+(Pa>>>1&15)>>0]|0;bl=d[909699+(Pa>>>5&31)>>0]|0;cl=d[909699+(Pa>>>10&31)>>0]|0}Cb=bl+cl+al+($k&255)|0;Na=Pa>>>16;if(!(Na&32768)){dl=a[909755+(Pa>>>28&7)>>0]|0;el=d[909731+(Na&15)>>0]|0;fl=d[909731+(Pa>>>20&15)>>0]|0;gl=d[909731+(Pa>>>24&15)>>0]|0}else{dl=-1;el=d[909699+(Na&31)>>0]|0;fl=d[909699+(Pa>>>21&31)>>0]|0;gl=d[909699+(Pa>>>26&31)>>0]|0}Pa=fl+gl+el+(dl&255)|0;Na=Ob+mc|0;Nb=Na+hc+Fb<<2;Tb=Ma+_b|0;Zb=Tb+gc+Rb<<2;Qa=d[fc+4>>0]|0;Sb=d[Yc+(Yb*11|0)>>0]|0;cc=Zb-Nb|0;ic=(c[G+((Qa&3)<<2)>>2]|0)-Nb+(c[H+((Sb&3)<<2)>>2]|0)<<4;vb=(Zb|0)<(Nb|0);Nb=vb?0-ic|0:ic;ic=vb?0-cc|0:cc;cc=Fb<<1;vb=hc*6|0;Zb=mc*6|0;lc=(Ob<<1)+Zb+vb+cc|0;Oa=Rb<<1;Vb=gc*6|0;bc=_b*6|0;kc=(Ma<<1)+bc+Vb+Oa|0;Qb=kc-lc|0;Pb=(c[G+((Qa>>>2&3)<<2)>>2]|0)-lc+(c[H+((Sb>>>2&3)<<2)>>2]|0)<<4;ec=(kc|0)<(lc|0);lc=ec?0-Pb|0:Pb;Pb=ec?0-Qb|0:Qb;Qb=(Ob*6|0)+Zb+(hc<<1)+cc|0;cc=(Ma*6|0)+bc+(gc<<1)+Oa|0;Oa=d[fc+5>>0]|0;ec=d[Yc+(Yb*11|0)+1>>0]|0;kc=cc-Qb|0;Hb=(c[G+((Oa&3)<<2)>>2]|0)-Qb+(c[H+((ec&3)<<2)>>2]|0)<<4;yb=(cc|0)<(Qb|0);Qb=yb?0-Hb|0:Hb;Hb=yb?0-kc|0:kc;kc=hc*3|0;yb=Ob*3|0;cc=mc*9|0;dc=yb+cc+Fb+kc|0;lb=gc*3|0;kb=Ma*3|0;jb=_b*9|0;gb=kb+jb+Rb+lb|0;fb=gb-dc|0;eb=(c[G+((Oa>>>2&3)<<2)>>2]|0)-dc+(c[H+((ec>>>2&3)<<2)>>2]|0)<<4;db=(gb|0)<(dc|0);dc=db?0-eb|0:eb;eb=db?0-fb|0:fb;fb=hc+mc<<3;db=gc+_b<<3;gb=db-fb|0;cb=(c[G+((Qa>>>4&3)<<2)>>2]|0)-fb+(c[H+((Sb>>>4&3)<<2)>>2]|0)<<4;bb=(db|0)<(fb|0);fb=bb?0-cb|0:cb;cb=bb?0-gb|0:gb;gb=vb+Zb+(Bb<<1)+(Ib<<1)|0;Zb=Vb+bc+(Mb<<1)+(Eb<<1)|0;bc=Zb-gb|0;Vb=(c[G+(Qa>>>6<<2)>>2]|0)-gb+(c[H+(Sb>>>6<<2)>>2]|0)<<4;Sb=(Zb|0)<(gb|0);gb=Sb?0-Vb|0:Vb;Vb=Sb?0-bc|0:bc;bc=mc*12|0;Sb=(hc<<2)+bc|0;Zb=_b*12|0;Qa=(gc<<2)+Zb|0;vb=Qa-Sb|0;bb=(c[G+((Oa>>>4&3)<<2)>>2]|0)-Sb+(c[H+((ec>>>4&3)<<2)>>2]|0)<<4;db=(Qa|0)<(Sb|0);Sb=db?0-bb|0:bb;bb=db?0-vb|0:vb;vb=Ib*3|0;db=kc+cc+Bb+vb|0;kc=Eb*3|0;Qa=lb+jb+Mb+kc|0;lb=Qa-db|0;ab=(c[G+(Oa>>>6<<2)>>2]|0)-db+(c[H+(ec>>>6<<2)>>2]|0)<<4;ec=(Qa|0)<(db|0);db=ec?0-ab|0:ab;ab=ec?0-lb|0:lb;lb=Na<<3;ec=Tb<<3;Qa=d[fc+6>>0]|0;Oa=d[Yc+(Yb*11|0)+2>>0]|0;$a=ec-lb|0;_a=(c[G+((Qa&3)<<2)>>2]|0)-lb+(c[H+((Oa&3)<<2)>>2]|0)<<4;Za=(ec|0)<(lb|0);lb=Za?0-_a|0:_a;_a=Za?0-$a|0:$a;$a=(Ob<<2)+bc|0;Za=(Ma<<2)+Zb|0;ec=Za-$a|0;Ya=(c[G+((Qa>>>2&3)<<2)>>2]|0)-$a+(c[H+((Oa>>>2&3)<<2)>>2]|0)<<4;Xa=(Za|0)<($a|0);$a=Xa?0-Ya|0:Ya;Ya=Xa?0-ec|0:ec;ec=(ub+$b<<1)+(Na*6|0)|0;Na=(rb+tb<<1)+(Tb*6|0)|0;Tb=d[fc+7>>0]|0;fc=d[Yc+(Yb*11|0)+3>>0]|0;Xa=Na-ec|0;Za=(c[G+((Tb&3)<<2)>>2]|0)-ec+(c[H+((fc&3)<<2)>>2]|0)<<4;Wa=(Na|0)<(ec|0);ec=Wa?0-Za|0:Za;Za=Wa?0-Xa|0:Xa;Xa=$b*3|0;Wa=Xa+ub+cc+yb|0;yb=tb*3|0;Na=yb+rb+jb+kb|0;kb=Na-Wa|0;Va=(c[G+((Tb>>>2&3)<<2)>>2]|0)-Wa+(c[H+((fc>>>2&3)<<2)>>2]|0)<<4;Ua=(Na|0)<(Wa|0);Wa=Ua?0-kb|0:kb;kb=Ua?0-Va|0:Va;Va=mc<<4;Ua=_b<<4;Na=Ua-Va|0;ob=(c[G+((Qa>>>4&3)<<2)>>2]|0)-Va+(c[H+((Oa>>>4&3)<<2)>>2]|0)<<4;nb=(Ua|0)<(Va|0);Va=nb?0-Na|0:Na;Na=nb?0-ob|0:ob;ob=(Ib<<2)+bc|0;nb=(Eb<<2)+Zb|0;Ua=nb-ob|0;mb=(c[G+(Qa>>>6<<2)>>2]|0)-ob+(c[H+(Oa>>>6<<2)>>2]|0)<<4;Oa=(nb|0)<(ob|0);ob=Oa?0-Ua|0:Ua;Ua=Oa?0-mb|0:mb;mb=bc+($b<<2)|0;bc=Zb+(tb<<2)|0;Zb=bc-mb|0;Oa=(c[G+((Tb>>>4&3)<<2)>>2]|0)-mb+(c[H+((fc>>>4&3)<<2)>>2]|0)<<4;nb=(bc|0)<(mb|0);mb=nb?0-Zb|0:Zb;Zb=nb?0-Oa|0:Oa;Oa=cc+Xa+vb+Cb|0;vb=jb+yb+kc+Pa|0;kc=vb-Oa|0;yb=(c[G+(Tb>>>6<<2)>>2]|0)-Oa+(c[H+(fc>>>6<<2)>>2]|0)<<4;fc=(vb|0)<(Oa|0);Oa=fc?0-kc|0:kc;kc=fc?0-yb|0:yb;c[g+(Kk<<3)>>2]=((lc|0)>(Pb*13|0)?12:(lc|0)>(Pb<<3|0)?8:(lc|0)>(Pb*3|0)?4:0)|((Nb|0)>(ic*13|0)?3:(Nb|0)>(ic<<3|0)?2:(Nb|0)>(ic*3|0)&1)|((Qb|0)>(Hb*13|0)?768:(Qb|0)>(Hb<<3|0)?512:(Qb|0)>(Hb*3|0)?256:0)|((dc|0)>(eb*13|0)?3072:(dc|0)>(eb<<3|0)?2048:(dc|0)>(eb*3|0)?1024:0)|((fb|0)>(cb*13|0)?48:(fb|0)>(cb<<3|0)?32:(fb|0)>(cb*3|0)?16:0)|((gb|0)>(Vb*13|0)?192:(gb|0)>(Vb<<3|0)?128:(gb|0)>(Vb*3|0)?64:0)|((Sb|0)>(bb*13|0)?12288:(Sb|0)>(bb<<3|0)?8192:(Sb|0)>(bb*3|0)?4096:0)|((db|0)>(ab*13|0)?49152:(db|0)>(ab<<3|0)?32768:(db|0)>(ab*3|0)?16384:0)|((lb|0)>(_a*13|0)?196608:(lb|0)>(_a<<3|0)?131072:(lb|0)>(_a*3|0)?65536:0)|(($a|0)>(Ya*13|0)?786432:($a|0)>(Ya<<3|0)?524288:($a|0)>(Ya*3|0)?262144:0)|((ec|0)>(Za*13|0)?50331648:(ec|0)>(Za<<3|0)?33554432:(ec|0)>(Za*3|0)?16777216:0)|((kb|0)>(Wa*13|0)?201326592:(kb|0)>(Wa<<3|0)?134217728:(kb|0)>(Wa*3|0)?67108864:0)|((Na|0)>(Va*13|0)?3145728:(Na|0)>(Va<<3|0)?2097152:(Na|0)>(Va*3|0)?1048576:0)|((Ua|0)>(ob*13|0)?12582912:(Ua|0)>(ob<<3|0)?8388608:(Ua|0)>(ob*3|0)?4194304:0)|((Zb|0)>(mb*13|0)?805306368:(Zb|0)>(mb<<3|0)?536870912:(Zb|0)>(mb*3|0)?268435456:0)|((kc|0)>(Oa*13|0)?-1073741824:(kc|0)>(Oa<<3|0)?-2147483648:(kc|0)>(Oa*3|0)?1073741824:0);if((xb|0)==(h|0)){hl=tb;il=$b;jl=_b;kl=gc;ll=mc;ml=hc;nl=Bb;ol=Mb;pl=Ib;ql=Eb;rl=Cb;sl=Pa;break}else{Oa=tb;kc=$b;mb=gc;Zb=_b;ob=hc;Ua=mc;mc=Ib;hc=Bb;_b=Eb;gc=Mb;$b=Cb;tb=Pa;sb=sb+1|0;rb=Oa;ub=kc;Rb=mb;Ma=Zb;Fb=ob;Ob=Ua}}c[Lc>>2]=nl;c[Ac>>2]=ol;c[Vc>>2]=pl;c[Fc>>2]=ql;c[Oc>>2]=rl;c[Jc>>2]=sl;c[y>>2]=ml;c[Pc>>2]=nl;c[Qc>>2]=ll;c[Tc>>2]=pl;c[z>>2]=kl;c[xc>>2]=ol;c[Uc>>2]=jl;c[Kc>>2]=ql;c[Mc>>2]=il;c[Wc>>2]=rl;c[vc>>2]=hl;c[wc>>2]=sl;tl=jc+h|0}else tl=jc;oc=oc+1|0;if((oc|0)==(j|0))break;else jc=tl}}break}default:{}}if(!fa)da=1;else{Ic(fa);da=1}}while(0);fa=c[I>>2]|0;if(!fa){$=da;i=x;return $|0}I=c[w>>2]|0;if((I|0)!=(fa|0))c[w>>2]=I+(~((I+-4-fa|0)>>>2)<<2);ac(fa);$=da;i=x;return $|0} -function hb(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;j=i;i=i+16|0;k=j;l=a[g+8>>0]|0;m=l&255;n=a[g+9>>0]|0;o=n&255;p=a[f+4>>0]|0;q=p&255;if(l<<24>>24==n<<24>>24){if((l&255)>=4)ma(900946,895663,645,900956);r=d[f>>0]|0;s=d[f+1>>0]|0;t=s<<3|s>>>2;s=d[f+2>>0]|0;u=s<<3|s>>>2;s=c[509600+(q<<4)+(m<<2)>>2]|0;v=(r<<3|r>>>2)+s|0;if(v>>>0>255)if((v|0)<0){w=0;x=6}else y=255;else{w=v;x=6}if((x|0)==6)y=w;w=t+s|0;if(w>>>0>255)if((w|0)<0){z=0;x=9}else A=255;else{z=w;x=9}if((x|0)==9)A=z;z=u+s|0;if(z>>>0>255)if((z|0)<0){B=0;x=12}else C=255;else{B=z;x=12}if((x|0)==12)C=B;B=d[889127+(A<<1)>>0]<<5|d[888103+(y<<1)>>0]<<11|d[888103+(C<<1)>>0];z=d[889127+(A<<1)+1>>0]<<5|d[888103+(y<<1)+1>>0]<<11|d[888103+(C<<1)+1>>0];if((z|0)==(B|0)&(h^1))if(!B){D=1;E=0;F=0;G=0;H=85}else{I=B+-1|0;J=0;x=16}else{I=z;J=170;x=16}if((x|0)==16){z=B>>>0>>0;C=z?I:B;y=z?B:I;D=C&255;E=y&255;F=(C&65535)>>>8&255;G=(y&65535)>>>8&255;H=(z?J|85:J)&255}a[b>>0]=D;a[b+1>>0]=F;a[b+2>>0]=E;a[b+3>>0]=G;Qc(b+4|0,H|0,4)|0;i=j;return}if((p&255)>6?n<<24>>24==3&(l<<24>>24==0&(a[g+10>>0]|0)==2):0){ib(k,f,q);l=c[k>>2]|0;n=c[k+12>>2]|0;k=d[889639+((l>>>8&255)<<1)>>0]<<5|d[888615+((l&255)<<1)>>0]<<11|d[888615+((l>>>16&255)<<1)>>0];l=d[889639+((n>>>8&255)<<1)>>0]<<5|d[888615+((n&255)<<1)>>0]<<11|d[888615+((n>>>16&255)<<1)>>0];if((l|0)==(k|0))if(!k){K=1;L=0;M=0;N=0;O=1;P=1}else{Q=k+-1|0;R=0;x=23}else{Q=l;R=1;x=23}if((x|0)==23){l=k>>>0>>0;n=l?Q:k;p=l?k:Q;K=n&255;L=p&255;M=(n&65535)>>>8&255;N=(p&65535)>>>8&255;O=l?0:R;P=l&1}a[b>>0]=K;a[b+1>>0]=M;a[b+2>>0]=L;a[b+3>>0]=N;N=0;while(1){L=g+N|0;M=b+4+N|0;K=(a[L>>0]&3)==3?O:P;if((K|N)>>>0>=4){x=27;break}l=d[M>>0]&252|K;a[M>>0]=l;K=(a[L>>0]&12)==12?O:P;if((K|N)>>>0>=4){x=27;break}R=l&243|K<<2;a[M>>0]=R;K=(a[L>>0]&48)==48?O:P;if((K|N)>>>0>=4){x=27;break}l=R&207|K<<4;a[M>>0]=l;if((N|3|0)!=3){x=25;break}K=(d[L>>0]|0)>191?O:P;if((K|N)>>>0>=4){x=27;break}a[M>>0]=l&63|K<<6;N=N+1|0;if(N>>>0>=4){x=33;break}}if((x|0)==25)ma(900696,900560,703,900865);else if((x|0)==27)ma(900911,895663,775,900852);else if((x|0)==33){i=j;return}}x=q<<5;q=(c[509024+(m<<4)+(o<<2)>>2]|0)*10|0;o=(((d[f>>0]|0)+x|0)*60|0)+q|0;m=(((d[f+1>>0]|0)+x|0)*60|0)+q|0;N=(((d[f+2>>0]|0)+x|0)*60|0)+q|0;q=(e[633632+(m<<2)+2>>1]|0)+(e[572192+(o<<2)+2>>1]|0)+(e[572192+(N<<2)+2>>1]|0)|0;x=(e[633632+((m|1)<<2)+2>>1]|0)+(e[572192+((o|1)<<2)+2>>1]|0)+(e[572192+((N|1)<<2)+2>>1]|0)|0;f=x>>>0>>0;P=f?x:q;q=(e[633632+(m+2<<2)+2>>1]|0)+(e[572192+(o+2<<2)+2>>1]|0)+(e[572192+(N+2<<2)+2>>1]|0)|0;x=q>>>0

>>0;O=x?q:P;P=(e[633632+(m+3<<2)+2>>1]|0)+(e[572192+(o+3<<2)+2>>1]|0)+(e[572192+(N+3<<2)+2>>1]|0)|0;q=P>>>0>>0;K=q?P:O;O=(e[633632+(m+4<<2)+2>>1]|0)+(e[572192+(o+4<<2)+2>>1]|0)+(e[572192+(N+4<<2)+2>>1]|0)|0;P=O>>>0>>0;l=P?O:K;K=(e[633632+(m+5<<2)+2>>1]|0)+(e[572192+(o+5<<2)+2>>1]|0)+(e[572192+(N+5<<2)+2>>1]|0)|0;O=K>>>0>>0;M=O?K:l;l=(e[633632+(m+6<<2)+2>>1]|0)+(e[572192+(o+6<<2)+2>>1]|0)+(e[572192+(N+6<<2)+2>>1]|0)|0;K=l>>>0>>0;L=K?l:M;M=(e[633632+(m+7<<2)+2>>1]|0)+(e[572192+(o+7<<2)+2>>1]|0)+(e[572192+(N+7<<2)+2>>1]|0)|0;l=M>>>0>>0;R=l?M:L;L=(e[633632+(m+8<<2)+2>>1]|0)+(e[572192+(o+8<<2)+2>>1]|0)+(e[572192+(N+8<<2)+2>>1]|0)|0;M=L>>>0>>0;p=((e[633632+(m+9<<2)+2>>1]|0)+(e[572192+(o+9<<2)+2>>1]|0)+(e[572192+(N+9<<2)+2>>1]|0)|0)>>>0<(M?L:R)>>>0?9:M?8:l?7:K?6:O?5:P?4:q?3:x?2:f&1;f=p+o|0;o=p+m|0;m=p+N|0;N=d[572192+(f<<2)>>0]<<11&63488|d[572192+(m<<2)>>0]|d[633632+(o<<2)>>0]<<5;x=d[572192+(f<<2)+1>>0]<<11&63488|d[572192+(m<<2)+1>>0]|d[633632+(o<<2)+1>>0]<<5;o=N>>>0>>0;m=o?x:N;f=o?N:x;x=o?892719:890159;a[b>>0]=m;o=b+1|0;a[o>>0]=(m&65535)>>>8;N=b+2|0;a[N>>0]=f;q=b+3|0;a[q>>0]=(f&65535)>>>8;if((m|0)!=(f|0)){a[b+4>>0]=a[(d[g>>0]|0)+(x+(p<<8))>>0]|0;a[b+5>>0]=a[(d[g+1>>0]|0)+(x+(p<<8))>>0]|0;a[b+6>>0]=a[(d[g+2>>0]|0)+(x+(p<<8))>>0]|0;a[b+7>>0]=a[(d[g+3>>0]|0)+(x+(p<<8))>>0]|0;i=j;return}if(h)S=0;else{h=(m|0)==0;p=h?0:m+-1|0;x=h?1:m;a[b>>0]=x;a[o>>0]=(x&65535)>>>8;a[N>>0]=p;a[q>>0]=(p&65535)>>>8;S=h?85:0}Qc(b+4|0,S|0,4)|0;i=j;return}function ib(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;f=c[d>>2]|0;d=f&255;g=f>>>5;h=f>>>10&63;i=f>>>13;j=f>>>18&63;f=d<<3&248|d>>>2;d=c[509600+(e<<4)>>2]|0;k=f+d|0;if(k>>>0>255)if((k|0)<0){l=0;m=3}else n=255;else{l=k;m=3}if((m|0)==3)n=l;l=g&248|h;h=d+l|0;if(h>>>0>255)if((h|0)<0){o=0;m=6}else p=255;else{o=h;m=6}if((m|0)==6)p=o;o=i&248|j;j=d+o|0;if(j>>>0>255)if((j|0)<0){q=0;m=9}else r=255;else{q=j;m=9}if((m|0)==9)r=q;a[b>>0]=n;a[b+1>>0]=p;a[b+2>>0]=r;a[b+3>>0]=-1;r=b+4|0;p=c[509600+(e<<4)+4>>2]|0;n=p+f|0;if(n>>>0>255)if((n|0)<0){s=0;m=12}else t=255;else{s=n;m=12}if((m|0)==12)t=s;s=p+l|0;if(s>>>0>255)if((s|0)<0){u=0;m=15}else v=255;else{u=s;m=15}if((m|0)==15)v=u;u=p+o|0;if(u>>>0>255)if((u|0)<0){w=0;m=18}else x=255;else{w=u;m=18}if((m|0)==18)x=w;a[r>>0]=t;a[r+1>>0]=v;a[r+2>>0]=x;a[r+3>>0]=-1;r=b+8|0;x=c[509600+(e<<4)+8>>2]|0;v=x+f|0;if(v>>>0>255)if((v|0)<0){y=0;m=21}else z=255;else{y=v;m=21}if((m|0)==21)z=y;y=x+l|0;if(y>>>0>255)if((y|0)<0){A=0;m=24}else B=255;else{A=y;m=24}if((m|0)==24)B=A;A=x+o|0;if(A>>>0>255)if((A|0)<0){C=0;m=27}else D=255;else{C=A;m=27}if((m|0)==27)D=C;a[r>>0]=z;a[r+1>>0]=B;a[r+2>>0]=D;a[r+3>>0]=-1;r=b+12|0;b=c[509600+(e<<4)+12>>2]|0;e=b+f|0;if(e>>>0>255)if((e|0)<0){E=0;m=30}else F=255;else{E=e;m=30}if((m|0)==30)F=E;E=b+l|0;if(E>>>0>255)if((E|0)<0){G=0;m=33}else H=255;else{G=E;m=33}if((m|0)==33)H=G;G=b+o|0;if(G>>>0>255)if((G|0)<0)I=0;else{J=255;K=F&255;a[r>>0]=K;L=H&255;M=r+1|0;a[M>>0]=L;N=J&255;O=r+2|0;a[O>>0]=N;P=r+3|0;a[P>>0]=-1;return}else I=G;J=I;K=F&255;a[r>>0]=K;L=H&255;M=r+1|0;a[M>>0]=L;N=J&255;O=r+2|0;a[O>>0]=N;P=r+3|0;a[P>>0]=-1;return}function jb(a,b){a=a|0;b=b|0;$a(a,b);return}function kb(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(e>>>0<78)return 0;if(((d[c+1>>0]|0)<<8|(d[c>>0]|0)|0)!=17011)return 0;if(((d[c+3>>0]|0)<<8|(d[c+2>>0]|0)|0)!=19)return 0;if(((d[c+5>>0]|0)<<8|(d[c+4>>0]|0)|0)!=77)return 0;if((((d[c+10>>0]|0)<<16|(d[c+11>>0]|0)<<24|(d[c+9>>0]|0)<<8|(d[c+8>>0]|0))+77|0)>>>0>e>>>0)return 0;b=(d[c+18>>0]|0)<<8|(d[c+19>>0]|0)<<16|(d[c+17>>0]|0);if(!b)return 0;f=d[c+14>>0]|0;g=(d[c+15>>0]|0)<<8|(d[c+16>>0]|0)<<16|f;if((g|0)==0|b>>>0>g>>>0)return 0;b=a[c+21>>0]|0;if((b&4)!=0&(f&1|0)!=0|(b&1)==0)return 0;b=(d[c+67>>0]|0)<<16|(d[c+68>>0]|0)<<24|(d[c+66>>0]|0)<<8|(d[c+65>>0]|0);if(b>>>0>>0)return (e-b|0)>>>0>=(g*23|0)>>>0|0;else return 0;return 0}function lb(a,b,c){a=a|0;b=b|0;c=c|0;var e=0;if(c>>>0<78)return 0;if(((d[b+1>>0]|0)<<8|(d[b>>0]|0)|0)!=17011)return 0;if(((d[b+3>>0]|0)<<8|(d[b+2>>0]|0)|0)!=19)return 0;if(((d[b+5>>0]|0)<<8|(d[b+4>>0]|0)|0)!=77)return 0;if((((d[b+10>>0]|0)<<16|(d[b+11>>0]|0)<<24|(d[b+9>>0]|0)<<8|(d[b+8>>0]|0))+77|0)>>>0>c>>>0)return 0;a=(d[b+15>>0]|0)<<8|(d[b+16>>0]|0)<<16|(d[b+14>>0]|0);if(!a)return 0;if(!((d[b+18>>0]|0)<<8|(d[b+19>>0]|0)<<16|(d[b+17>>0]|0)))return 0;e=(d[b+67>>0]|0)<<16|(d[b+68>>0]|0)<<24|(d[b+66>>0]|0)<<8|(d[b+65>>0]|0);if(e>>>0>>0)return (c-e|0)>>>0>=(a*23|0)>>>0|0;else return 0;return 0}function mb(a,b,c){a=a|0;b=b|0;c=c|0;var e=0;if(!(lb(0,b,c)|0)){e=0;return e|0}e=(d[b+18>>0]|0)<<8|(d[b+19>>0]|0)<<16|(d[b+17>>0]|0);return e|0}function nb(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!(lb(0,e,f)|0)){i=0;return i|0}f=d[e+15>>0]<<8|d[e+16>>0]<<16|d[e+14>>0];if(!f){i=0;return i|0}b=e+(d[e+67>>0]<<16|d[e+68>>0]<<24|d[e+66>>0]<<8|d[e+65>>0])|0;j=0;while(1){if((d[b+(j*23|0)+1>>0]<<8|d[b+(j*23|0)+2>>0]<<16|d[b+(j*23|0)>>0]|0)==(h|0)?(a[b+(j*23|0)+3>>0]|0)==0:0){k=j;break}j=j+1|0;if(j>>>0>=f>>>0){i=0;l=14;break}}if((l|0)==14)return i|0;if((k|0)<0){i=0;return i|0}if((d[e+18>>0]<<8|d[e+19>>0]<<16|d[e+17>>0])>>>0<=h>>>0){i=0;return i|0}l=k+1|0;if(l>>>0>>0){j=l;l=1;while(1){if((d[b+(j*23|0)+1>>0]<<8|d[b+(j*23|0)+2>>0]<<16|d[b+(j*23|0)>>0]|0)!=(h|0)){m=l;break}n=(d[b+(j*23|0)+3>>0]|0)+1|0;o=l>>>0>n>>>0?l:n;j=j+1|0;if(j>>>0>=f>>>0){m=o;break}else l=o}if(m>>>0>16){i=0;return i|0}else p=m}else p=1;c[g>>2]=h;c[g+4>>2]=p;a[g+40>>0]=(d[e+21>>0]|0)>>>2&1;a[g+41>>0]=(d[b+(k*23|0)+4>>0]|0)>>>1&1;e=b+(k*23|0)+10|0;p=b+(k*23|0)+9|0;c[g+16>>2]=(d[e>>0]<<8|d[p>>0])<<2;h=b+(k*23|0)+12|0;m=b+(k*23|0)+11|0;c[g+20>>2]=(d[h>>0]<<8|d[m>>0])<<2;c[g+8>>2]=d[b+(k*23|0)+6>>0]<<8|d[b+(k*23|0)+5>>0];c[g+12>>2]=d[b+(k*23|0)+8>>0]<<8|d[b+(k*23|0)+7>>0];b=d[e>>0]<<8|d[p>>0];c[g+24>>2]=b;p=d[h>>0]<<8|d[m>>0];c[g+28>>2]=p;c[g+32>>2]=Z(p,b)|0;c[g+36>>2]=k;i=1;return i|0}function ob(a,b,e,f,g,h,i,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0;if(!(lb(0,b,e)|0)){k=0;return k|0}e=(d[b+15>>0]|0)<<8|(d[b+16>>0]|0)<<16|(d[b+14>>0]|0);if(!e){k=0;return k|0}a=b+((d[b+67>>0]|0)<<16|(d[b+68>>0]|0)<<24|(d[b+66>>0]|0)<<8|(d[b+65>>0]|0))|0;l=0;while(1){if(((d[a+(l*23|0)+1>>0]|0)<<8|(d[a+(l*23|0)+2>>0]|0)<<16|(d[a+(l*23|0)>>0]|0)|0)==(f|0)?(d[a+(l*23|0)+3>>0]|0|0)==(g|0):0){m=l;break}l=l+1|0;if(l>>>0>=e>>>0){k=0;n=10;break}}if((n|0)==10)return k|0;if((m|0)<0){k=0;return k|0}if(((d[b+18>>0]|0)<<8|(d[b+19>>0]|0)<<16|(d[b+17>>0]|0))>>>0<=f>>>0){k=0;return k|0}c[h>>2]=(d[a+(m*23|0)+6>>0]|0)<<8|(d[a+(m*23|0)+5>>0]|0);c[i>>2]=(d[a+(m*23|0)+8>>0]|0)<<8|(d[a+(m*23|0)+7>>0]|0);c[j>>2]=Z((d[a+(m*23|0)+12>>0]|0)<<8|(d[a+(m*23|0)+11>>0]|0),(d[a+(m*23|0)+10>>0]|0)<<8|(d[a+(m*23|0)+9>>0]|0))|0;k=1;return k|0}function pb(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;if(!(lb(0,e,f)|0)){j=0;return j|0}f=(d[e+15>>0]|0)<<8|(d[e+16>>0]|0)<<16|(d[e+14>>0]|0);if(!f){j=0;return j|0}b=e+((d[e+67>>0]|0)<<16|(d[e+68>>0]|0)<<24|(d[e+66>>0]|0)<<8|(d[e+65>>0]|0))|0;k=0;while(1){if(((d[b+(k*23|0)+1>>0]|0)<<8|(d[b+(k*23|0)+2>>0]|0)<<16|(d[b+(k*23|0)>>0]|0)|0)==(h|0)?(d[b+(k*23|0)+3>>0]|0|0)==(i|0):0){l=k;break}k=k+1|0;if(k>>>0>=f>>>0){j=0;m=10;break}}if((m|0)==10)return j|0;if((l|0)<0){j=0;return j|0}if(((d[e+18>>0]|0)<<8|(d[e+19>>0]|0)<<16|(d[e+17>>0]|0))>>>0<=h>>>0){j=0;return j|0}c[g>>2]=h;c[g+4>>2]=i;a[g+40>>0]=(d[e+21>>0]|0)>>>2&1;a[g+41>>0]=(d[b+(l*23|0)+4>>0]|0)>>>1&1;e=b+(l*23|0)+10|0;i=b+(l*23|0)+9|0;c[g+16>>2]=((d[e>>0]|0)<<8|(d[i>>0]|0))<<2;h=b+(l*23|0)+12|0;m=b+(l*23|0)+11|0;c[g+20>>2]=((d[h>>0]|0)<<8|(d[m>>0]|0))<<2;c[g+8>>2]=(d[b+(l*23|0)+6>>0]|0)<<8|(d[b+(l*23|0)+5>>0]|0);c[g+12>>2]=(d[b+(l*23|0)+8>>0]|0)<<8|(d[b+(l*23|0)+7>>0]|0);b=(d[e>>0]|0)<<8|(d[i>>0]|0);c[g+24>>2]=b;i=(d[h>>0]|0)<<8|(d[m>>0]|0);c[g+28>>2]=i;c[g+32>>2]=Z(i,b)|0;c[g+36>>2]=l;j=1;return j|0}function qb(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if((c[a+4>>2]|0)!=(c[a>>2]|0)){f=1;return f|0}if(!(lb(0,b,e)|0)){f=0;return f|0}g=(d[b+43>>0]|0)<<16|(d[b+44>>0]|0)<<24|(d[b+42>>0]|0)<<8|(d[b+41>>0]|0);if(g>>>0>e>>>0){f=0;return f|0}h=(d[b+52>>0]|0)<<16|(d[b+53>>0]|0)<<24|(d[b+51>>0]|0)<<8|(d[b+50>>0]|0);if(h>>>0>e>>>0){f=0;return f|0}i=b+57|0;j=b+60|0;k=b+59|0;l=b+58|0;m=(d[k>>0]|0)<<16|(d[j>>0]|0)<<24|(d[l>>0]|0)<<8|(d[i>>0]|0);if(m>>>0>e>>>0){f=0;return f|0}n=(d[b+46>>0]|0)<<8|(d[b+47>>0]|0)<<16|(d[b+45>>0]|0);if(n>>>0>(e-g|0)>>>0){f=0;return f|0}o=(d[b+55>>0]|0)<<8|(d[b+56>>0]|0)<<16|(d[b+54>>0]|0);if(o>>>0>(e-h|0)>>>0){f=0;return f|0}p=b+61|0;q=b+64|0;r=b+63|0;s=b+62|0;if(((d[r>>0]|0)<<16|(d[q>>0]|0)<<24|(d[s>>0]|0)<<8|(d[p>>0]|0))>>>0>(e-m|0)>>>0){f=0;return f|0}if(!(bb(a,(d[b+40>>0]|0)<<8|(d[b+39>>0]|0),b+g|0,n,(d[b+49>>0]|0)<<8|(d[b+48>>0]|0),b+h|0,o)|0)){f=0;return f|0}f=fb(a,b+((d[k>>0]|0)<<16|(d[j>>0]|0)<<24|(d[l>>0]|0)<<8|(d[i>>0]|0))|0,(d[r>>0]|0)<<16|(d[q>>0]|0)<<24|(d[s>>0]|0)<<8|(d[p>>0]|0))|0;return f|0}function rb(a,b,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;if(!((k&2|0)==0?(c[a+4>>2]|0)!=(c[a>>2]|0):0)){p=0;return p|0}if(!(lb(0,b,e)|0)){p=0;return p|0}if(((d[b+15>>0]|0)<<8|(d[b+16>>0]|0)<<16|(d[b+14>>0]|0))>>>0<=f>>>0){p=0;return p|0}q=b+((d[b+67>>0]|0)<<16|(d[b+68>>0]|0)<<24|(d[b+66>>0]|0)<<8|(d[b+65>>0]|0))|0;r=q+(f*23|0)|0;s=q+(f*23|0)+10|0;t=q+(f*23|0)+9|0;u=q+(f*23|0)+12|0;v=q+(f*23|0)+11|0;if((i+-13|0)>>>0<8){if(!l)w=(d[q+(f*23|0)+6>>0]|0)<<8|(d[q+(f*23|0)+5>>0]|0);else w=l;if(!o)x=(d[q+(f*23|0)+8>>0]|0)<<8|(d[q+(f*23|0)+7>>0]|0);else x=o;if((Z(x,w)|0)>>>0>h>>>0){p=0;return p|0}else{y=w;z=x}}else if((Z((d[s>>0]|0)<<8|(d[t>>0]|0),(d[u>>0]|0)<<8|(d[v>>0]|0))|0)>>>0>h>>>0){p=0;return p|0}else{y=l;z=o}if((i|0)!=0&(i+-3|0)>>>0<2){o=(d[s>>0]|0)<<8|(d[t>>0]|0);l=o<<2;if(!o){p=0;return p|0}if(l+262143&l){p=0;return p|0}l=(d[u>>0]|0)<<8|(d[v>>0]|0);o=l<<2;if(!l){p=0;return p|0}if(o+262143&o){p=0;return p|0}}o=(d[q+(f*23|0)+15>>0]|0)<<16|(d[q+(f*23|0)+16>>0]|0)<<24|(d[q+(f*23|0)+14>>0]|0)<<8|(d[q+(f*23|0)+13>>0]|0);if(o>>>0>e>>>0){p=0;return p|0}l=(d[q+(f*23|0)+19>>0]|0)<<16|(d[q+(f*23|0)+20>>0]|0)<<24|(d[q+(f*23|0)+18>>0]|0)<<8|(d[q+(f*23|0)+17>>0]|0);if((e-o|0)>>>0>>0){p=0;return p|0}p=gb(a,g,(d[s>>0]|0)<<8|(d[t>>0]|0),(d[u>>0]|0)<<8|(d[v>>0]|0),b+o|0,l,i,j,(k&1|0)!=0,(k&8|0)==0,b,r,y,m,(k&16|0)!=0,n,z)|0;return p|0}function sb(b,e,f,g,h,j,k,l,m,n,o,p){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;q=i;i=i+32|0;r=q+12|0;s=q;switch(l|0){case 11:case 9:case 8:case 4:case 2:case 0:{t=8;break}case 12:case 10:case 5:case 3:case 1:case 7:case 6:{t=16;break}case 13:{t=64;break}case 16:case 15:case 14:{t=32;break}default:ma(896047,895663,8284,896099)}if((c[b+4>>2]|0)==(c[b>>2]|0)){u=0;i=q;return u|0}v=m>>>2;if(m&2){u=0;i=q;return u|0}if(!(lb(0,e,f)|0)){u=0;i=q;return u|0}w=e+((d[e+67>>0]|0)<<16|(d[e+68>>0]|0)<<24|(d[e+66>>0]|0)<<8|(d[e+65>>0]|0))|0;x=(d[e+21>>0]|0)>>>2;y=(d[e+15>>0]|0)<<8|(d[e+16>>0]|0)<<16|(d[e+14>>0]|0);if(!y){u=0;i=q;return u|0}else z=0;while(1){if(((d[w+(z*23|0)+1>>0]|0)<<8|(d[w+(z*23|0)+2>>0]|0)<<16|(d[w+(z*23|0)>>0]|0)|0)==(g|0)?(d[w+(z*23|0)+3>>0]|0|0)==(h|0):0){A=z;break}z=z+1|0;if(z>>>0>=y>>>0){u=0;B=96;break}}if((B|0)==96){i=q;return u|0}if((A|0)<0){u=0;i=q;return u|0}B=x&1;x=(l|0)==9&(B|0)==0?8:l;if(a[w+(A*23|0)+4>>0]&1){u=0;i=q;return u|0}l=(B|0)!=0;if(l){z=A+1|0;if(z>>>0>=y>>>0){u=0;i=q;return u|0}if(!(a[w+(z*23|0)+4>>0]&1)){u=0;i=q;return u|0}y=w+(A*23|0)+10|0;h=a[y>>0]|0;g=w+(A*23|0)+9|0;C=a[g>>0]|0;if(((h&255)<<8|C&255|0)!=((d[w+(z*23|0)+10>>0]|0)<<8|(d[w+(z*23|0)+9>>0]|0)|0)){u=0;i=q;return u|0}D=w+(A*23|0)+12|0;E=a[D>>0]|0;F=w+(A*23|0)+11|0;G=a[F>>0]|0;if(((E&255)<<8|G&255|0)==((d[w+(z*23|0)+12>>0]|0)<<8|(d[w+(z*23|0)+11>>0]|0)|0)){H=g;I=D;J=F;K=y;L=h;M=C;N=E;O=G}else{u=0;i=q;return u|0}}else{G=w+(A*23|0)+10|0;E=w+(A*23|0)+9|0;C=w+(A*23|0)+12|0;h=w+(A*23|0)+11|0;H=E;I=C;J=h;K=G;L=a[G>>0]|0;M=a[E>>0]|0;N=a[C>>0]|0;O=a[h>>0]|0}h=Z((N&255)<<8|O&255,(L&255)<<8|M&255)|0;if((x&-2|0)==8&h>>>0>>0)Qc(j+(Z(h,t)|0)|0,0,Z(k-h|0,t)|0)|0;do switch(x|0){case 0:{u=rb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,0,t,m,n,o,0,0)|0;i=q;return u|0}case 2:{u=rb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,1,t,m,n,o,0,0)|0;i=q;return u|0}case 4:{u=rb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,2,t,m,n,o,0,0)|0;i=q;return u|0}case 8:{u=rb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,3,t,m,n,o,0,0)|0;i=q;return u|0}case 9:{if(!l)ma(896049,895663,7950,896077);c[s>>2]=0;M=s+4|0;c[M>>2]=0;c[s+8>>2]=0;do if(h)if(h>>>0>1073741823)_b(s);else{L=h<<2;O=$b(L)|0;c[s>>2]=O;N=O+(h<<2)|0;c[s+8>>2]=N;Qc(O|0,0,L|0)|0;c[M>>2]=N;P=s;Q=O;break}else{P=s;Q=0}while(0);if(rb(b,e,f,A+1|0,Q,h,12,4,m,(d[K>>0]|0)<<8|(d[H>>0]|0),o,0,0)|0)R=rb(b,e,f,A,j,k,4,t,m,n,o,c[P>>2]|0,0)|0;else R=0;O=c[s>>2]|0;if(!O){u=R;i=q;return u|0}N=c[M>>2]|0;if((N|0)!=(O|0))c[M>>2]=N+(~((N+-4-O|0)>>>2)<<2);ac(O);u=R;i=q;return u|0}case 6:{u=rb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,5,t,m,n,o,0,0)|0;i=q;return u|0}case 7:{O=rb(b,e,f,A,j,k,6,16,m,n,o,0,0)|0;if(!(l&O)){u=O;i=q;return u|0}u=rb(b,e,f,A+1|0,j,k,7,16,m,n,o,0,0)|0;i=q;return u|0}case 1:{if(l){if(!(rb(b,e,f,A+1|0,j,k,8,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}}else{O=(d[K>>0]|0)<<8|(d[H>>0]|0);N=(d[I>>0]|0)<<8|(d[J>>0]|0);if(N){L=((n|0)==0?O:n)<<4;C=(O|0)==0;E=0;do{if(!C){G=Z(L,E)|0;w=0;while(1){y=j+G|0;a[y>>0]=255;a[y+1>>0]=29;y=j+(G|2)|0;a[y>>0]=a[888096]|0;a[y+1>>0]=a[888097]|0;a[y+2>>0]=a[888098]|0;a[y+3>>0]=a[888099]|0;a[y+4>>0]=a[888100]|0;a[y+5>>0]=a[888101]|0;w=w+1|0;if((w|0)==(O|0))break;else G=G+16|0}}E=E+1|0}while((E|0)!=(N|0))}}u=rb(b,e,f,A,j+8|0,k,0,16,m,n,o,0,0)|0;i=q;return u|0}case 3:{if(l){if(!(rb(b,e,f,A+1|0,j,k,2,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}}else{N=(d[K>>0]|0)<<8|(d[H>>0]|0);E=(d[I>>0]|0)<<8|(d[J>>0]|0);a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;if(E){O=((n|0)==0?N:n)<<4;L=(N|0)==0;C=0;do{if(!L){M=Z(O,C)|0;G=0;while(1){a[j+M>>0]=-1;a[j+(M|1)>>0]=-1;w=j+(M|2)|0;a[w>>0]=a[r>>0]|0;a[w+1>>0]=a[r+1>>0]|0;a[w+2>>0]=a[r+2>>0]|0;a[w+3>>0]=a[r+3>>0]|0;a[w+4>>0]=a[r+4>>0]|0;a[w+5>>0]=a[r+5>>0]|0;G=G+1|0;if((G|0)==(N|0))break;else M=M+16|0}}C=C+1|0}while((C|0)!=(E|0))}}u=rb(b,e,f,A,j+8|0,k,1,16,m|8,n,o,0,0)|0;i=q;return u|0}case 5:{if(!(rb(b,e,f,A,j,k,2,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}if(l){u=rb(b,e,f,A+1|0,j+8|0,k,2,16,m,n,o,0,0)|0;i=q;return u|0}E=(d[K>>0]|0)<<8|(d[H>>0]|0);C=(d[I>>0]|0)<<8|(d[J>>0]|0);a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;if(C){N=((n|0)==0?E:n)<<4;O=(E|0)==0;L=0;do{if(!O){M=Z(N,L)|0;G=0;while(1){a[j+(M+8)>>0]=-1;a[j+((M|1)+8)>>0]=-1;w=j+((M|2)+8)|0;a[w>>0]=a[r>>0]|0;a[w+1>>0]=a[r+1>>0]|0;a[w+2>>0]=a[r+2>>0]|0;a[w+3>>0]=a[r+3>>0]|0;a[w+4>>0]=a[r+4>>0]|0;a[w+5>>0]=a[r+5>>0]|0;G=G+1|0;if((G|0)==(E|0))break;else M=M+16|0}}L=L+1|0}while((L|0)!=(C|0))}u=1;i=q;return u|0}case 10:{if(!l){u=rb(b,e,f,A,j,k,9,16,m,n,o,0,0)|0;i=q;return u|0}if(!(rb(b,e,f,A+1|0,j,k,12,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}u=rb(b,e,f,A,j,k,9,16,m|16,n,o,0,0)|0;i=q;return u|0}case 11:{u=rb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,10,t,m,n,o,0,0)|0;i=q;return u|0}case 12:{if(l){if(!(rb(b,e,f,A+1|0,j,k,2,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}}else{C=(d[K>>0]|0)<<8|(d[H>>0]|0);L=(d[I>>0]|0)<<8|(d[J>>0]|0);a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;if(L){E=((n|0)==0?C:n)<<4;N=(C|0)==0;O=0;do{if(!N){M=Z(E,O)|0;G=0;while(1){a[j+M>>0]=-1;a[j+(M|1)>>0]=-1;w=j+(M|2)|0;a[w>>0]=a[r>>0]|0;a[w+1>>0]=a[r+1>>0]|0;a[w+2>>0]=a[r+2>>0]|0;a[w+3>>0]=a[r+3>>0]|0;a[w+4>>0]=a[r+4>>0]|0;a[w+5>>0]=a[r+5>>0]|0;G=G+1|0;if((G|0)==(C|0))break;else M=M+16|0}}O=O+1|0}while((O|0)!=(L|0))}}u=rb(b,e,f,A,j+8|0,k,10,16,m,n,o,0,0)|0;i=q;return u|0}case 13:{if(l?!(rb(b,e,f,A+1|0,j,k,15,4,m,n,o,0,p)|0):0){u=0;i=q;return u|0}u=rb(b,e,f,A,j,k,14-B|0,4,m,n,o,0,p)|0;i=q;return u|0}case 15:case 14:{u=rb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,(x|0)==14?16:17,2,m,n,o,0,p)|0;i=q;return u|0}case 16:{if(l?!(rb(b,e,f,A+1|0,j,k,19,2,m,n,o,0,p)|0):0){u=0;i=q;return u|0}u=rb(b,e,f,A,j,k,(B<<1^2)+18|0,2,m,n,o,0,p)|0;i=q;return u|0}default:ma(896047,895663,8249,896077)}while(0);return 0}function tb(a){a=a|0;var b=0;switch(a|0){case 11:case 9:case 8:case 4:case 2:case 0:{b=8;break}case 12:case 10:case 5:case 3:case 1:case 7:case 6:{b=16;break}case 13:{b=64;break}case 16:case 15:case 14:{b=32;break}default:ma(896047,895663,8284,896099)}return b|0}function ub(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;g=i;i=i+256|0;h=g+128|0;j=g;if(!e){k=c[d>>2]|0;l=d+4|0;if((c[l>>2]|0)!=(k|0))c[l>>2]=k;k=c[d+12>>2]|0;l=d+16|0;m=c[l>>2]|0;if((k|0)!=(m|0))c[l>>2]=m+(~((m+-4-k|0)>>>2)<<2);k=c[d+24>>2]|0;m=d+28|0;l=c[m>>2]|0;if((k|0)==(l|0)){n=1;i=g;return n|0}c[m>>2]=l+(~((l+-2-k|0)>>>1)<<1);n=1;i=g;return n|0}k=d+4|0;l=c[k>>2]|0;m=c[d>>2]|0;o=l-m|0;if(o>>>0>=e>>>0)if(o>>>0>e>>>0?(p=m+e|0,(l|0)!=(p|0)):0){c[k>>2]=p;q=m}else q=m;else{vb(d,e-o|0);q=c[d>>2]|0}Tc(q|0,f|0,e|0)|0;q=d+12|0;o=d+16|0;m=c[o>>2]|0;p=c[q>>2]|0;k=p;if((m|0)==(p|0))r=m;else{l=m+(~((m+-4-k|0)>>>2)<<2)|0;c[o>>2]=l;r=l}l=r-k>>2;if(l>>>0>=1024){if(l>>>0>1024?(k=p+4096|0,(r|0)!=(k|0)):0)c[o>>2]=r+(~((r+-4-k|0)>>>2)<<2)}else wb(q,1024-l|0);l=d+24|0;k=d+28|0;d=c[k>>2]|0;r=c[l>>2]|0;o=r;if((d|0)==(r|0))s=d;else{p=d+(~((d+-2-o|0)>>>1)<<1)|0;c[k>>2]=p;s=p}p=e<<1;d=s-o>>1;if(p>>>0<=d>>>0){if(p>>>0>>0?(o=r+(p<<1)|0,(s|0)!=(o|0)):0)c[k>>2]=s+(~((s+-2-o|0)>>>1)<<1)}else xb(l,p-d|0);d=h;p=d+128|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(p|0));d=0;while(1){p=a[f+d>>0]|0;if((p&255)>31){t=0;break}o=h+((p&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;d=d+1|0;if(d>>>0>=e>>>0){u=30;break}}if((u|0)==30){c[j+4>>2]=0;c[j>>2]=0;u=1;d=0;o=0;while(1){p=c[h+(u<<2)>>2]|0;s=p+o|0;r=p+d<<1;u=u+1|0;c[j+(u<<2)>>2]=r;if((u|0)==31){v=s;w=r;break}else{d=r;o=s}}a:do if(!((w|0)!=-2147483648&v>>>0>1))if((e|0)>0){o=0;d=-1;while(1){u=a[f+o>>0]|0;h=u&255;b:do if(!(u<<24>>24))x=d;else{s=j+(h<<2)|0;r=c[s>>2]|0;c[s>>2]=r+1;s=r;r=h;p=0;while(1){m=s&1|p<<1;r=r+-1|0;if(!r){y=m;z=p;break}else{s=s>>>1;p=m}}if((u&255)<11){p=h<<16|o;if(y>>>0>=1024){x=d;break}s=c[q>>2]|0;r=1<>2]|0){B=0;break a}c[A>>2]=p;m=m+r|0;if(m>>>0>=1024){x=d;break b}}}m=(c[q>>2]|0)+((y&1023)<<2)|0;r=c[m>>2]|0;if(!r){c[m>>2]=d;C=d;D=d+-2|0}else{C=r;D=d}if((C|0)>-1){B=0;break a}r=z>>>9;m=(r&1)-C|0;p=m+-1|0;s=(m|0)<1;if((u&255)>11){A=m;E=p;F=r&4194303;r=s;G=h;H=D;while(1){if(r){B=0;break a}I=c[k>>2]|0;J=c[l>>2]|0;K=I-J>>1;do if((A|0)>(K|0)){if(A>>>0>K>>>0){xb(l,A-K|0);L=c[l>>2]|0;break}if(A>>>0>=K>>>0){L=J;break}M=J+(A<<1)|0;if((I|0)==(M|0)){L=J;break}c[k>>2]=I+(~((I+-2-M|0)>>>1)<<1);L=J}else L=J;while(0);J=L+(E<<1)|0;I=b[J>>1]|0;if(I<<16>>16)if(I<<16>>16>-1){B=0;break a}else{N=I<<16>>16;O=H}else{b[J>>1]=H;N=H;O=H+-2|0}G=G+-1|0;F=F>>>1;J=(F&1)-N|0;I=J+-1|0;K=(J|0)<1;if((G|0)<=11){P=J;Q=I;R=K;S=O;break}else{A=J;E=I;r=K;H=O}}}else{P=m;Q=p;R=s;S=D}if(R){B=0;break a}H=c[k>>2]|0;r=c[l>>2]|0;E=H-r>>1;do if((P|0)>(E|0)){if(P>>>0>E>>>0){xb(l,P-E|0);T=c[l>>2]|0;break}if(P>>>0>=E>>>0){T=r;break}A=r+(P<<1)|0;if((H|0)==(A|0)){T=r;break}c[k>>2]=H+(~((H+-2-A|0)>>>1)<<1);T=r}else T=r;while(0);r=T+(Q<<1)|0;if(b[r>>1]|0){B=0;break a}b[r>>1]=o;x=S}while(0);o=o+1|0;if((o|0)>=(e|0)){B=1;break}else d=x}}else B=1;else B=0;while(0);t=B}n=t;i=g;return n|0}function vb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=b+8|0;f=c[e>>2]|0;g=b+4|0;h=c[g>>2]|0;i=h;if((f-i|0)>>>0>=d>>>0){j=d;k=h;do{a[k>>0]=0;k=(c[g>>2]|0)+1|0;c[g>>2]=k;j=j+-1|0}while((j|0)!=0);return}j=c[b>>2]|0;k=i-j+d|0;if((k|0)<0)_b(b);i=j;j=f-i|0;if(j>>>0<1073741823){f=j<<1;j=f>>>0>>0?k:f;f=(c[g>>2]|0)-i|0;if(!j){l=0;m=0;n=f}else{o=j;p=f;q=8}}else{o=2147483647;p=(c[g>>2]|0)-i|0;q=8}if((q|0)==8){l=o;m=$b(o)|0;n=p}p=m+n|0;o=m+l|0;l=d;d=p;q=p;while(1){a[d>>0]=0;d=q+1|0;p=d;l=l+-1|0;if(!l){r=p;break}else q=p}q=c[b>>2]|0;l=(c[g>>2]|0)-q|0;d=m+(n-l)|0;Tc(d|0,q|0,l|0)|0;c[b>>2]=d;c[g>>2]=r;c[e>>2]=o;if(!q)return;ac(q);return}function wb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+8|0;e=c[d>>2]|0;f=a+4|0;g=c[f>>2]|0;h=g;if(e-h>>2>>>0>=b>>>0){Qc(g|0,0,b<<2|0)|0;c[f>>2]=g+(b<<2);return}g=c[a>>2]|0;i=g;j=(h-i>>2)+b|0;if(j>>>0>1073741823)_b(a);h=g;k=e-h|0;if(k>>2>>>0<536870911){e=k>>1;k=e>>>0>>0?j:e;e=(c[f>>2]|0)-h|0;j=e>>2;if(!k){l=0;m=0;n=j;o=e}else{p=k;q=j;r=e;s=8}}else{e=(c[f>>2]|0)-h|0;p=1073741823;q=e>>2;r=e;s=8}if((s|0)==8){l=p;m=$b(p<<2)|0;n=q;o=r}Qc(m+(n<<2)|0,0,b<<2|0)|0;Tc(m|0,g|0,o|0)|0;c[a>>2]=m;c[f>>2]=m+(n+b<<2);c[d>>2]=m+(l<<2);if(!i)return;ac(i);return}function xb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=a+8|0;e=c[d>>2]|0;f=a+4|0;g=c[f>>2]|0;h=g;if(e-h>>1>>>0>=b>>>0){Qc(g|0,0,b<<1|0)|0;c[f>>2]=g+(b<<1);return}i=c[a>>2]|0;j=i;k=(h-j>>1)+b|0;if((k|0)<0)_b(a);h=i;l=e-h|0;e=l>>1>>>0<1073741823?(l>>>0>>0?k:l):2147483647;l=g-h|0;h=l>>1;if(!e)m=0;else m=$b(e<<1)|0;Qc(m+(h<<1)|0,0,b<<1|0)|0;Tc(m|0,i|0,l|0)|0;c[a>>2]=m;c[f>>2]=m+(h+b<<1);c[d>>2]=m+(e<<1);if(!j)return;ac(j);return}function yb(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;f=i;i=i+160|0;g=f+144|0;h=f+128|0;j=f+112|0;k=f+96|0;l=f+80|0;m=f+64|0;n=f+48|0;o=f+32|0;p=f+16|0;q=f;r=b;s=c;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0));if(a[e+8>>0]|0){r=g;c=r+15|0;do{a[r>>0]=0;r=r+1|0}while((r|0)<(c|0));t=a[b>>0]|0;a[g>>0]=t;a[g+1>>0]=t;a[g+2>>0]=a[b+1>>0]|0;a[g+3>>0]=a[b+2>>0]|0;t=a[b+4>>0]|0;a[g+4>>0]=t;a[g+5>>0]=t;a[g+6>>0]=a[b+5>>0]|0;a[g+7>>0]=a[b+6>>0]|0;t=a[b+8>>0]|0;a[g+8>>0]=t;a[g+9>>0]=t;a[g+10>>0]=a[b+9>>0]|0;a[g+11>>0]=a[b+10>>0]|0;t=a[b+12>>0]|0;a[g+12>>0]=t;a[g+13>>0]=t;a[g+14>>0]=a[b+13>>0]|0;a[g+15>>0]=a[b+14>>0]|0;r=b;s=g;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+9>>0]|0){r=h;c=r+15|0;do{a[r>>0]=0;r=r+1|0}while((r|0)<(c|0));a[h>>0]=a[b+12>>0]|0;a[h+1>>0]=a[b+13>>0]|0;a[h+2>>0]=a[b+14>>0]|0;a[h+3>>0]=a[b+15>>0]|0;a[h+4>>0]=a[b>>0]|0;a[h+5>>0]=a[b+1>>0]|0;a[h+6>>0]=a[b+2>>0]|0;a[h+7>>0]=a[b+3>>0]|0;a[h+8>>0]=a[b+4>>0]|0;a[h+9>>0]=a[b+5>>0]|0;a[h+10>>0]=a[b+6>>0]|0;a[h+11>>0]=a[b+7>>0]|0;a[h+12>>0]=a[b+8>>0]|0;a[h+13>>0]=a[b+9>>0]|0;a[h+14>>0]=a[b+10>>0]|0;a[h+15>>0]=a[b+11>>0]|0;r=b;s=h;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}zb(j,b,(a[e+6>>0]|0)!=0,d[e+12>>0]|0);r=b;s=j;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0));if(a[e+7>>0]|0){Ab(k,b);r=b;s=k;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+10>>0]|0){Bb(l,b);r=b;s=l;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+11>>0]|0){Cb(m,b);r=b;s=m;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+1>>0]|0){Db(n,b);r=b;s=n;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+3>>0]|0){n=b+1|0;m=a[900750+(d[n>>0]|0)>>0]|0;l=b+2|0;k=a[900750+(d[l>>0]|0)>>0]|0;j=b+3|0;h=a[900750+(d[j>>0]|0)>>0]|0;g=b+4|0;t=a[900750+(d[g>>0]|0)>>0]|0;u=b+5|0;v=a[900750+(d[u>>0]|0)>>0]|0;w=b+6|0;x=a[900750+(d[w>>0]|0)>>0]|0;y=b+7|0;z=a[900750+(d[y>>0]|0)>>0]|0;A=b+8|0;B=a[900750+(d[A>>0]|0)>>0]|0;C=b+9|0;D=a[900750+(d[C>>0]|0)>>0]|0;E=b+10|0;F=a[900750+(d[E>>0]|0)>>0]|0;G=b+11|0;H=a[900750+(d[G>>0]|0)>>0]|0;I=b+12|0;J=a[900750+(d[I>>0]|0)>>0]|0;K=b+13|0;L=a[900750+(d[K>>0]|0)>>0]|0;M=b+14|0;N=a[900750+(d[M>>0]|0)>>0]|0;O=b+15|0;P=a[900750+(d[O>>0]|0)>>0]|0;a[b>>0]=a[900750+(d[b>>0]|0)>>0]|0;a[n>>0]=m;a[l>>0]=k;a[j>>0]=h;a[g>>0]=t;a[u>>0]=v;a[w>>0]=x;a[y>>0]=z;a[A>>0]=B;a[C>>0]=D;a[E>>0]=F;a[G>>0]=H;a[I>>0]=J;a[K>>0]=L;a[M>>0]=N;a[O>>0]=P}if(a[e+4>>0]|0){r=o;c=r+16|0;do{a[r>>0]=0;r=r+1|0}while((r|0)<(c|0));P=0;do{O=(d[b+P>>0]|0)+1|0;a[o+P>>0]=O>>>0>3?3:O&255;P=P+1|0}while((P|0)!=16);r=b;s=o;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}o=a[e>>0]|0;if(o<<24>>24){Eb(p,b,o&255);r=b;s=p;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+5>>0]|0){p=b+1|0;o=3-(d[p>>0]|0)&255;P=b+2|0;O=3-(d[P>>0]|0)&255;N=b+3|0;M=3-(d[N>>0]|0)&255;L=b+4|0;K=3-(d[L>>0]|0)&255;J=b+5|0;I=3-(d[J>>0]|0)&255;H=b+6|0;G=3-(d[H>>0]|0)&255;F=b+7|0;E=3-(d[F>>0]|0)&255;D=b+8|0;C=3-(d[D>>0]|0)&255;B=b+9|0;A=3-(d[B>>0]|0)&255;z=b+10|0;y=3-(d[z>>0]|0)&255;x=b+11|0;w=3-(d[x>>0]|0)&255;v=b+12|0;u=3-(d[v>>0]|0)&255;t=b+13|0;g=3-(d[t>>0]|0)&255;h=b+14|0;j=3-(d[h>>0]|0)&255;k=b+15|0;l=3-(d[k>>0]|0)&255;a[b>>0]=3-(d[b>>0]|0);a[p>>0]=o;a[P>>0]=O;a[N>>0]=M;a[L>>0]=K;a[J>>0]=I;a[H>>0]=G;a[F>>0]=E;a[D>>0]=C;a[B>>0]=A;a[z>>0]=y;a[x>>0]=w;a[v>>0]=u;a[t>>0]=g;a[h>>0]=j;a[k>>0]=l}if(!(a[e+2>>0]|0)){i=f;return}Fb(q,b);r=b;s=q;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0));i=f;return}function zb(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;g=f;h=g;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));if(d){a[g>>0]=a[c+12>>0]|0;a[g+1>>0]=a[c+13>>0]|0;a[g+2>>0]=a[c+14>>0]|0;a[g+3>>0]=a[c+15>>0]|0;a[g+4>>0]=a[c+8>>0]|0;a[g+5>>0]=a[c+9>>0]|0;a[g+6>>0]=a[c+10>>0]|0;a[g+7>>0]=a[c+11>>0]|0;a[g+8>>0]=a[c+4>>0]|0;a[g+9>>0]=a[c+5>>0]|0;a[g+10>>0]=a[c+6>>0]|0;a[g+11>>0]=a[c+7>>0]|0;a[g+12>>0]=a[c>>0]|0;a[g+13>>0]=a[c+1>>0]|0;a[g+14>>0]=a[c+2>>0]|0;a[g+15>>0]=a[c+3>>0]|0}else{h=g;k=c;j=h+16|0;do{a[h>>0]=a[k>>0]|0;h=h+1|0;k=k+1|0}while((h|0)<(j|0))}h=b;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));switch(e|0){case 0:{h=b;k=g;j=h+16|0;do{a[h>>0]=a[k>>0]|0;h=h+1|0;k=k+1|0}while((h|0)<(j|0));i=f;return}case 1:{a[b>>0]=a[g+12>>0]|0;a[b+1>>0]=a[g+8>>0]|0;a[b+2>>0]=a[g+4>>0]|0;a[b+3>>0]=a[g>>0]|0;a[b+4>>0]=a[g+13>>0]|0;a[b+5>>0]=a[g+9>>0]|0;a[b+6>>0]=a[g+5>>0]|0;a[b+7>>0]=a[g+1>>0]|0;a[b+8>>0]=a[g+14>>0]|0;a[b+9>>0]=a[g+10>>0]|0;a[b+10>>0]=a[g+6>>0]|0;a[b+11>>0]=a[g+2>>0]|0;a[b+12>>0]=a[g+15>>0]|0;a[b+13>>0]=a[g+11>>0]|0;a[b+14>>0]=a[g+7>>0]|0;a[b+15>>0]=a[g+3>>0]|0;i=f;return}case 2:{a[b>>0]=a[g+15>>0]|0;a[b+1>>0]=a[g+14>>0]|0;a[b+2>>0]=a[g+13>>0]|0;a[b+3>>0]=a[g+12>>0]|0;a[b+4>>0]=a[g+11>>0]|0;a[b+5>>0]=a[g+10>>0]|0;a[b+6>>0]=a[g+9>>0]|0;a[b+7>>0]=a[g+8>>0]|0;a[b+8>>0]=a[g+7>>0]|0;a[b+9>>0]=a[g+6>>0]|0;a[b+10>>0]=a[g+5>>0]|0;a[b+11>>0]=a[g+4>>0]|0;a[b+12>>0]=a[g+3>>0]|0;a[b+13>>0]=a[g+2>>0]|0;a[b+14>>0]=a[g+1>>0]|0;a[b+15>>0]=a[g>>0]|0;i=f;return}case 3:{a[b>>0]=a[g+3>>0]|0;a[b+1>>0]=a[g+7>>0]|0;a[b+2>>0]=a[g+11>>0]|0;a[b+3>>0]=a[g+15>>0]|0;a[b+4>>0]=a[g+2>>0]|0;a[b+5>>0]=a[g+6>>0]|0;a[b+6>>0]=a[g+10>>0]|0;a[b+7>>0]=a[g+14>>0]|0;a[b+8>>0]=a[g+1>>0]|0;a[b+9>>0]=a[g+5>>0]|0;a[b+10>>0]=a[g+9>>0]|0;a[b+11>>0]=a[g+13>>0]|0;a[b+12>>0]=a[g>>0]|0;a[b+13>>0]=a[g+4>>0]|0;a[b+14>>0]=a[g+8>>0]|0;a[b+15>>0]=a[g+12>>0]|0;i=f;return}default:ma(896047,896125,487,900726)}}function Ab(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=b;f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));e=0;a:while(1){f=e<<2;g=e+-1|0;h=g>>>0>3;i=e;e=e+1|0;j=e>>>0>3;k=e<<2;l=g<<2;m=0;do{if(!h){n=m+-1|0;if(n>>>0>3)o=0;else{if((n|g)>>>0>=4){p=6;break a}o=d[c+(n+l)>>0]|0}if((m|g)>>>0>=4){p=6;break a}n=d[c+(m+l)>>0]|0;q=o>>>0>n>>>0?o:n;n=m+1|0;if(n>>>0>3)r=q;else{if((n|g)>>>0>=4){p=6;break a}s=d[c+(n+l)>>0]|0;r=q>>>0>s>>>0?q:s}}else r=0;s=m+-1|0;if(s>>>0>3)t=r;else{if((s|i)>>>0>=4){p=6;break a}q=d[c+(s+f)>>0]|0;t=r>>>0>q>>>0?r:q}if((m|i)>>>0>=4){p=6;break a}q=d[c+(m+f)>>0]|0;s=t>>>0>q>>>0?t:q;q=m+1|0;if(q>>>0>3)u=s;else{if((q|i)>>>0>=4){p=6;break a}n=d[c+(q+f)>>0]|0;u=s>>>0>n>>>0?s:n}if(!j){n=m+-1|0;if(n>>>0>3)v=u;else{if((n|e)>>>0>=4){p=6;break a}s=d[c+(n+k)>>0]|0;v=u>>>0>s>>>0?u:s}if((m|e)>>>0>=4){p=6;break a}s=d[c+(m+k)>>0]|0;n=v>>>0>s>>>0?v:s;s=m+1|0;if(s>>>0>3)w=n;else{if((s|e)>>>0>=4){p=6;break a}q=d[c+(s+k)>>0]|0;w=n>>>0>q>>>0?n:q}}else w=u;if((m|i)>>>0>=4){p=8;break a}a[b+(m+f)>>0]=w;m=m+1|0}while(m>>>0<4);if(e>>>0>=4){p=11;break}}if((p|0)==6)ma(900696,896125,151,900715);else if((p|0)==8)ma(900696,896125,152,900715);else if((p|0)==11)return}function Bb(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=b;f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));e=0;a:while(1){f=e<<2;g=e+-1|0;h=g>>>0>3;i=e;e=e+1|0;j=e>>>0>3;k=e<<2;l=g<<2;m=0;do{if(!h){n=m+-1|0;if(n>>>0>3)o=99;else{if((n|g)>>>0>=4){p=6;break a}q=d[c+(n+l)>>0]|0;o=q>>>0>99?99:q}if((m|g)>>>0>=4){p=6;break a}q=d[c+(m+l)>>0]|0;n=o>>>0>>0?o:q;q=m+1|0;if(q>>>0>3)r=n;else{if((q|g)>>>0>=4){p=6;break a}s=d[c+(q+l)>>0]|0;r=n>>>0>>0?n:s}}else r=99;s=m+-1|0;if(s>>>0>3)t=r;else{if((s|i)>>>0>=4){p=6;break a}n=d[c+(s+f)>>0]|0;t=r>>>0>>0?r:n}if((m|i)>>>0>=4){p=6;break a}n=d[c+(m+f)>>0]|0;s=t>>>0>>0?t:n;n=m+1|0;if(n>>>0>3)u=s;else{if((n|i)>>>0>=4){p=6;break a}q=d[c+(n+f)>>0]|0;u=s>>>0>>0?s:q}if(!j){q=m+-1|0;if(q>>>0>3)v=u;else{if((q|e)>>>0>=4){p=6;break a}s=d[c+(q+k)>>0]|0;v=u>>>0>>0?u:s}if((m|e)>>>0>=4){p=6;break a}s=d[c+(m+k)>>0]|0;q=v>>>0>>0?v:s;s=m+1|0;if(s>>>0>3)w=q;else{if((s|e)>>>0>=4){p=6;break a}n=d[c+(s+k)>>0]|0;w=q>>>0>>0?q:n}}else w=u;if((m|i)>>>0>=4){p=8;break a}a[b+(m+f)>>0]=w;m=m+1|0}while(m>>>0<4);if(e>>>0>=4){p=11;break}}if((p|0)==6)ma(900696,896125,151,900715);else if((p|0)==8)ma(900696,896125,152,900715);else if((p|0)==11)return}function Cb(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=b;f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));e=0;a:while(1){f=e<<2;g=-1+e|0;h=(g|0)<0?0:(g|0)>3?3:g;g=h<<2;i=(e|0)<0?0:(e|0)>3?3:e;j=i<<2;k=1+e|0;l=(k|0)<0?0:(k|0)>3?3:k;k=l<<2;m=0;do{n=m+-1|0;o=(n|0)<0?0:n;n=m;m=m+1|0;p=(m|0)>3?3:m;if((p|(o|(n|h)))>>>0>=4){q=4;break a}r=Z(d[c+(n+g)>>0]|0,-1)|0;if((p|(o|(n|i)))>>>0>=4){q=4;break a}s=((d[c+(n+j)>>0]|0)<<3)+((Z(d[c+(o+j)>>0]|0,-1)|0)+r)|0;r=(Z(d[c+(p+j)>>0]|0,-1)|0)+s|0;if((p|(o|(n|l)))>>>0>=4){q=4;break a}o=(Z(d[c+(n+k)>>0]|0,-1)|0)+r|0;if((n|e)>>>0>=4){q=5;break a}a[b+(n+f)>>0]=(o|0)<-3?0:(o|0)>15?3:((o|0)/4|0)&255}while(m>>>0<4);e=e+1|0;if(e>>>0>=4){q=8;break}}if((q|0)==4)ma(900696,896125,151,900715);else if((q|0)==5)ma(900696,896125,152,900715);else if((q|0)==8)return}function Db(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=(d[c+1>>0]|0)<<2|(d[c>>0]|0)|(d[c+2>>0]|0)<<4|(d[c+3>>0]|0)<<6|((d[c+5>>0]|0)<<2|(d[c+4>>0]|0)|(d[c+6>>0]|0)<<4|(d[c+7>>0]|0)<<6)<<8|((d[c+9>>0]|0)<<2|(d[c+8>>0]|0)|(d[c+10>>0]|0)<<4|(d[c+11>>0]|0)<<6)<<16|((d[c+13>>0]|0)<<2|(d[c+12>>0]|0)|(d[c+14>>0]|0)<<4|(d[c+15>>0]|0)<<6)<<24;f=b;g=f+16|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));f=e;e=0;a:while(1){g=e<<2;h=f;i=0;while(1){if((i|e)>>>0>=4){j=4;break a}k=i+g|0;l=d[c+k>>0]|0;m=((h|0)==0&1)+h|0;n=((m&65535)*36969|0)+(m>>>16)|0;m=((n|0)==0&1)+n|0;o=((m&65535)*36969|0)+(m>>>16)|0;m=(((o&65535^o>>>16)*6|0)>>>16)+(((n&65535^n>>>16)*6|0)>>>16)|0;b:do switch(m|0){case 0:{p=l+-2|0;break}case 10:{p=l+2|0;break}default:if(m>>>0<3){p=l+-1|0;break b}else{p=l+(m>>>0>7&1)|0;break b}}while(0);a[b+k>>0]=(p|0)<0?0:(p|0)>3?3:p&255;i=i+1|0;if(i>>>0>=4){q=o;break}else h=o}h=e+1|0;if(h>>>0<4){f=q;e=h}else{j=13;break}}if((j|0)==4)ma(900696,896125,151,900715);else if((j|0)==13)return}function Eb(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if((e|0)<4){f=b;g=f+16|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));a[b>>0]=a[(d[c>>0]|0)+(900783+(e<<2))>>0]|0;a[b+1>>0]=a[(d[c+1>>0]|0)+(900783+(e<<2))>>0]|0;a[b+2>>0]=a[(d[c+2>>0]|0)+(900783+(e<<2))>>0]|0;a[b+3>>0]=a[(d[c+3>>0]|0)+(900783+(e<<2))>>0]|0;a[b+4>>0]=a[(d[c+4>>0]|0)+(900783+(e<<2))>>0]|0;a[b+5>>0]=a[(d[c+5>>0]|0)+(900783+(e<<2))>>0]|0;a[b+6>>0]=a[(d[c+6>>0]|0)+(900783+(e<<2))>>0]|0;a[b+7>>0]=a[(d[c+7>>0]|0)+(900783+(e<<2))>>0]|0;a[b+8>>0]=a[(d[c+8>>0]|0)+(900783+(e<<2))>>0]|0;a[b+9>>0]=a[(d[c+9>>0]|0)+(900783+(e<<2))>>0]|0;a[b+10>>0]=a[(d[c+10>>0]|0)+(900783+(e<<2))>>0]|0;a[b+11>>0]=a[(d[c+11>>0]|0)+(900783+(e<<2))>>0]|0;a[b+12>>0]=a[(d[c+12>>0]|0)+(900783+(e<<2))>>0]|0;a[b+13>>0]=a[(d[c+13>>0]|0)+(900783+(e<<2))>>0]|0;a[b+14>>0]=a[(d[c+14>>0]|0)+(900783+(e<<2))>>0]|0;a[b+15>>0]=a[(d[c+15>>0]|0)+(900783+(e<<2))>>0]|0;return}else ma(900754,896125,239,900770)}function Fb(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;d=i;i=i+16|0;e=d;f=d+8|0;g=b;h=g+16|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));g=0;a:while(1){h=g<<2;j=-1+g|0;k=j>>>0>3;l=g>>>0>3;m=1+g|0;n=m>>>0>3;o=m<<2;p=g<<2;q=j<<2;r=0;do{s=r+-1|0;t=s>>>0>3;u=r+1|0;v=u>>>0>3;if(!k){if(t)w=0;else{if((s|j)>>>0>=4){x=6;break a}a[f>>0]=a[c+(s+q)>>0]|0;w=1}if((r|j)>>>0>=4){x=6;break a}y=w+1|0;a[f+w>>0]=a[c+(r+q)>>0]|0;if(v)z=y;else{if((u|j)>>>0>=4){x=6;break a}a[f+y>>0]=a[c+(u+q)>>0]|0;z=y+1|0}}else z=0;if(!l){if(t)A=z;else{if((s|g)>>>0>=4){x=6;break a}a[f+z>>0]=a[c+(s+p)>>0]|0;A=z+1|0}if(v)B=A;else{if((u|g)>>>0>=4){x=6;break a}a[f+A>>0]=a[c+(u+p)>>0]|0;B=A+1|0}}else B=z;if(!n){if(t)C=B;else{if((s|m)>>>0>=4){x=6;break a}a[f+B>>0]=a[c+(s+o)>>0]|0;C=B+1|0}if((r|m)>>>0>=4){x=6;break a}s=C+1|0;a[f+C>>0]=a[c+(r+o)>>0]|0;if(v)D=s;else{if((u|m)>>>0>=4){x=6;break a}a[f+s>>0]=a[c+(u+o)>>0]|0;D=s+1|0}}else D=B;Jc(f,f+D|0,e);if((r|g)>>>0>=4){x=9;break a}a[b+(r+h)>>0]=a[f+(D>>>1)>>0]|0;r=r+1|0}while(r>>>0<4);g=g+1|0;if(g>>>0>=4){x=12;break}}if((x|0)==6)ma(900696,896125,151,900715);else if((x|0)==9)ma(900696,896125,152,900715);else if((x|0)==12){i=d;return}}function Gb(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=d[e>>0]|0;h=d[e+1>>0]|0;i=d[e+2>>0]|0;j=d[e+3>>0]|0;k=d[e+4>>0]|0;e=((k>>>4)*81|0)+(((j>>>4)*27|0)+(((i>>>4)*9|0)+(((h>>>4)*3|0)+(g>>>4))))|0;if((e|0)>=243)ma(908238,895663,4737,908250);l=d[908268+e>>0]|0;e=l<<4&48|g&15|h<<6&960;h=c[f>>2]|0;g=10;while(1){m=h&7;n=8-m|0;o=(n|0)<(g|0)?n:g;n=b+(h>>3)|0;a[n>>0]=d[n>>0]|0|e<>2]|0)|0;c[f>>2]=m;if((g|0)==(o|0)){p=m;break}else{e=e>>>o;h=m;g=g-o|0}}g=l<<2&64|l>>>2&3|l<<6&6144|l>>>7<<17|i<<2&60|j<<7&1920|k<<13&122880;k=p;p=18;while(1){j=k&7;i=8-j|0;l=(i|0)<(p|0)?i:p;i=b+(k>>3)|0;a[i>>0]=d[i>>0]|0|g<>2]|0)|0;c[f>>2]=k;if((p|0)==(l|0))break;else{g=g>>>l;p=p-l|0}}return}function Hb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=b+8|0;f=c[e>>2]|0;g=b+4|0;h=c[g>>2]|0;i=h;if(f-i>>4>>>0>=d>>>0){j=d;k=h;do{l=k;m=l+16|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));k=(c[g>>2]|0)+16|0;c[g>>2]=k;j=j+-1|0}while((j|0)!=0);return}j=c[b>>2]|0;k=(i-j>>4)+d|0;if(k>>>0>268435455)_b(b);i=j;j=f-i|0;if(j>>4>>>0<134217727){f=j>>3;j=f>>>0>>0?k:f;f=(c[g>>2]|0)-i>>4;if(!j){n=0;o=0;p=f}else{q=j;r=f;s=8}}else{q=268435455;r=(c[g>>2]|0)-i>>4;s=8}if((s|0)==8){n=q;o=$b(q<<4)|0;p=r}r=o+(p<<4)|0;q=o+(n<<4)|0;n=d;d=r;s=r;while(1){l=d;m=l+16|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));d=s+16|0;r=d;n=n+-1|0;if(!n){t=r;break}else s=r}s=c[b>>2]|0;n=(c[g>>2]|0)-s|0;d=o+(p-(n>>4)<<4)|0;Tc(d|0,s|0,n|0)|0;c[b>>2]=d;c[g>>2]=t;c[e>>2]=q;if(!s)return;ac(s);return}function Ib(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=a+8|0;e=c[d>>2]|0;f=a+4|0;g=c[f>>2]|0;h=g;if(e-h>>3>>>0>=b>>>0){i=b;j=g;do{g=j;c[g>>2]=0;c[g+4>>2]=0;j=(c[f>>2]|0)+8|0;c[f>>2]=j;i=i+-1|0}while((i|0)!=0);return}i=c[a>>2]|0;j=(h-i>>3)+b|0;if(j>>>0>536870911)_b(a);h=i;i=e-h|0;if(i>>3>>>0<268435455){e=i>>2;i=e>>>0>>0?j:e;e=(c[f>>2]|0)-h>>3;if(!i){k=0;l=0;m=e}else{n=i;o=e;p=8}}else{n=536870911;o=(c[f>>2]|0)-h>>3;p=8}if((p|0)==8){k=n;l=$b(n<<3)|0;m=o}o=l+(m<<3)|0;n=l+(k<<3)|0;k=b;b=o;p=o;while(1){o=b;c[o>>2]=0;c[o+4>>2]=0;b=p+8|0;o=b;k=k+-1|0;if(!k){q=o;break}else p=o}p=c[a>>2]|0;k=(c[f>>2]|0)-p|0;b=l+(m-(k>>3)<<3)|0;Tc(b|0,p|0,k|0)|0;c[a>>2]=b;c[f>>2]=q;c[d>>2]=n;if(!p)return;ac(p);return}function Jb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=b+8|0;f=c[e>>2]|0;g=b+4|0;h=c[g>>2]|0;i=h;if(((f-i|0)/11|0)>>>0>=d>>>0){j=d;k=h;do{l=k;m=l+11|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));k=(c[g>>2]|0)+11|0;c[g>>2]=k;j=j+-1|0}while((j|0)!=0);return}j=c[b>>2]|0;k=((i-j|0)/11|0)+d|0;if(k>>>0>390451572)_b(b);i=j;j=(f-i|0)/11|0;if(j>>>0<195225786){f=j<<1;j=f>>>0>>0?k:f;f=((c[g>>2]|0)-i|0)/11|0;if(!j){n=0;o=0;p=f}else{q=j;r=f;s=8}}else{q=390451572;r=((c[g>>2]|0)-i|0)/11|0;s=8}if((s|0)==8){n=q;o=$b(q*11|0)|0;p=r}r=o+(p*11|0)|0;q=o+(n*11|0)|0;n=d;d=r;s=r;while(1){l=d;m=l+11|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));d=s+11|0;r=d;n=n+-1|0;if(!n){t=r;break}else s=r}s=c[b>>2]|0;n=(c[g>>2]|0)-s|0;d=o+((((n|0)/-11|0)+p|0)*11|0)|0;Tc(d|0,s|0,n|0)|0;c[b>>2]=d;c[g>>2]=t;c[e>>2]=q;if(!s)return;ac(s);return}function Kb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+8|0;e=c[d>>2]|0;f=a+4|0;g=c[f>>2]|0;h=g;if(e-h>>2>>>0>=b>>>0){Qc(g|0,0,b<<2|0)|0;c[f>>2]=g+(b<<2);return}g=c[a>>2]|0;i=g;j=(h-i>>2)+b|0;if(j>>>0>1073741823)_b(a);h=g;k=e-h|0;if(k>>2>>>0<536870911){e=k>>1;k=e>>>0>>0?j:e;e=(c[f>>2]|0)-h|0;j=e>>2;if(!k){l=0;m=0;n=j;o=e}else{p=k;q=j;r=e;s=8}}else{e=(c[f>>2]|0)-h|0;p=1073741823;q=e>>2;r=e;s=8}if((s|0)==8){l=p;m=$b(p<<2)|0;n=q;o=r}Qc(m+(n<<2)|0,0,b<<2|0)|0;Tc(m|0,g|0,o|0)|0;c[a>>2]=m;c[f>>2]=m+(n+b<<2);c[d>>2]=m+(l<<2);if(!i)return;ac(i);return}function Lb(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=a+8|0;f=c[e>>2]|0;g=a+4|0;h=c[g>>2]|0;i=h;if(f-i>>2>>>0>=d>>>0){j=d;k=h;do{b[k>>1]=0;b[k+2>>1]=0>>>16;k=(c[g>>2]|0)+4|0;c[g>>2]=k;j=j+-1|0}while((j|0)!=0);return}j=c[a>>2]|0;k=(i-j>>2)+d|0;if(k>>>0>1073741823)_b(a);i=j;j=f-i|0;if(j>>2>>>0<536870911){f=j>>1;j=f>>>0>>0?k:f;f=(c[g>>2]|0)-i>>2;if(!j){l=0;m=0;n=f}else{o=j;p=f;q=8}}else{o=1073741823;p=(c[g>>2]|0)-i>>2;q=8}if((q|0)==8){l=o;m=$b(o<<2)|0;n=p}p=m+(n<<2)|0;o=m+(l<<2)|0;l=d;d=p;q=p;while(1){b[d>>1]=0;b[d+2>>1]=0>>>16;d=q+4|0;p=d;l=l+-1|0;if(!l){r=p;break}else q=p}q=c[a>>2]|0;l=(c[g>>2]|0)-q|0;d=m+(n-(l>>2)<<2)|0;Tc(d|0,q|0,l|0)|0;c[a>>2]=d;c[g>>2]=r;c[e>>2]=o;if(!q)return;ac(q);return}function Mb(a){a=a|0;Ya(a);return}function Nb(){return Xa()|0}function Ob(){var a=0,b=0;_a();if(c[127496]|0)return;a=$b(12)|0;b=c[127255]|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;Za(a,b,492636);c[127496]=a;return}function Pb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!((a|0)!=0&(b|0)!=0)){d=0;return d|0}e=$b(596)|0;f=e+4|0;jb(f,c[127496]|0);c[e+588>>2]=a;c[e+592>>2]=b;if(kb(f,a,b)|0){c[e>>2]=-559038751;d=e;return d|0}else{Zb(f);ac(e);d=0;return d|0}return 0}function Qb(a){a=a|0;if(!a)return;if((c[a>>2]|0)!=-559038751)ma(909764,909784,85,909803);Zb(a+4|0);ac(a);return}function Rb(a){a=a|0;var b=0,e=0,f=0,g=0;b=i;i=i+48|0;e=b;if(!a){f=0;i=b;return f|0}if((c[a>>2]|0)!=-559038751)ma(909764,909784,98,909815);g=pb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,e,0,0)|0;f=g?d[e+40>>0]|0:0;i=b;return f|0}function Sb(a){a=a|0;var b=0;if(!a){b=0;return b|0}if((c[a>>2]|0)!=-559038751)ma(909764,909784,116,909835);b=mb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0)|0;return b|0}function Tb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+48|0;e=d;if(!a){f=0;i=d;return f|0}if((c[a>>2]|0)!=-559038751)ma(909764,909784,129,909856);g=nb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,e,b)|0;f=g?c[e+4>>2]|0:0;i=d;return f|0}function Ub(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;if(!a){i=e;return 0}if((c[a>>2]|0)==-559038751){g=ob(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,b,d,f,e+4|0,e)|0;i=e;return (g?c[f>>2]|0:0)|0}else ma(909764,909784,147,909877);return 0}function Vb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+4|0;if(!a){i=e;return 0}if((c[a>>2]|0)==-559038751){g=ob(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,b,d,e+8|0,f,e)|0;i=e;return (g?c[f>>2]|0:0)|0}else ma(909764,909784,164,909899);return 0}function Wb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f;if(!a){h=0;i=f;return h|0}if((c[a>>2]|0)!=-559038751)ma(909764,909784,181,909922);if(e>>>0>16){h=0;i=f;return h|0}j=tb(e)|0;if(!(ob(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,b,d,f+8|0,f+4|0,g)|0)){h=0;i=f;return h|0}h=Z(c[g>>2]|0,j)|0;i=f;return h|0}function Xb(a){a=a|0;var b=0;if(!a){b=0;return b|0}if((c[a>>2]|0)!=-559038751)ma(909764,909784,203,909963);b=(qb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0)|0)&1;return b|0}function Yb(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if(!a){j=0;return j|0}if((c[a>>2]|0)!=-559038751)ma(909764,909784,218,909987);if(g>>>0>16){j=0;return j|0}k=tb(g)|0;j=(sb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,e,f,b,(d>>>0)/(k>>>0)|0,g,((i|0)!=0?4:0)|(h|0)!=0,0,0,0)|0)&1;return j|0}function Zb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+200|0;d=a+584|0;do{e=d;d=d+-12|0;f=c[d>>2]|0;g=f;if(f){h=e+-8|0;e=c[h>>2]|0;if((e|0)!=(f|0))c[h>>2]=e+(~((e+-4-g|0)>>>2)<<2);ac(f)}}while((d|0)!=(b|0));b=c[a+188>>2]|0;d=b;if(b){f=a+192|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-4-d|0)>>>2)<<2);ac(b)}b=c[a+176>>2]|0;d=b;if(b){g=a+180|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);ac(b)}b=c[a+160>>2]|0;d=b;if(b){f=a+164|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-2-d|0)>>>1)<<1);ac(b)}b=c[a+148>>2]|0;d=b;if(b){g=a+152|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);ac(b)}b=c[a+136>>2]|0;if(b){d=a+140|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;ac(b)}b=c[a+124>>2]|0;d=b;if(b){f=a+128|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-2-d|0)>>>1)<<1);ac(b)}b=c[a+112>>2]|0;d=b;if(b){g=a+116|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);ac(b)}b=c[a+100>>2]|0;if(b){d=a+104|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;ac(b)}b=c[a+88>>2]|0;d=b;if(b){f=a+92|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-2-d|0)>>>1)<<1);ac(b)}b=c[a+76>>2]|0;d=b;if(b){g=a+80|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);ac(b)}b=c[a+64>>2]|0;if(b){d=a+68|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;ac(b)}b=c[a+52>>2]|0;d=b;if(b){f=a+56|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-2-d|0)>>>1)<<1);ac(b)}b=c[a+40>>2]|0;d=b;if(b){g=a+44|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);ac(b)}b=c[a+28>>2]|0;if(b){d=a+32|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;ac(b)}b=c[a+12>>2]|0;if(b){d=a+16|0;f=c[d>>2]|0;if((f|0)!=(b|0))c[d>>2]=f+(~(((0-b+(f+-11)|0)>>>0)/11|0)*11|0);ac(b)}b=c[a>>2]|0;if(!b)return;f=a+4|0;a=c[f>>2]|0;if((a|0)!=(b|0))c[f>>2]=a+(~((a+-8-b|0)>>>3)<<3);ac(b);return}function _b(a){a=a|0;ma(910152,910175,303,910250)}function $b(a){a=a|0;var b=0,d=0,e=0;b=(a|0)==0?1:a;a=Hc(b)|0;a:do if(!a){while(1){d=ec()|0;if(!d)break;La[d&0]();d=Hc(b)|0;if(d){e=d;break a}}d=na(4)|0;c[d>>2]=509996;za(d|0,8,1)}else e=a;while(0);return e|0}function ac(a){a=a|0;Ic(a);return}function bc(a){a=a|0;return}function cc(a){a=a|0;ac(a);return}function dc(a){a=a|0;return 910271}function ec(){var a=0;a=c[127502]|0;c[127502]=a+0;return a|0}function fc(a){a=a|0;return}function gc(a){a=a|0;return}function hc(a){a=a|0;return}function ic(a){a=a|0;return}function jc(a){a=a|0;return}function kc(a){a=a|0;ac(a);return}function lc(a){a=a|0;ac(a);return}function mc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;i=i+64|0;f=e;if((a|0)!=(b|0))if((b|0)!=0?(g=qc(b,40,56,0)|0,(g|0)!=0):0){b=f;h=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(h|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Na[c[(c[g>>2]|0)+28>>2]&3](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];j=1}else j=0;k=j}else k=0;else k=1;i=e;return k|0}function nc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}h=d+24|0;if((c[h>>2]|0)==2)c[h>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function oc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))nc(0,b,d,e);return}function pc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((a|0)==(c[b+8>>2]|0))nc(0,b,d,e);else{f=c[a+8>>2]|0;Na[c[(c[f>>2]|0)+28>>2]&3](f,b,d,e)}return}function qc(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=i;i=i+64|0;j=h;k=c[d>>2]|0;l=d+(c[k+-8>>2]|0)|0;m=c[k+-4>>2]|0;c[j>>2]=f;c[j+4>>2]=d;c[j+8>>2]=e;c[j+12>>2]=g;g=j+16|0;e=j+20|0;d=j+24|0;k=j+28|0;n=j+32|0;o=j+40|0;p=(m|0)==(f|0);q=g;r=q+36|0;do{c[q>>2]=0;q=q+4|0}while((q|0)<(r|0));b[g+36>>1]=0;a[g+38>>0]=0;a:do if(p){c[j+48>>2]=1;Ma[c[(c[f>>2]|0)+20>>2]&3](f,j,l,l,1,0);s=(c[d>>2]|0)==1?l:0}else{Ia[c[(c[m>>2]|0)+24>>2]&3](m,j,l,1,0);switch(c[j+36>>2]|0){case 0:{s=(c[o>>2]|0)==1&(c[k>>2]|0)==1&(c[n>>2]|0)==1?c[e>>2]|0:0;break a;break}case 1:break;default:{s=0;break a}}if((c[d>>2]|0)!=1?!((c[o>>2]|0)==0&(c[k>>2]|0)==1&(c[n>>2]|0)==1):0){s=0;break}s=c[g>>2]|0}while(0);i=h;return s|0}function rc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;h=c[b>>2]|0;if(!h){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((h|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;a[d+54>>0]=1;break}h=d+24|0;b=c[h>>2]|0;if((b|0)==2){c[h>>2]=g;i=g}else i=b;if((i|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function sc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;a:do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){h=c[b+8>>2]|0;Ia[c[(c[h>>2]|0)+24>>2]&3](h,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;j=d+52|0;a[j>>0]=0;k=d+53|0;a[k>>0]=0;l=c[b+8>>2]|0;Ma[c[(c[l>>2]|0)+20>>2]&3](l,d,e,e,1,g);if(a[k>>0]|0){if(!(a[j>>0]|0)){m=1;n=13}}else{m=0;n=13}do if((n|0)==13){c[h>>2]=e;j=d+40|0;c[j>>2]=(c[j>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(m)break}else n=16;if((n|0)==16?m:0)break;c[i>>2]=4;break a}while(0);c[i>>2]=3;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function tc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(g=d+28|0,(c[g>>2]|0)!=1):0)c[g>>2]=f}else if((b|0)==(c[d>>2]|0)){if((c[d+16>>2]|0)!=(e|0)?(g=d+20|0,(c[g>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[g>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function uc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;if((a|0)==(c[b+8>>2]|0))rc(0,b,d,e,f);else{h=c[a+8>>2]|0;Ma[c[(c[h>>2]|0)+20>>2]&3](h,b,d,e,f,g)}return}function vc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)==(c[b+8>>2]|0))rc(0,b,d,e,f);return}function wc(){var a=0;if(!(c[127523]|0))a=510140;else a=c[(va()|0)+60>>2]|0;return a|0}function xc(a){a=a|0;var b=0;if(a>>>0>4294963200){c[(wc()|0)>>2]=0-a;b=-1}else b=a;return b|0}function yc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;do if(a){if((c[a+76>>2]|0)<=-1){b=Fc(a)|0;break}d=(zc(a)|0)==0;e=Fc(a)|0;if(d)b=e;else{Ac(a);b=e}}else{if(!(c[127534]|0))f=0;else f=yc(c[127534]|0)|0;Aa(510120);e=c[127529]|0;if(!e)g=f;else{d=e;e=f;while(1){if((c[d+76>>2]|0)>-1)h=zc(d)|0;else h=0;if((c[d+20>>2]|0)>>>0>(c[d+28>>2]|0)>>>0)i=Fc(d)|0|e;else i=e;if(h)Ac(d);d=c[d+56>>2]|0;if(!d){g=i;break}else e=i}}xa(510120);b=g}while(0);return b|0}function zc(a){a=a|0;return 0}function Ac(a){a=a|0;return}function Bc(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=xc(ka(6,d|0)|0)|0;i=b;return a|0}function Cc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+32|0;f=e;g=e+20|0;c[f>>2]=c[a+60>>2];c[f+4>>2]=0;c[f+8>>2]=b;c[f+12>>2]=g;c[f+16>>2]=d;if((xc(Ea(140,f|0)|0)|0)<0){c[g>>2]=-1;h=-1}else h=c[g>>2]|0;i=e;return h|0}function Dc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=i;i=i+48|0;f=e+16|0;g=e;h=e+32|0;j=a+28|0;k=c[j>>2]|0;c[h>>2]=k;l=a+20|0;m=(c[l>>2]|0)-k|0;c[h+4>>2]=m;c[h+8>>2]=b;c[h+12>>2]=d;b=a+60|0;k=a+44|0;n=h;h=2;o=m+d|0;while(1){if(!(c[127523]|0)){c[f>>2]=c[b>>2];c[f+4>>2]=n;c[f+8>>2]=h;p=xc(Fa(146,f|0)|0)|0}else{Ca(8,a|0);c[g>>2]=c[b>>2];c[g+4>>2]=n;c[g+8>>2]=h;m=xc(Fa(146,g|0)|0)|0;ja(0);p=m}if((o|0)==(p|0)){q=6;break}if((p|0)<0){r=n;s=h;q=8;break}m=o-p|0;t=c[n+4>>2]|0;if(p>>>0<=t>>>0)if((h|0)==2){c[j>>2]=(c[j>>2]|0)+p;u=t;v=p;w=n;x=2}else{u=t;v=p;w=n;x=h}else{y=c[k>>2]|0;c[j>>2]=y;c[l>>2]=y;u=c[n+12>>2]|0;v=p-t|0;w=n+8|0;x=h+-1|0}c[w>>2]=(c[w>>2]|0)+v;c[w+4>>2]=u-v;n=w;h=x;o=m}if((q|0)==6){o=c[k>>2]|0;c[a+16>>2]=o+(c[a+48>>2]|0);k=o;c[j>>2]=k;c[l>>2]=k;z=d}else if((q|0)==8){c[a+16>>2]=0;c[j>>2]=0;c[l>>2]=0;c[a>>2]=c[a>>2]|32;if((s|0)==2)z=0;else z=d-(c[r+4>>2]|0)|0}i=e;return z|0}function Ec(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+80|0;g=f;c[b+36>>2]=4;if((c[b>>2]&64|0)==0?(c[g>>2]=c[b+60>>2],c[g+4>>2]=21505,c[g+8>>2]=f+12,(wa(54,g|0)|0)!=0):0)a[b+75>>0]=-1;g=Dc(b,d,e)|0;i=f;return g|0}function Fc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+20|0;d=a+28|0;if((c[b>>2]|0)>>>0>(c[d>>2]|0)>>>0?(Ha[c[a+36>>2]&7](a,0,0)|0,(c[b>>2]|0)==0):0)e=-1;else{f=a+4|0;g=c[f>>2]|0;h=a+8|0;i=c[h>>2]|0;if(g>>>0>>0)Ha[c[a+40>>2]&7](a,g-i|0,1)|0;c[a+16>>2]=0;c[d>>2]=0;c[b>>2]=0;c[h>>2]=0;c[f>>2]=0;e=0}return e|0}function Gc(a){a=a|0;if(!(c[a+68>>2]|0))Ac(a);return}function Hc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,ra=0,sa=0,ta=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0;do if(a>>>0<245){b=a>>>0<11?16:a+11&-8;d=b>>>3;e=c[127564]|0;f=e>>>d;if(f&3){g=(f&1^1)+d|0;h=g<<1;i=510296+(h<<2)|0;j=510296+(h+2<<2)|0;h=c[j>>2]|0;k=h+8|0;l=c[k>>2]|0;do if((i|0)!=(l|0)){if(l>>>0<(c[127568]|0)>>>0)Ba();m=l+12|0;if((c[m>>2]|0)==(h|0)){c[m>>2]=i;c[j>>2]=l;break}else Ba()}else c[127564]=e&~(1<>2]=l|3;j=h+(l|4)|0;c[j>>2]=c[j>>2]|1;n=k;return n|0}j=c[127566]|0;if(b>>>0>j>>>0){if(f){l=2<>>12&16;m=l>>>i;l=m>>>5&8;o=m>>>l;m=o>>>2&4;p=o>>>m;o=p>>>1&2;q=p>>>o;p=q>>>1&1;r=(l|i|m|o|p)+(q>>>p)|0;p=r<<1;q=510296+(p<<2)|0;o=510296+(p+2<<2)|0;p=c[o>>2]|0;m=p+8|0;i=c[m>>2]|0;do if((q|0)!=(i|0)){if(i>>>0<(c[127568]|0)>>>0)Ba();l=i+12|0;if((c[l>>2]|0)==(p|0)){c[l>>2]=q;c[o>>2]=i;s=c[127566]|0;break}else Ba()}else{c[127564]=e&~(1<>2]=b|3;i=p+b|0;c[p+(b|4)>>2]=e|1;c[p+j>>2]=e;if(s){j=c[127569]|0;o=s>>>3;q=o<<1;d=510296+(q<<2)|0;f=c[127564]|0;k=1<>2]|0;if(h>>>0<(c[127568]|0)>>>0)Ba();else{t=o;u=h}}else{c[127564]=f|k;t=510296+(q+2<<2)|0;u=d}c[t>>2]=j;c[u+12>>2]=j;c[j+8>>2]=u;c[j+12>>2]=d}c[127566]=e;c[127569]=i;n=m;return n|0}i=c[127565]|0;if(i){e=(i&0-i)+-1|0;i=e>>>12&16;d=e>>>i;e=d>>>5&8;j=d>>>e;d=j>>>2&4;q=j>>>d;j=q>>>1&2;k=q>>>j;q=k>>>1&1;f=c[510560+((e|i|d|j|q)+(k>>>q)<<2)>>2]|0;q=(c[f+4>>2]&-8)-b|0;k=f;j=f;while(1){f=c[k+16>>2]|0;if(!f){d=c[k+20>>2]|0;if(!d){v=q;w=j;break}else x=d}else x=f;f=(c[x+4>>2]&-8)-b|0;d=f>>>0>>0;q=d?f:q;k=x;j=d?x:j}j=c[127568]|0;if(w>>>0>>0)Ba();k=w+b|0;if(w>>>0>=k>>>0)Ba();q=c[w+24>>2]|0;m=c[w+12>>2]|0;do if((m|0)==(w|0)){p=w+20|0;r=c[p>>2]|0;if(!r){d=w+16|0;f=c[d>>2]|0;if(!f){y=0;break}else{z=f;A=d}}else{z=r;A=p}while(1){p=z+20|0;r=c[p>>2]|0;if(r){z=r;A=p;continue}p=z+16|0;r=c[p>>2]|0;if(!r){B=z;C=A;break}else{z=r;A=p}}if(C>>>0>>0)Ba();else{c[C>>2]=0;y=B;break}}else{p=c[w+8>>2]|0;if(p>>>0>>0)Ba();r=p+12|0;if((c[r>>2]|0)!=(w|0))Ba();d=m+8|0;if((c[d>>2]|0)==(w|0)){c[r>>2]=m;c[d>>2]=p;y=m;break}else Ba()}while(0);do if(q){m=c[w+28>>2]|0;j=510560+(m<<2)|0;if((w|0)==(c[j>>2]|0)){c[j>>2]=y;if(!y){c[127565]=c[127565]&~(1<>>0<(c[127568]|0)>>>0)Ba();m=q+16|0;if((c[m>>2]|0)==(w|0))c[m>>2]=y;else c[q+20>>2]=y;if(!y)break}m=c[127568]|0;if(y>>>0>>0)Ba();c[y+24>>2]=q;j=c[w+16>>2]|0;do if(j)if(j>>>0>>0)Ba();else{c[y+16>>2]=j;c[j+24>>2]=y;break}while(0);j=c[w+20>>2]|0;if(j)if(j>>>0<(c[127568]|0)>>>0)Ba();else{c[y+20>>2]=j;c[j+24>>2]=y;break}}while(0);if(v>>>0<16){q=v+b|0;c[w+4>>2]=q|3;j=w+(q+4)|0;c[j>>2]=c[j>>2]|1}else{c[w+4>>2]=b|3;c[w+(b|4)>>2]=v|1;c[w+(v+b)>>2]=v;j=c[127566]|0;if(j){q=c[127569]|0;m=j>>>3;j=m<<1;p=510296+(j<<2)|0;d=c[127564]|0;r=1<>2]|0;if(f>>>0<(c[127568]|0)>>>0)Ba();else{D=m;E=f}}else{c[127564]=d|r;D=510296+(j+2<<2)|0;E=p}c[D>>2]=q;c[E+12>>2]=q;c[q+8>>2]=E;c[q+12>>2]=p}c[127566]=v;c[127569]=k}n=w+8|0;return n|0}else F=b}else F=b}else if(a>>>0<=4294967231){p=a+11|0;q=p&-8;j=c[127565]|0;if(j){r=0-q|0;d=p>>>8;if(d)if(q>>>0>16777215)G=31;else{p=(d+1048320|0)>>>16&8;f=d<>>16&4;m=f<>>16&2;i=14-(d|p|f)+(m<>>15)|0;G=q>>>(i+7|0)&1|i<<1}else G=0;i=c[510560+(G<<2)>>2]|0;a:do if(!i){H=r;I=0;J=0;K=86}else{f=r;m=0;p=q<<((G|0)==31?0:25-(G>>>1)|0);d=i;e=0;while(1){h=c[d+4>>2]&-8;o=h-q|0;if(o>>>0>>0)if((h|0)==(q|0)){L=o;M=d;N=d;K=90;break a}else{O=o;P=d}else{O=f;P=e}o=c[d+20>>2]|0;d=c[d+16+(p>>>31<<2)>>2]|0;h=(o|0)==0|(o|0)==(d|0)?m:o;if(!d){H=O;I=h;J=P;K=86;break}else{f=O;m=h;p=p<<1;e=P}}}while(0);if((K|0)==86){if((I|0)==0&(J|0)==0){i=2<>>12&16;b=i>>>r;i=b>>>5&8;k=b>>>i;b=k>>>2&4;e=k>>>b;k=e>>>1&2;p=e>>>k;e=p>>>1&1;Q=c[510560+((i|r|b|k|e)+(p>>>e)<<2)>>2]|0;R=0}else{Q=I;R=J}if(!Q){S=H;T=R}else{L=H;M=Q;N=R;K=90}}if((K|0)==90)while(1){K=0;e=(c[M+4>>2]&-8)-q|0;p=e>>>0>>0;k=p?e:L;e=p?M:N;p=c[M+16>>2]|0;if(p){L=k;M=p;N=e;K=90;continue}M=c[M+20>>2]|0;if(!M){S=k;T=e;break}else{L=k;N=e;K=90}}if((T|0)!=0?S>>>0<((c[127566]|0)-q|0)>>>0:0){j=c[127568]|0;if(T>>>0>>0)Ba();e=T+q|0;if(T>>>0>=e>>>0)Ba();k=c[T+24>>2]|0;p=c[T+12>>2]|0;do if((p|0)==(T|0)){b=T+20|0;r=c[b>>2]|0;if(!r){i=T+16|0;m=c[i>>2]|0;if(!m){U=0;break}else{V=m;W=i}}else{V=r;W=b}while(1){b=V+20|0;r=c[b>>2]|0;if(r){V=r;W=b;continue}b=V+16|0;r=c[b>>2]|0;if(!r){X=V;Y=W;break}else{V=r;W=b}}if(Y>>>0>>0)Ba();else{c[Y>>2]=0;U=X;break}}else{b=c[T+8>>2]|0;if(b>>>0>>0)Ba();r=b+12|0;if((c[r>>2]|0)!=(T|0))Ba();i=p+8|0;if((c[i>>2]|0)==(T|0)){c[r>>2]=p;c[i>>2]=b;U=p;break}else Ba()}while(0);do if(k){p=c[T+28>>2]|0;j=510560+(p<<2)|0;if((T|0)==(c[j>>2]|0)){c[j>>2]=U;if(!U){c[127565]=c[127565]&~(1<>>0<(c[127568]|0)>>>0)Ba();p=k+16|0;if((c[p>>2]|0)==(T|0))c[p>>2]=U;else c[k+20>>2]=U;if(!U)break}p=c[127568]|0;if(U>>>0

>>0)Ba();c[U+24>>2]=k;j=c[T+16>>2]|0;do if(j)if(j>>>0

>>0)Ba();else{c[U+16>>2]=j;c[j+24>>2]=U;break}while(0);j=c[T+20>>2]|0;if(j)if(j>>>0<(c[127568]|0)>>>0)Ba();else{c[U+20>>2]=j;c[j+24>>2]=U;break}}while(0);b:do if(S>>>0>=16){c[T+4>>2]=q|3;c[T+(q|4)>>2]=S|1;c[T+(S+q)>>2]=S;k=S>>>3;if(S>>>0<256){j=k<<1;p=510296+(j<<2)|0;b=c[127564]|0;i=1<>2]|0;if(r>>>0<(c[127568]|0)>>>0)Ba();else{Z=k;_=r}}else{c[127564]=b|i;Z=510296+(j+2<<2)|0;_=p}c[Z>>2]=e;c[_+12>>2]=e;c[T+(q+8)>>2]=_;c[T+(q+12)>>2]=p;break}p=S>>>8;if(p)if(S>>>0>16777215)$=31;else{j=(p+1048320|0)>>>16&8;i=p<>>16&4;b=i<>>16&2;r=14-(p|j|i)+(b<>>15)|0;$=S>>>(r+7|0)&1|r<<1}else $=0;r=510560+($<<2)|0;c[T+(q+28)>>2]=$;c[T+(q+20)>>2]=0;c[T+(q+16)>>2]=0;i=c[127565]|0;b=1<<$;if(!(i&b)){c[127565]=i|b;c[r>>2]=e;c[T+(q+24)>>2]=r;c[T+(q+12)>>2]=e;c[T+(q+8)>>2]=e;break}b=c[r>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(S|0)){r=S<<(($|0)==31?0:25-($>>>1)|0);i=b;while(1){j=i+16+(r>>>31<<2)|0;p=c[j>>2]|0;if(!p){aa=j;ba=i;break}if((c[p+4>>2]&-8|0)==(S|0)){ca=p;break c}else{r=r<<1;i=p}}if(aa>>>0<(c[127568]|0)>>>0)Ba();else{c[aa>>2]=e;c[T+(q+24)>>2]=ba;c[T+(q+12)>>2]=e;c[T+(q+8)>>2]=e;break b}}else ca=b;while(0);b=ca+8|0;i=c[b>>2]|0;r=c[127568]|0;if(i>>>0>=r>>>0&ca>>>0>=r>>>0){c[i+12>>2]=e;c[b>>2]=e;c[T+(q+8)>>2]=i;c[T+(q+12)>>2]=ca;c[T+(q+24)>>2]=0;break}else Ba()}else{i=S+q|0;c[T+4>>2]=i|3;b=T+(i+4)|0;c[b>>2]=c[b>>2]|1}while(0);n=T+8|0;return n|0}else F=q}else F=q}else F=-1;while(0);T=c[127566]|0;if(T>>>0>=F>>>0){S=T-F|0;ca=c[127569]|0;if(S>>>0>15){c[127569]=ca+F;c[127566]=S;c[ca+(F+4)>>2]=S|1;c[ca+T>>2]=S;c[ca+4>>2]=F|3}else{c[127566]=0;c[127569]=0;c[ca+4>>2]=T|3;S=ca+(T+4)|0;c[S>>2]=c[S>>2]|1}n=ca+8|0;return n|0}ca=c[127567]|0;if(ca>>>0>F>>>0){S=ca-F|0;c[127567]=S;ca=c[127570]|0;c[127570]=ca+F;c[ca+(F+4)>>2]=S|1;c[ca+4>>2]=F|3;n=ca+8|0;return n|0}do if(!(c[127682]|0)){ca=ua(30)|0;if(!(ca+-1&ca)){c[127684]=ca;c[127683]=ca;c[127685]=-1;c[127686]=-1;c[127687]=0;c[127675]=0;c[127682]=(Da(0)|0)&-16^1431655768;break}else Ba()}while(0);ca=F+48|0;S=c[127684]|0;T=F+47|0;ba=S+T|0;aa=0-S|0;S=ba&aa;if(S>>>0<=F>>>0){n=0;return n|0}$=c[127674]|0;if(($|0)!=0?(_=c[127672]|0,Z=_+S|0,Z>>>0<=_>>>0|Z>>>0>$>>>0):0){n=0;return n|0}d:do if(!(c[127675]&4)){$=c[127570]|0;e:do if($){Z=510704;while(1){_=c[Z>>2]|0;if(_>>>0<=$>>>0?(U=Z+4|0,(_+(c[U>>2]|0)|0)>>>0>$>>>0):0){da=Z;ea=U;break}Z=c[Z+8>>2]|0;if(!Z){K=174;break e}}Z=ba-(c[127567]|0)&aa;if(Z>>>0<2147483647){U=qa(Z|0)|0;_=(U|0)==((c[da>>2]|0)+(c[ea>>2]|0)|0);X=_?Z:0;if(_)if((U|0)==(-1|0))fa=X;else{ga=U;ha=X;K=194;break d}else{ia=U;ja=Z;ka=X;K=184}}else fa=0}else K=174;while(0);do if((K|0)==174){$=qa(0)|0;if(($|0)!=(-1|0)){q=$;X=c[127683]|0;Z=X+-1|0;if(!(Z&q))la=S;else la=S-q+(Z+q&0-X)|0;X=c[127672]|0;q=X+la|0;if(la>>>0>F>>>0&la>>>0<2147483647){Z=c[127674]|0;if((Z|0)!=0?q>>>0<=X>>>0|q>>>0>Z>>>0:0){fa=0;break}Z=qa(la|0)|0;q=(Z|0)==($|0);X=q?la:0;if(q){ga=$;ha=X;K=194;break d}else{ia=Z;ja=la;ka=X;K=184}}else fa=0}else fa=0}while(0);f:do if((K|0)==184){X=0-ja|0;do if(ca>>>0>ja>>>0&(ja>>>0<2147483647&(ia|0)!=(-1|0))?(Z=c[127684]|0,$=T-ja+Z&0-Z,$>>>0<2147483647):0)if((qa($|0)|0)==(-1|0)){qa(X|0)|0;fa=ka;break f}else{ma=$+ja|0;break}else ma=ja;while(0);if((ia|0)==(-1|0))fa=ka;else{ga=ia;ha=ma;K=194;break d}}while(0);c[127675]=c[127675]|4;na=fa;K=191}else{na=0;K=191}while(0);if((((K|0)==191?S>>>0<2147483647:0)?(fa=qa(S|0)|0,S=qa(0)|0,fa>>>0>>0&((fa|0)!=(-1|0)&(S|0)!=(-1|0))):0)?(ma=S-fa|0,S=ma>>>0>(F+40|0)>>>0,S):0){ga=fa;ha=S?ma:na;K=194}if((K|0)==194){na=(c[127672]|0)+ha|0;c[127672]=na;if(na>>>0>(c[127673]|0)>>>0)c[127673]=na;na=c[127570]|0;g:do if(na){ma=510704;do{S=c[ma>>2]|0;fa=ma+4|0;ia=c[fa>>2]|0;if((ga|0)==(S+ia|0)){oa=S;pa=fa;ra=ia;sa=ma;K=204;break}ma=c[ma+8>>2]|0}while((ma|0)!=0);if(((K|0)==204?(c[sa+12>>2]&8|0)==0:0)?na>>>0>>0&na>>>0>=oa>>>0:0){c[pa>>2]=ra+ha;ma=(c[127567]|0)+ha|0;ia=na+8|0;fa=(ia&7|0)==0?0:0-ia&7;ia=ma-fa|0;c[127570]=na+fa;c[127567]=ia;c[na+(fa+4)>>2]=ia|1;c[na+(ma+4)>>2]=40;c[127571]=c[127686];break}ma=c[127568]|0;if(ga>>>0>>0){c[127568]=ga;ta=ga}else ta=ma;ma=ga+ha|0;ia=510704;while(1){if((c[ia>>2]|0)==(ma|0)){va=ia;wa=ia;K=212;break}ia=c[ia+8>>2]|0;if(!ia){xa=510704;break}}if((K|0)==212)if(!(c[wa+12>>2]&8)){c[va>>2]=ga;ia=wa+4|0;c[ia>>2]=(c[ia>>2]|0)+ha;ia=ga+8|0;ma=(ia&7|0)==0?0:0-ia&7;ia=ga+(ha+8)|0;fa=(ia&7|0)==0?0:0-ia&7;ia=ga+(fa+ha)|0;S=ma+F|0;ka=ga+S|0;ja=ia-(ga+ma)-F|0;c[ga+(ma+4)>>2]=F|3;h:do if((ia|0)!=(na|0)){if((ia|0)==(c[127569]|0)){T=(c[127566]|0)+ja|0;c[127566]=T;c[127569]=ka;c[ga+(S+4)>>2]=T|1;c[ga+(T+S)>>2]=T;break}T=ha+4|0;ca=c[ga+(T+fa)>>2]|0;if((ca&3|0)==1){la=ca&-8;ea=ca>>>3;i:do if(ca>>>0>=256){da=c[ga+((fa|24)+ha)>>2]|0;aa=c[ga+(ha+12+fa)>>2]|0;do if((aa|0)==(ia|0)){ba=fa|16;X=ga+(T+ba)|0;$=c[X>>2]|0;if(!$){Z=ga+(ba+ha)|0;ba=c[Z>>2]|0;if(!ba){ya=0;break}else{za=ba;Aa=Z}}else{za=$;Aa=X}while(1){X=za+20|0;$=c[X>>2]|0;if($){za=$;Aa=X;continue}X=za+16|0;$=c[X>>2]|0;if(!$){Ca=za;Ea=Aa;break}else{za=$;Aa=X}}if(Ea>>>0>>0)Ba();else{c[Ea>>2]=0;ya=Ca;break}}else{X=c[ga+((fa|8)+ha)>>2]|0;if(X>>>0>>0)Ba();$=X+12|0;if((c[$>>2]|0)!=(ia|0))Ba();Z=aa+8|0;if((c[Z>>2]|0)==(ia|0)){c[$>>2]=aa;c[Z>>2]=X;ya=aa;break}else Ba()}while(0);if(!da)break;aa=c[ga+(ha+28+fa)>>2]|0;X=510560+(aa<<2)|0;do if((ia|0)!=(c[X>>2]|0)){if(da>>>0<(c[127568]|0)>>>0)Ba();Z=da+16|0;if((c[Z>>2]|0)==(ia|0))c[Z>>2]=ya;else c[da+20>>2]=ya;if(!ya)break i}else{c[X>>2]=ya;if(ya)break;c[127565]=c[127565]&~(1<>>0>>0)Ba();c[ya+24>>2]=da;X=fa|16;Z=c[ga+(X+ha)>>2]|0;do if(Z)if(Z>>>0>>0)Ba();else{c[ya+16>>2]=Z;c[Z+24>>2]=ya;break}while(0);Z=c[ga+(T+X)>>2]|0;if(!Z)break;if(Z>>>0<(c[127568]|0)>>>0)Ba();else{c[ya+20>>2]=Z;c[Z+24>>2]=ya;break}}else{Z=c[ga+((fa|8)+ha)>>2]|0;aa=c[ga+(ha+12+fa)>>2]|0;da=510296+(ea<<1<<2)|0;do if((Z|0)!=(da|0)){if(Z>>>0>>0)Ba();if((c[Z+12>>2]|0)==(ia|0))break;Ba()}while(0);if((aa|0)==(Z|0)){c[127564]=c[127564]&~(1<>>0>>0)Ba();X=aa+8|0;if((c[X>>2]|0)==(ia|0)){Fa=X;break}Ba()}while(0);c[Z+12>>2]=aa;c[Fa>>2]=Z}while(0);Ga=ga+((la|fa)+ha)|0;Ha=la+ja|0}else{Ga=ia;Ha=ja}ea=Ga+4|0;c[ea>>2]=c[ea>>2]&-2;c[ga+(S+4)>>2]=Ha|1;c[ga+(Ha+S)>>2]=Ha;ea=Ha>>>3;if(Ha>>>0<256){T=ea<<1;ca=510296+(T<<2)|0;da=c[127564]|0;X=1<>2]|0;if($>>>0>=(c[127568]|0)>>>0){Ia=ea;Ja=$;break}Ba()}while(0);c[Ia>>2]=ka;c[Ja+12>>2]=ka;c[ga+(S+8)>>2]=Ja;c[ga+(S+12)>>2]=ca;break}T=Ha>>>8;do if(!T)Ka=0;else{if(Ha>>>0>16777215){Ka=31;break}X=(T+1048320|0)>>>16&8;da=T<>>16&4;$=da<>>16&2;ea=14-(la|X|da)+($<>>15)|0;Ka=Ha>>>(ea+7|0)&1|ea<<1}while(0);T=510560+(Ka<<2)|0;c[ga+(S+28)>>2]=Ka;c[ga+(S+20)>>2]=0;c[ga+(S+16)>>2]=0;ca=c[127565]|0;ea=1<>2]=ka;c[ga+(S+24)>>2]=T;c[ga+(S+12)>>2]=ka;c[ga+(S+8)>>2]=ka;break}ea=c[T>>2]|0;j:do if((c[ea+4>>2]&-8|0)!=(Ha|0)){T=Ha<<((Ka|0)==31?0:25-(Ka>>>1)|0);ca=ea;while(1){da=ca+16+(T>>>31<<2)|0;$=c[da>>2]|0;if(!$){La=da;Ma=ca;break}if((c[$+4>>2]&-8|0)==(Ha|0)){Na=$;break j}else{T=T<<1;ca=$}}if(La>>>0<(c[127568]|0)>>>0)Ba();else{c[La>>2]=ka;c[ga+(S+24)>>2]=Ma;c[ga+(S+12)>>2]=ka;c[ga+(S+8)>>2]=ka;break h}}else Na=ea;while(0);ea=Na+8|0;ca=c[ea>>2]|0;T=c[127568]|0;if(ca>>>0>=T>>>0&Na>>>0>=T>>>0){c[ca+12>>2]=ka;c[ea>>2]=ka;c[ga+(S+8)>>2]=ca;c[ga+(S+12)>>2]=Na;c[ga+(S+24)>>2]=0;break}else Ba()}else{ca=(c[127567]|0)+ja|0;c[127567]=ca;c[127570]=ka;c[ga+(S+4)>>2]=ca|1}while(0);n=ga+(ma|8)|0;return n|0}else xa=510704;while(1){S=c[xa>>2]|0;if(S>>>0<=na>>>0?(ka=c[xa+4>>2]|0,ja=S+ka|0,ja>>>0>na>>>0):0){Oa=S;Pa=ka;Qa=ja;break}xa=c[xa+8>>2]|0}ma=Oa+(Pa+-39)|0;ja=Oa+(Pa+-47+((ma&7|0)==0?0:0-ma&7))|0;ma=na+16|0;ka=ja>>>0>>0?na:ja;ja=ka+8|0;S=ga+8|0;ia=(S&7|0)==0?0:0-S&7;S=ha+-40-ia|0;c[127570]=ga+ia;c[127567]=S;c[ga+(ia+4)>>2]=S|1;c[ga+(ha+-36)>>2]=40;c[127571]=c[127686];S=ka+4|0;c[S>>2]=27;c[ja>>2]=c[127676];c[ja+4>>2]=c[127677];c[ja+8>>2]=c[127678];c[ja+12>>2]=c[127679];c[127676]=ga;c[127677]=ha;c[127679]=0;c[127678]=ja;ja=ka+28|0;c[ja>>2]=7;if((ka+32|0)>>>0>>0){ia=ja;do{ja=ia;ia=ia+4|0;c[ia>>2]=7}while((ja+8|0)>>>0>>0)}if((ka|0)!=(na|0)){ia=ka-na|0;c[S>>2]=c[S>>2]&-2;c[na+4>>2]=ia|1;c[ka>>2]=ia;ja=ia>>>3;if(ia>>>0<256){fa=ja<<1;ca=510296+(fa<<2)|0;ea=c[127564]|0;T=1<>2]|0;if(Z>>>0<(c[127568]|0)>>>0)Ba();else{Ra=ja;Sa=Z}}else{c[127564]=ea|T;Ra=510296+(fa+2<<2)|0;Sa=ca}c[Ra>>2]=na;c[Sa+12>>2]=na;c[na+8>>2]=Sa;c[na+12>>2]=ca;break}ca=ia>>>8;if(ca)if(ia>>>0>16777215)Ta=31;else{fa=(ca+1048320|0)>>>16&8;T=ca<>>16&4;ea=T<>>16&2;Z=14-(ca|fa|T)+(ea<>>15)|0;Ta=ia>>>(Z+7|0)&1|Z<<1}else Ta=0;Z=510560+(Ta<<2)|0;c[na+28>>2]=Ta;c[na+20>>2]=0;c[ma>>2]=0;T=c[127565]|0;ea=1<>2]=na;c[na+24>>2]=Z;c[na+12>>2]=na;c[na+8>>2]=na;break}ea=c[Z>>2]|0;k:do if((c[ea+4>>2]&-8|0)!=(ia|0)){Z=ia<<((Ta|0)==31?0:25-(Ta>>>1)|0);T=ea;while(1){fa=T+16+(Z>>>31<<2)|0;ca=c[fa>>2]|0;if(!ca){Ua=fa;Va=T;break}if((c[ca+4>>2]&-8|0)==(ia|0)){Wa=ca;break k}else{Z=Z<<1;T=ca}}if(Ua>>>0<(c[127568]|0)>>>0)Ba();else{c[Ua>>2]=na;c[na+24>>2]=Va;c[na+12>>2]=na;c[na+8>>2]=na;break g}}else Wa=ea;while(0);ea=Wa+8|0;ia=c[ea>>2]|0;ma=c[127568]|0;if(ia>>>0>=ma>>>0&Wa>>>0>=ma>>>0){c[ia+12>>2]=na;c[ea>>2]=na;c[na+8>>2]=ia;c[na+12>>2]=Wa;c[na+24>>2]=0;break}else Ba()}}else{ia=c[127568]|0;if((ia|0)==0|ga>>>0>>0)c[127568]=ga;c[127676]=ga;c[127677]=ha;c[127679]=0;c[127573]=c[127682];c[127572]=-1;ia=0;do{ea=ia<<1;ma=510296+(ea<<2)|0;c[510296+(ea+3<<2)>>2]=ma;c[510296+(ea+2<<2)>>2]=ma;ia=ia+1|0}while((ia|0)!=32);ia=ga+8|0;ma=(ia&7|0)==0?0:0-ia&7;ia=ha+-40-ma|0;c[127570]=ga+ma;c[127567]=ia;c[ga+(ma+4)>>2]=ia|1;c[ga+(ha+-36)>>2]=40;c[127571]=c[127686]}while(0);ha=c[127567]|0;if(ha>>>0>F>>>0){ga=ha-F|0;c[127567]=ga;ha=c[127570]|0;c[127570]=ha+F;c[ha+(F+4)>>2]=ga|1;c[ha+4>>2]=F|3;n=ha+8|0;return n|0}}c[(wc()|0)>>2]=12;n=0;return n|0}function Ic(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;if(!a)return;b=a+-8|0;d=c[127568]|0;if(b>>>0>>0)Ba();e=c[a+-4>>2]|0;f=e&3;if((f|0)==1)Ba();g=e&-8;h=a+(g+-8)|0;do if(!(e&1)){i=c[b>>2]|0;if(!f)return;j=-8-i|0;k=a+j|0;l=i+g|0;if(k>>>0>>0)Ba();if((k|0)==(c[127569]|0)){m=a+(g+-4)|0;n=c[m>>2]|0;if((n&3|0)!=3){o=k;p=l;break}c[127566]=l;c[m>>2]=n&-2;c[a+(j+4)>>2]=l|1;c[h>>2]=l;return}n=i>>>3;if(i>>>0<256){i=c[a+(j+8)>>2]|0;m=c[a+(j+12)>>2]|0;q=510296+(n<<1<<2)|0;if((i|0)!=(q|0)){if(i>>>0>>0)Ba();if((c[i+12>>2]|0)!=(k|0))Ba()}if((m|0)==(i|0)){c[127564]=c[127564]&~(1<>>0>>0)Ba();q=m+8|0;if((c[q>>2]|0)==(k|0))r=q;else Ba()}else r=m+8|0;c[i+12>>2]=m;c[r>>2]=i;o=k;p=l;break}i=c[a+(j+24)>>2]|0;m=c[a+(j+12)>>2]|0;do if((m|0)==(k|0)){q=a+(j+20)|0;n=c[q>>2]|0;if(!n){s=a+(j+16)|0;t=c[s>>2]|0;if(!t){u=0;break}else{v=t;w=s}}else{v=n;w=q}while(1){q=v+20|0;n=c[q>>2]|0;if(n){v=n;w=q;continue}q=v+16|0;n=c[q>>2]|0;if(!n){x=v;y=w;break}else{v=n;w=q}}if(y>>>0>>0)Ba();else{c[y>>2]=0;u=x;break}}else{q=c[a+(j+8)>>2]|0;if(q>>>0>>0)Ba();n=q+12|0;if((c[n>>2]|0)!=(k|0))Ba();s=m+8|0;if((c[s>>2]|0)==(k|0)){c[n>>2]=m;c[s>>2]=q;u=m;break}else Ba()}while(0);if(i){m=c[a+(j+28)>>2]|0;q=510560+(m<<2)|0;if((k|0)==(c[q>>2]|0)){c[q>>2]=u;if(!u){c[127565]=c[127565]&~(1<>>0<(c[127568]|0)>>>0)Ba();m=i+16|0;if((c[m>>2]|0)==(k|0))c[m>>2]=u;else c[i+20>>2]=u;if(!u){o=k;p=l;break}}m=c[127568]|0;if(u>>>0>>0)Ba();c[u+24>>2]=i;q=c[a+(j+16)>>2]|0;do if(q)if(q>>>0>>0)Ba();else{c[u+16>>2]=q;c[q+24>>2]=u;break}while(0);q=c[a+(j+20)>>2]|0;if(q)if(q>>>0<(c[127568]|0)>>>0)Ba();else{c[u+20>>2]=q;c[q+24>>2]=u;o=k;p=l;break}else{o=k;p=l}}else{o=k;p=l}}else{o=b;p=g}while(0);if(o>>>0>=h>>>0)Ba();b=a+(g+-4)|0;u=c[b>>2]|0;if(!(u&1))Ba();if(!(u&2)){if((h|0)==(c[127570]|0)){d=(c[127567]|0)+p|0;c[127567]=d;c[127570]=o;c[o+4>>2]=d|1;if((o|0)!=(c[127569]|0))return;c[127569]=0;c[127566]=0;return}if((h|0)==(c[127569]|0)){d=(c[127566]|0)+p|0;c[127566]=d;c[127569]=o;c[o+4>>2]=d|1;c[o+d>>2]=d;return}d=(u&-8)+p|0;x=u>>>3;do if(u>>>0>=256){y=c[a+(g+16)>>2]|0;w=c[a+(g|4)>>2]|0;do if((w|0)==(h|0)){v=a+(g+12)|0;r=c[v>>2]|0;if(!r){f=a+(g+8)|0;e=c[f>>2]|0;if(!e){z=0;break}else{A=e;B=f}}else{A=r;B=v}while(1){v=A+20|0;r=c[v>>2]|0;if(r){A=r;B=v;continue}v=A+16|0;r=c[v>>2]|0;if(!r){C=A;D=B;break}else{A=r;B=v}}if(D>>>0<(c[127568]|0)>>>0)Ba();else{c[D>>2]=0;z=C;break}}else{v=c[a+g>>2]|0;if(v>>>0<(c[127568]|0)>>>0)Ba();r=v+12|0;if((c[r>>2]|0)!=(h|0))Ba();f=w+8|0;if((c[f>>2]|0)==(h|0)){c[r>>2]=w;c[f>>2]=v;z=w;break}else Ba()}while(0);if(y){w=c[a+(g+20)>>2]|0;l=510560+(w<<2)|0;if((h|0)==(c[l>>2]|0)){c[l>>2]=z;if(!z){c[127565]=c[127565]&~(1<>>0<(c[127568]|0)>>>0)Ba();w=y+16|0;if((c[w>>2]|0)==(h|0))c[w>>2]=z;else c[y+20>>2]=z;if(!z)break}w=c[127568]|0;if(z>>>0>>0)Ba();c[z+24>>2]=y;l=c[a+(g+8)>>2]|0;do if(l)if(l>>>0>>0)Ba();else{c[z+16>>2]=l;c[l+24>>2]=z;break}while(0);l=c[a+(g+12)>>2]|0;if(l)if(l>>>0<(c[127568]|0)>>>0)Ba();else{c[z+20>>2]=l;c[l+24>>2]=z;break}}}else{l=c[a+g>>2]|0;w=c[a+(g|4)>>2]|0;y=510296+(x<<1<<2)|0;if((l|0)!=(y|0)){if(l>>>0<(c[127568]|0)>>>0)Ba();if((c[l+12>>2]|0)!=(h|0))Ba()}if((w|0)==(l|0)){c[127564]=c[127564]&~(1<>>0<(c[127568]|0)>>>0)Ba();y=w+8|0;if((c[y>>2]|0)==(h|0))E=y;else Ba()}else E=w+8|0;c[l+12>>2]=w;c[E>>2]=l}while(0);c[o+4>>2]=d|1;c[o+d>>2]=d;if((o|0)==(c[127569]|0)){c[127566]=d;return}else F=d}else{c[b>>2]=u&-2;c[o+4>>2]=p|1;c[o+p>>2]=p;F=p}p=F>>>3;if(F>>>0<256){u=p<<1;b=510296+(u<<2)|0;d=c[127564]|0;E=1<>2]|0;if(h>>>0<(c[127568]|0)>>>0)Ba();else{G=p;H=h}}else{c[127564]=d|E;G=510296+(u+2<<2)|0;H=b}c[G>>2]=o;c[H+12>>2]=o;c[o+8>>2]=H;c[o+12>>2]=b;return}b=F>>>8;if(b)if(F>>>0>16777215)I=31;else{H=(b+1048320|0)>>>16&8;G=b<>>16&4;u=G<>>16&2;E=14-(b|H|G)+(u<>>15)|0;I=F>>>(E+7|0)&1|E<<1}else I=0;E=510560+(I<<2)|0;c[o+28>>2]=I;c[o+20>>2]=0;c[o+16>>2]=0;G=c[127565]|0;u=1<>2]|0;b:do if((c[H+4>>2]&-8|0)!=(F|0)){b=F<<((I|0)==31?0:25-(I>>>1)|0);d=H;while(1){h=d+16+(b>>>31<<2)|0;p=c[h>>2]|0;if(!p){J=h;K=d;break}if((c[p+4>>2]&-8|0)==(F|0)){L=p;break b}else{b=b<<1;d=p}}if(J>>>0<(c[127568]|0)>>>0)Ba();else{c[J>>2]=o;c[o+24>>2]=K;c[o+12>>2]=o;c[o+8>>2]=o;break a}}else L=H;while(0);H=L+8|0;d=c[H>>2]|0;b=c[127568]|0;if(d>>>0>=b>>>0&L>>>0>=b>>>0){c[d+12>>2]=o;c[H>>2]=o;c[o+8>>2]=d;c[o+12>>2]=L;c[o+24>>2]=0;break}else Ba()}else{c[127565]=G|u;c[E>>2]=o;c[o+24>>2]=E;c[o+12>>2]=o;c[o+8>>2]=o}while(0);o=(c[127572]|0)+-1|0;c[127572]=o;if(!o)M=510712;else return;while(1){o=c[M>>2]|0;if(!o)break;else M=o+8|0}c[127572]=-1;return}function Jc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=b;b=c;a:while(1){c=b;f=b+-1|0;g=e;b:while(1){h=g;i=c-h|0;switch(i|0){case 1:case 0:{break a;break}case 2:{j=g;k=f;l=4;break a;break}case 3:{m=g;n=f;l=6;break a;break}case 4:{o=g;p=f;l=7;break a;break}case 5:{q=g;r=f;l=8;break a;break}default:{}}if((i|0)<31){s=g;t=b;l=10;break a}u=(i|0)/2|0;v=g+u|0;if((i|0)>999){w=(i|0)/4|0;x=Nc(g,g+w|0,v,g+(w+u)|0,f,d)|0}else x=Lc(g,v,f,d)|0;u=a[g>>0]|0;w=a[v>>0]|0;do if((u&255)<(w&255)){y=f;z=x}else{i=f;while(1){A=i+-1|0;if((g|0)==(A|0))break;B=a[A>>0]|0;if((B&255)<(w&255)){C=B;D=A;l=29;break}else i=A}if((l|0)==29){l=0;a[g>>0]=C;a[D>>0]=u;y=D;z=x+1|0;break}i=g+1|0;A=a[f>>0]|0;if((u&255)<(A&255))E=i;else{if((i|0)==(f|0))break a;else{F=g;G=i}while(1){i=a[G>>0]|0;if((u&255)<(i&255)){H=F;I=i;J=G;break}i=G+1|0;if((i|0)==(f|0))break a;else{B=G;G=i;F=B}}a[J>>0]=A;a[f>>0]=I;E=H+2|0}if((E|0)==(f|0))break a;else{K=E;L=f}while(1){B=a[g>>0]|0;i=K;while(1){M=a[i>>0]|0;N=i+1|0;if((B&255)<(M&255)){O=M;P=N;Q=i;break}else i=N}i=L;while(1){N=i+-1|0;M=a[N>>0]|0;if((B&255)<(M&255))i=N;else{R=N;S=M;break}}if(Q>>>0>=R>>>0){g=Q;continue b}a[Q>>0]=S;a[R>>0]=O;K=P;L=R}}while(0);u=g+1|0;c:do if(u>>>0>>0){w=u;A=y;i=v;B=z;while(1){M=a[i>>0]|0;N=w;while(1){T=a[N>>0]|0;U=N+1|0;if((T&255)<(M&255))N=U;else{V=T;W=U;X=N;break}}N=A;while(1){U=N+-1|0;T=a[U>>0]|0;if((T&255)<(M&255)){Y=U;Z=T;break}else N=U}if(X>>>0>Y>>>0){_=X;$=i;aa=B;break c}a[X>>0]=Z;a[Y>>0]=V;w=W;A=Y;i=(i|0)==(X|0)?Y:i;B=B+1|0}}else{_=u;$=v;aa=z}while(0);if((_|0)!=($|0)?(v=a[$>>0]|0,u=a[_>>0]|0,(v&255)<(u&255)):0){a[_>>0]=v;a[$>>0]=u;ba=aa+1|0}else ba=aa;if(!ba){ca=Kc(g,_,d)|0;u=_+1|0;if(Kc(u,b,d)|0){l=42;break}if(ca){g=u;continue}}u=_;if((u-h|0)>=(c-u|0)){da=g;ea=_;l=46;break}Jc(g,_,d);g=_+1|0}if((l|0)==42){l=0;if(ca)break;else{e=g;b=_;continue}}else if((l|0)==46){l=0;Jc(ea+1|0,b,d);e=da;b=ea;continue}}if((l|0)==4){ea=a[k>>0]|0;b=a[j>>0]|0;if((ea&255)<(b&255)){a[j>>0]=ea;a[k>>0]=b}}else if((l|0)==6)Lc(m,m+1|0,n,d)|0;else if((l|0)==7)Mc(o,o+1|0,o+2|0,p,d)|0;else if((l|0)==8)Nc(q,q+1|0,q+2|0,q+3|0,r,d)|0;else if((l|0)==10)Oc(s,t,d);return}function Kc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do switch(c-b|0){case 1:case 0:{e=1;break}case 2:{f=c+-1|0;g=a[f>>0]|0;h=a[b>>0]|0;if((g&255)<(h&255)){a[b>>0]=g;a[f>>0]=h;e=1}else e=1;break}case 3:{Lc(b,b+1|0,c+-1|0,d)|0;e=1;break}case 4:{Mc(b,b+1|0,b+2|0,c+-1|0,d)|0;e=1;break}case 5:{Nc(b,b+1|0,b+2|0,b+3|0,c+-1|0,d)|0;e=1;break}default:{h=b+2|0;Lc(b,b+1|0,h,d)|0;f=b+3|0;if((f|0)==(c|0))e=1;else{g=0;i=f;f=h;while(1){h=a[i>>0]|0;j=a[f>>0]|0;if((h&255)<(j&255)){k=j;j=i;l=f;while(1){a[j>>0]=k;if((l|0)==(b|0)){m=b;break}n=l+-1|0;k=a[n>>0]|0;if((h&255)>=(k&255)){m=l;break}else{o=l;l=n;j=o}}a[m>>0]=h;j=g+1|0;if((j|0)==8){p=i;break}else q=j}else q=g;j=i+1|0;if((j|0)==(c|0)){e=1;break a}else{l=i;g=q;i=j;f=l}}e=(p+1|0)==(c|0)}}}while(0);return e|0}function Lc(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;e=a[c>>0]|0;f=a[b>>0]|0;g=a[d>>0]|0;h=(g&255)<(e&255);do if((e&255)<(f&255)){if(h){a[b>>0]=g;a[d>>0]=f;i=1;break}a[b>>0]=e;a[c>>0]=f;j=a[d>>0]|0;if((j&255)<(f&255)){a[c>>0]=j;a[d>>0]=f;i=2}else i=1}else if(h){a[c>>0]=g;a[d>>0]=e;j=a[c>>0]|0;k=a[b>>0]|0;if((j&255)<(k&255)){a[b>>0]=j;a[c>>0]=k;i=2}else i=1}else i=0;while(0);return i|0}function Mc(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Lc(b,c,d,f)|0;f=a[e>>0]|0;h=a[d>>0]|0;if((f&255)<(h&255)){a[d>>0]=f;a[e>>0]=h;h=g+1|0;e=a[d>>0]|0;f=a[c>>0]|0;if((e&255)<(f&255)){a[c>>0]=e;a[d>>0]=f;f=a[c>>0]|0;d=a[b>>0]|0;if((f&255)<(d&255)){a[b>>0]=f;a[c>>0]=d;i=g+3|0}else i=g+2|0}else i=h}else i=g;return i|0}function Nc(b,c,d,e,f,g){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=Mc(b,c,d,e,g)|0;g=a[f>>0]|0;i=a[e>>0]|0;if((g&255)<(i&255)){a[e>>0]=g;a[f>>0]=i;i=h+1|0;f=a[e>>0]|0;g=a[d>>0]|0;if((f&255)<(g&255)){a[d>>0]=f;a[e>>0]=g;g=h+2|0;e=a[d>>0]|0;f=a[c>>0]|0;if((e&255)<(f&255)){a[c>>0]=e;a[d>>0]=f;f=a[c>>0]|0;d=a[b>>0]|0;if((f&255)<(d&255)){a[b>>0]=f;a[c>>0]=d;j=h+4|0}else j=h+3|0}else j=g}else j=i}else j=h;return j|0}function Oc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=b+2|0;Lc(b,b+1|0,e,d)|0;d=b+3|0;if((d|0)!=(c|0)){f=d;d=e;while(1){e=a[f>>0]|0;g=a[d>>0]|0;if((e&255)<(g&255)){h=g;g=f;i=d;while(1){a[g>>0]=h;if((i|0)==(b|0)){j=b;break}k=i+-1|0;h=a[k>>0]|0;if((e&255)>=(h&255)){j=i;break}else{l=i;i=k;g=l}}a[j>>0]=e}g=f+1|0;if((g|0)==(c|0))break;else{i=f;f=g;d=i}}}return}function Pc(){}function Qc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;g=b&3;h=d|d<<8|d<<16|d<<24;i=f&~3;if(g){g=b+4-g|0;while((b|0)<(g|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(i|0)){c[b>>2]=h;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function Rc(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){B=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Sc(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){B=b<>>32-c;return a<=4096)return ra(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function Uc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ha[a&7](b|0,c|0,d|0)|0}function Vc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ia[a&3](b|0,c|0,d|0,e|0,f|0)}function Wc(a,b){a=a|0;b=b|0;Ja[a&15](b|0)}function Xc(a,b){a=a|0;b=b|0;return Ka[a&3](b|0)|0}function Yc(a){a=a|0;La[a&0]()}function Zc(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Ma[a&3](b|0,c|0,d|0,e|0,f|0,g|0)}function _c(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Na[a&3](b|0,c|0,d|0,e|0)}function $c(a,b,c){a=a|0;b=b|0;c=c|0;aa(0);return 0}function ad(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;aa(1)}function bd(a){a=a|0;aa(2)}function cd(a){a=a|0;aa(3);return 0}function dd(){aa(4)}function ed(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;aa(5)}function fd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;aa(6)} -function Oa(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function Pa(){return i|0}function Qa(a){a=a|0;i=a}function Ra(a,b){a=a|0;b=b|0;i=a;j=b}function Sa(a,b){a=a|0;b=b|0;if(!m){m=a;n=b}}function Ta(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function Ua(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function Va(a){a=a|0;B=a}function Wa(){return B|0}function Xa(){return c[123158]|0}function Ya(a){a=a|0;c[123158]=a;return}function Za(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=b+4|0;g=c[f>>2]|0;h=c[b>>2]|0;i=g-h>>4;if(i>>>0>=d>>>0){if(i>>>0>d>>>0?(j=h+(d<<4)|0,(g|0)!=(j|0)):0)c[f>>2]=g+(~((0-j+(g+-16)|0)>>>4)<<4)}else Hb(b,d-i|0);if(!d)return;else k=0;do{i=c[b>>2]|0;g=c[e+(k<<2)>>2]|0;a[i+(k<<4)>>0]=g&3;a[i+(k<<4)+1>>0]=g>>>2&3;a[i+(k<<4)+2>>0]=g>>>4&3;a[i+(k<<4)+3>>0]=g>>>6&3;a[i+(k<<4)+4>>0]=g>>>8&3;a[i+(k<<4)+5>>0]=g>>>10&3;a[i+(k<<4)+6>>0]=g>>>12&3;a[i+(k<<4)+7>>0]=g>>>14&3;a[i+(k<<4)+8>>0]=g>>>16&3;a[i+(k<<4)+9>>0]=g>>>18&3;a[i+(k<<4)+10>>0]=g>>>20&3;a[i+(k<<4)+11>>0]=g>>>22&3;a[i+(k<<4)+12>>0]=g>>>24&3;a[i+(k<<4)+13>>0]=g>>>26&3;a[i+(k<<4)+14>>0]=g>>>28&3;a[i+(k<<4)+15>>0]=g>>>30;k=k+1|0}while((k|0)!=(d|0));return}function _a(){var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;f=i;i=i+112|0;g=f+72|0;h=f+8|0;j=f+4|0;k=f;if(!(a[888102]|0))l=0;else{i=f;return}do{m=0;do{n=((m<<5)+l|0)*60|0;o=0;do{p=(o*10|0)+n|0;q=b[510752+(p<<2)+2>>1]|0;r=b[510752+((p|1)<<2)+2>>1]|0;s=(r&65535)<(q&65535);t=s?r:q;q=b[510752+(p+2<<2)+2>>1]|0;r=(q&65535)<(t&65535);u=r?q:t;t=b[510752+(p+3<<2)+2>>1]|0;q=(t&65535)<(u&65535);v=q?t:u;u=b[510752+(p+4<<2)+2>>1]|0;t=(u&65535)<(v&65535);w=t?u:v;v=b[510752+(p+5<<2)+2>>1]|0;u=(v&65535)<(w&65535);x=u?v:w;w=b[510752+(p+6<<2)+2>>1]|0;v=(w&65535)<(x&65535);y=v?w:x;x=b[510752+(p+7<<2)+2>>1]|0;w=(x&65535)<(y&65535);z=w?x:y;y=b[510752+(p+8<<2)+2>>1]|0;x=(y&65535)<(z&65535);a[896172+(l*48|0)+(m*6|0)+o>>0]=(e[510752+(p+9<<2)+2>>1]|0)<((x?y:z)&65535)?9:x?8:w?7:v?6:u?5:t?4:q?3:r?2:s&1;o=o+1|0}while((o|0)!=6);m=m+1|0}while((m|0)!=8);l=l+1|0}while((l|0)!=32);c[127323]=0;c[127327]=1;c[127322]=2;c[127326]=3;c[127331]=4;c[127321]=5;l=0;do{m=(l&1|0)!=0?511:0;o=l>>>1;c[509344+(l<<2)>>2]=((o<<6|o)^m)>>>2|m&128;l=l+1|0}while((l|0)!=16);A=0;do{l=(A&1|0)!=0?511:0;m=A>>>1;c[509344+((A|16)<<2)>>2]=((m<<6|m)+22^l)>>>2|l&128;A=A+1|0}while((A|0)!=16);B=0;do{A=(B&1|0)!=0?511:0;l=B>>>1;c[509344+((B|32)<<2)>>2]=((l<<6|l)+44^A)>>>2|A&128;B=B+1|0}while((B|0)!=16);C=0;do{B=897708+(C<<1)+1|0;A=897708+(C<<1)|0;l=0;m=2147483647;while(1){o=c[509344+(l<<2)>>2]|0;n=((o<<8|o)*43|0)+32|0;o=l&255;s=0;r=m;while(1){q=c[509344+(s<<2)>>2]|0;t=(((n+((q<<8|q)*21|0)|0)/64|0)>>8)-C|0;q=(t|0)>-1?t:0-t|0;if((q|0)<(r|0)){a[B>>0]=s;a[A>>0]=o;D=q}else D=r;s=s+1|0;if((s|0)==48){E=D;break}else r=D}r=l+1|0;if((r|0)==48)break;else{l=r;m=E}}C=C+1|0}while((C|0)!=256);F=0;do{C=898220+F|0;E=0;D=2147483647;while(1){m=(c[509344+(E<<2)>>2]|0)-F|0;l=(m|0)>-1?m:0-m|0;if((l|0)<(D|0)){a[C>>0]=E;G=l}else G=D;E=E+1|0;if((E|0)==48)break;else D=G}F=F+1|0}while((F|0)!=256);H=0;do{a[g+H>>0]=H<<3|H>>>2;H=H+1|0}while((H|0)!=32);I=0;do{H=888103+(I<<1)|0;F=888103+(I<<1)+1|0;G=0;D=256;while(1){E=G&255;C=d[g+G>>0]|0;l=0;m=D;while(1){A=d[g+l>>0]|0;B=((((A<<1)+C|0)>>>0)/3|0)-I|0;r=A-C|0;A=(((r|0)>-1?r:0-r|0)>>5)+((B|0)>-1?B:0-B|0)|0;if((A|0)<(m|0)){a[H>>0]=l;a[F>>0]=E;J=A}else J=m;l=l+1|0;if((l|0)==32){K=J;break}else m=J}m=G+1|0;if((m|0)==32)break;else{G=m;D=K}}I=I+1|0}while((I|0)!=256);L=0;do{I=888615+(L<<1)|0;K=888615+(L<<1)+1|0;J=0;D=256;while(1){G=(d[g+J>>0]|0)-L|0;F=(G|0)>-1?G:0-G|0;if((F|0)<(D|0)){a[I>>0]=J;a[K>>0]=0;M=F}else M=D;J=J+1|0;if((J|0)==32)break;else D=M}L=L+1|0}while((L|0)!=256);L=0;do{a[h+L>>0]=L<<2|L>>>4;L=L+1|0}while((L|0)!=64);N=0;do{L=889127+(N<<1)|0;M=889127+(N<<1)+1|0;g=0;D=256;while(1){J=g&255;K=d[h+g>>0]|0;I=0;F=D;while(1){G=d[h+I>>0]|0;H=((((G<<1)+K|0)>>>0)/3|0)-N|0;m=G-K|0;G=(((m|0)>-1?m:0-m|0)>>5)+((H|0)>-1?H:0-H|0)|0;if((G|0)<(F|0)){a[L>>0]=I;a[M>>0]=J;O=G}else O=F;I=I+1|0;if((I|0)==64){P=O;break}else F=O}F=g+1|0;if((F|0)==64)break;else{g=F;D=P}}N=N+1|0}while((N|0)!=256);Q=0;do{N=889639+(Q<<1)|0;P=889639+(Q<<1)+1|0;O=0;D=256;while(1){g=(d[h+O>>0]|0)-Q|0;M=(g|0)>-1?g:0-g|0;if((M|0)<(D|0)){a[N>>0]=O;a[P>>0]=0;R=M}else R=D;O=O+1|0;if((O|0)==64)break;else D=R}Q=Q+1|0}while((Q|0)!=256);c[127259]=0;c[127263]=1;c[127258]=2;c[127262]=3;c[127267]=4;c[127257]=5;Q=j+1|0;R=k+1|0;h=j+2|0;D=k+2|0;O=j+3|0;P=k+3|0;N=0;do{M=a[890151+(d[908511+(N<<2)>>0]|0)>>0]|0;a[j>>0]=M;a[k>>0]=a[890155+(M&255)>>0]|0;M=a[890151+(d[908511+(N<<2)+1>>0]|0)>>0]|0;a[Q>>0]=M;a[R>>0]=a[890155+(M&255)>>0]|0;M=a[890151+(d[908511+(N<<2)+2>>0]|0)>>0]|0;a[h>>0]=M;a[D>>0]=a[890155+(M&255)>>0]|0;M=a[890151+(d[908511+(N<<2)+3>>0]|0)>>0]|0;a[O>>0]=M;a[P>>0]=a[890155+(M&255)>>0]|0;M=0;do{g=M&3;L=M>>>2&3;F=M>>>4&3;I=M>>>6&3;J=d[k+I>>0]<<6|(d[k+F>>0]<<4|(d[k+L>>0]<<2|d[k+g>>0]));a[890159+(N<<8)+M>>0]=d[j+I>>0]<<6|(d[j+F>>0]<<4|(d[j+L>>0]<<2|d[j+g>>0]));a[892719+(N<<8)+M>>0]=J;M=M+1|0}while((M|0)!=256);N=N+1|0}while((N|0)!=10);c[127272]=0;c[127277]=1;c[127282]=2;c[127287]=3;c[127275]=4;c[127279]=5;c[127274]=6;c[127278]=7;c[127283]=8;c[127273]=9;N=0;do{a[895471+(N<<2)>>0]=15-(d[895279+(N<<2)>>0]|0);a[895471+(N<<2)+1>>0]=15-(d[895279+(N<<2)+1>>0]|0);a[895471+(N<<2)+2>>0]=15-(d[895279+(N<<2)+2>>0]|0);a[895471+(N<<2)+3>>0]=15-(d[895279+(N<<2)+3>>0]|0);N=N+1|0}while((N|0)!=48);c[127291]=0;c[127295]=1;c[127290]=2;c[127294]=3;c[127299]=4;c[127289]=5;c[127307]=0;c[127311]=1;c[127306]=2;c[127310]=3;c[127315]=4;c[127305]=5;N=0;do{j=898476+(N<<1)|0;k=898476+(N<<1)+1|0;P=0;O=256;while(1){D=(P<<3|P>>2)*5|0;h=P&255;R=0;Q=O;while(1){M=((((R<<3|R>>2)*3|0)+D|0)/8|0)-N|0;J=(M|0)>-1?M:0-M|0;if((J|0)<(Q|0)){a[j>>0]=h;a[k>>0]=R;S=J}else S=Q;R=R+1|0;if((R|0)==32){T=S;break}else Q=S}Q=P+1|0;if((Q|0)==32)break;else{P=Q;O=T}}N=N+1|0}while((N|0)!=256);U=0;do{N=898988+(U<<1)|0;T=898988+(U<<1)+1|0;S=0;O=256;while(1){P=(S<<3|S>>2)*5|0;k=S&255;j=0;Q=O;while(1){R=((((j<<2|j>>4)*3|0)+P|0)/8|0)-U|0;h=(R|0)>-1?R:0-R|0;if((h|0)<(Q|0)){a[N>>0]=k;a[T>>0]=j;V=h}else V=Q;j=j+1|0;if((j|0)==64){W=V;break}else Q=V}Q=S+1|0;if((Q|0)==32)break;else{S=Q;O=W}}U=U+1|0}while((U|0)!=256);X=0;do{U=899500+(X<<1)|0;W=899500+(X<<1)+1|0;V=0;O=256;while(1){S=(V<<3|V>>2)-X|0;T=(S|0)>-1?S:0-S|0;if((T|0)<(O|0)){a[U>>0]=0;a[W>>0]=V;Y=T}else Y=O;V=V+1|0;if((V|0)==32)break;else O=Y}X=X+1|0}while((X|0)!=256);Z=0;do{X=900012+(Z<<1)|0;Y=900012+(Z<<1)+1|0;O=0;V=256;while(1){W=(O<<2|O>>4)-Z|0;U=(W|0)>-1?W:0-W|0;if((U|0)<(V|0)){a[X>>0]=0;a[Y>>0]=O;_=U}else _=V;O=O+1|0;if((O|0)==64)break;else V=_}Z=Z+1|0}while((Z|0)!=256);c[127387]=0;c[127391]=1;c[127386]=2;c[127390]=3;c[127395]=4;c[127385]=5;a[888102]=1;i=f;return}function $a(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=b;Qc(a+28|0,0,148)|0;ab(a+176|0);return}function ab(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=0;c[a+28>>2]=0;c[a+32>>2]=0;c[a+36>>2]=0;c[a+40>>2]=0;c[a+44>>2]=0;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;c[a+60>>2]=0;c[a+64>>2]=0;c[a+68>>2]=0;c[a+72>>2]=0;c[a+76>>2]=0;c[a+80>>2]=0;c[a+84>>2]=0;c[a+88>>2]=0;c[a+92>>2]=0;c[a+96>>2]=0;c[a+100>>2]=0;c[a+104>>2]=0;c[a+108>>2]=0;c[a+112>>2]=0;c[a+116>>2]=0;c[a+120>>2]=0;c[a+124>>2]=0;c[a+128>>2]=0;c[a+132>>2]=0;c[a+136>>2]=0;c[a+140>>2]=0;c[a+144>>2]=0;c[a+148>>2]=0;c[a+152>>2]=0;c[a+156>>2]=0;c[a+160>>2]=0;c[a+164>>2]=0;c[a+168>>2]=0;c[a+172>>2]=0;c[a+176>>2]=0;c[a+180>>2]=0;c[a+184>>2]=0;c[a+188>>2]=0;c[a+192>>2]=0;c[a+196>>2]=0;c[a+200>>2]=0;c[a+204>>2]=0;c[a+208>>2]=0;c[a+212>>2]=0;c[a+216>>2]=0;c[a+220>>2]=0;c[a+224>>2]=0;c[a+228>>2]=0;c[a+232>>2]=0;c[a+236>>2]=0;c[a+240>>2]=0;c[a+244>>2]=0;c[a+248>>2]=0;c[a+252>>2]=0;c[a+256>>2]=0;c[a+260>>2]=0;c[a+264>>2]=0;c[a+268>>2]=0;c[a+272>>2]=0;c[a+276>>2]=0;c[a+280>>2]=0;c[a+284>>2]=0;c[a+288>>2]=0;c[a+292>>2]=0;c[a+296>>2]=0;c[a+300>>2]=0;c[a+304>>2]=0;c[a+308>>2]=0;c[a+312>>2]=0;c[a+316>>2]=0;c[a+320>>2]=0;c[a+324>>2]=0;c[a+328>>2]=0;c[a+332>>2]=0;c[a+336>>2]=0;c[a+340>>2]=0;c[a+344>>2]=0;c[a+348>>2]=0;c[a+352>>2]=0;c[a+356>>2]=0;c[a+360>>2]=0;c[a+364>>2]=0;c[a+368>>2]=0;c[a+372>>2]=0;c[a+376>>2]=0;c[a+380>>2]=0;c[a+384>>2]=0;c[a+388>>2]=0;c[a+392>>2]=0;c[a+396>>2]=0;c[a+400>>2]=0;c[a+404>>2]=0;return}function bb(e,f,g,h,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0;m=i;i=i+352|0;n=m+264|0;o=m+224|0;p=m+188|0;q=m+152|0;r=m+116|0;s=m+76|0;t=m+80|0;u=m+40|0;v=m+336|0;w=m+320|0;x=m+4|0;y=m+304|0;z=m+288|0;A=m;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;B=o;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));B=p;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));B=q;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));B=r;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));if((((((((!((g|0)==0&(h|0)!=0)?(c[n>>2]=h,D=n+4|0,c[D>>2]=g,E=n+8|0,c[E>>2]=g,F=n+12|0,c[F>>2]=g+h,h=n+16|0,c[h>>2]=0,g=n+20|0,c[g>>2]=0,cb(n,o)|0):0)?cb(n,p)|0:0)?cb(n,q)|0:0)?cb(n,r)|0:0)?(G=o+4|0,(c[G>>2]|0)!=(c[o>>2]|0)):0)?(H=p+4|0,(c[H>>2]|0)!=(c[p>>2]|0)):0)?(I=q+4|0,(c[I>>2]|0)!=(c[q>>2]|0)):0)?(J=r+4|0,(c[J>>2]|0)!=(c[r>>2]|0)):0){K=c[g>>2]|0;if(!K){L=c[D>>2]|0;if(L>>>0<(c[F>>2]|0)>>>0){c[D>>2]=L+1;M=d[L>>0]|0}else M=0;c[h>>2]=c[h>>2]|M;c[g>>2]=8;N=8}else N=K;K=c[h>>2]|0;M=K&1;c[h>>2]=K>>>1;c[g>>2]=N+-1;N=(M|0)==0;K=e+4|0;L=c[K>>2]|0;O=c[e>>2]|0;P=L-O>>3;if(P>>>0>=f>>>0){if(P>>>0>f>>>0?(Q=O+(f<<3)|0,(L|0)!=(Q|0)):0)c[K>>2]=L+(~((L+-8-Q|0)>>>3)<<3)}else Ib(e,f-P|0);a[s>>0]=16;a[s+1>>0]=16;a[s+2>>0]=16;a[s+3>>0]=0;a:do if(f){P=r+12|0;Q=M<<1^3;L=o+12|0;K=o+24|0;O=p+12|0;R=p+24|0;S=q+12|0;T=q+24|0;U=r+24|0;V=0;W=0;b:while(1){if((c[J>>2]|0)==(c[r>>2]|0)){X=23;break}Y=c[g>>2]|0;while(1){if(Y>>>0>=16){Z=Y;break}_=c[D>>2]|0;if(_>>>0<(c[F>>2]|0)>>>0){c[D>>2]=_+1;$=d[_>>0]|0}else $=0;c[h>>2]=c[h>>2]|$<>2]=Y;if(Y>>>0>=33){X=28;break b}}Y=c[h>>2]|0;_=c[(c[P>>2]|0)+((Y&1023)<<2)>>2]|0;if((_|0)>-1){aa=_>>16;ba=_&65535}else{ca=c[U>>2]|0;da=10;ea=_;while(1){_=da+1|0;fa=b[ca+((Y>>>da&1)+~ea<<1)>>1]|0;ga=fa<<16>>16;if(fa<<16>>16<0){da=_;ea=ga}else{aa=_;ba=ga;break}}}c[h>>2]=Y>>>aa;c[g>>2]=Z-aa;W=ba+W&7;a[(c[e>>2]|0)+(V<<3)+4>>0]=W;ea=0;do{da=s+ea|0;ca=a[da>>0]|0;do if((ca&255)>=10)if((ca&255)<22){if((c[H>>2]|0)==(c[p>>2]|0)){X=51;break b}ga=c[g>>2]|0;while(1){if(ga>>>0>=16){ha=ga;break}_=c[D>>2]|0;if(_>>>0<(c[F>>2]|0)>>>0){c[D>>2]=_+1;ia=d[_>>0]|0}else ia=0;c[h>>2]=c[h>>2]|ia<>2]=ga;if(ga>>>0>=33){X=56;break b}}ga=c[h>>2]|0;_=c[(c[O>>2]|0)+((ga&1023)<<2)>>2]|0;if((_|0)>-1){ja=_>>16;ka=_&65535}else{fa=c[R>>2]|0;la=10;na=_;while(1){_=la+1|0;oa=b[fa+((ga>>>la&1)+~na<<1)>>1]|0;pa=oa<<16>>16;if(oa<<16>>16<0){la=_;na=pa}else{ja=_;ka=pa;break}}}c[h>>2]=ga>>>ja;c[g>>2]=ha-ja;qa=ka;break}else{if((c[I>>2]|0)==(c[q>>2]|0)){X=64;break b}na=c[g>>2]|0;while(1){if(na>>>0>=16){ra=na;break}la=c[D>>2]|0;if(la>>>0<(c[F>>2]|0)>>>0){c[D>>2]=la+1;sa=d[la>>0]|0}else sa=0;c[h>>2]=c[h>>2]|sa<>2]=na;if(na>>>0>=33){X=69;break b}}na=c[h>>2]|0;ga=c[(c[S>>2]|0)+((na&1023)<<2)>>2]|0;if((ga|0)>-1){ta=ga>>16;ua=ga&65535}else{la=c[T>>2]|0;fa=10;pa=ga;while(1){ga=fa+1|0;_=b[la+((na>>>fa&1)+~pa<<1)>>1]|0;oa=_<<16>>16;if(_<<16>>16<0){fa=ga;pa=oa}else{ta=ga;ua=oa;break}}}c[h>>2]=na>>>ta;c[g>>2]=ra-ta;qa=ua;break}else{if((c[G>>2]|0)==(c[o>>2]|0)){X=37;break b}pa=c[g>>2]|0;while(1){if(pa>>>0>=16){va=pa;break}fa=c[D>>2]|0;if(fa>>>0<(c[F>>2]|0)>>>0){c[D>>2]=fa+1;wa=d[fa>>0]|0}else wa=0;c[h>>2]=c[h>>2]|wa<>2]=pa;if(pa>>>0>=33){X=42;break b}}pa=c[h>>2]|0;na=c[(c[L>>2]|0)+((pa&1023)<<2)>>2]|0;if((na|0)>-1){xa=na>>16;ya=na&65535}else{fa=c[K>>2]|0;la=10;oa=na;while(1){na=la+1|0;ga=b[fa+((pa>>>la&1)+~oa<<1)>>1]|0;_=ga<<16>>16;if(ga<<16>>16<0){la=na;oa=_}else{xa=na;ya=_;break}}}c[h>>2]=pa>>>xa;c[g>>2]=va-xa;qa=ya}while(0);oa=(ca&255)+qa&31;a[(c[e>>2]|0)+(V<<3)+ea>>0]=oa;a[da>>0]=oa;ea=ea+1|0}while(ea>>>0>>0);if(!N){ea=(c[e>>2]|0)+(V<<3)|0;a[ea+1>>0]=a[ea>>0]|0;ea=(c[e>>2]|0)+(V<<3)|0;a[ea+2>>0]=a[ea>>0]|0}V=V+1|0;if(V>>>0>=f>>>0)break a}if((X|0)==23)ma(900658,900560,429,900681);else if((X|0)==28)ma(900637,900560,439,900681);else if((X|0)==37)ma(900658,900560,429,900681);else if((X|0)==42)ma(900637,900560,439,900681);else if((X|0)==51)ma(900658,900560,429,900681);else if((X|0)==56)ma(900637,900560,439,900681);else if((X|0)==64)ma(900658,900560,429,900681);else if((X|0)==69)ma(900637,900560,439,900681)}while(0);f=e+12|0;N=e+16|0;qa=c[N>>2]|0;ya=c[f>>2]|0;xa=(qa-ya|0)/11|0;if(xa>>>0>=j>>>0){if(xa>>>0>j>>>0?(va=ya+(j*11|0)|0,(qa|0)!=(va|0)):0)c[N>>2]=qa+(~(((0-va+(qa+-11)|0)>>>0)/11|0)*11|0)}else Jb(f,j-xa|0);if(!((k|0)==0&(l|0)!=0)){c[n>>2]=l;c[D>>2]=k;c[E>>2]=k;E=k+l|0;c[F>>2]=E;c[h>>2]=0;c[g>>2]=0;B=t;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));if((l|0)>0){l=k+1|0;c[D>>2]=l;za=l;Aa=d[k>>0]|0}else{za=k;Aa=0}c[h>>2]=Aa;c[g>>2]=8;k=Aa>>>1;c[h>>2]=k;c[g>>2]=7;c:do if(!(Aa&1)){l=Aa>>>2;c[h>>2]=l;c[g>>2]=6;if(!(k&1)){c[h>>2]=Aa>>>3;c[g>>2]=5;if(l&1){if(!j){X=283;break}else Ba=0;d:while(1){xa=0;do{qa=c[g>>2]|0;while(1){if(qa>>>0>=8){Ca=qa;break}va=c[D>>2]|0;if(va>>>0<(c[F>>2]|0)>>>0){c[D>>2]=va+1;Da=d[va>>0]|0}else Da=0;c[h>>2]=c[h>>2]|Da<>2]=qa;if(qa>>>0>=33){X=238;break d}}qa=c[h>>2]|0;da=qa&255;c[h>>2]=qa>>>8;c[g>>2]=Ca+-8;qa=0;do{ca=c[f>>2]|0;va=qa<<1;N=da>>>va&3;if((qa|xa)>>>0>=4){X=241;break d}ya=ca+(Ba*11|0)+xa|0;a[ya>>0]=(d[ya>>0]|0)&(3<>>3)|0;wa=ca+(Ba*11|0)+4+ya|0;G=va&7;va=d[900830+N>>0]|0;N=~(1<>0]=(d[wa>>0]|0)&N|(va&1)<>0]=(d[wa>>0]|0)&N|va>>>1<>>0<4);xa=xa+1|0}while(xa>>>0<4);eb((c[f>>2]|0)+(Ba*11|0)|0);Ba=Ba+1|0;if(Ba>>>0>=j>>>0){X=283;break c}}if((X|0)==238)ma(900637,900560,316,900627);else if((X|0)==241)ma(900834,900560,711,900852)}if(!(cb(n,t)|0)){Ea=0;break}if(j>>>0<=1){c[A>>2]=0;if(!j){X=283;break}}else{if((c[t+4>>2]|0)==(c[t>>2]|0)){Ea=0;break}c[A>>2]=0}xa=t+4|0;qa=t+12|0;da=t+24|0;G=0;e:while(1){if(!G){va=0;do{N=c[g>>2]|0;while(1){if(N>>>0>=8){Fa=N;break}wa=c[D>>2]|0;if(wa>>>0<(c[F>>2]|0)>>>0){c[D>>2]=wa+1;Ga=d[wa>>0]|0}else Ga=0;c[h>>2]=c[h>>2]|Ga<>2]=N;if(N>>>0>=33){X=257;break e}}N=c[h>>2]|0;wa=N&255;c[h>>2]=N>>>8;c[g>>2]=Fa+-8;a[A+va>>0]=N;N=0;do{ca=c[f>>2]|0;ya=N<<1;ua=wa>>>ya&3;if((N|va)>>>0>=4){X=260;break e}ta=ca+va|0;a[ta>>0]=(d[ta>>0]|0)&(3<>>3)|0;ra=ca+4+ta|0;sa=ya&7;ya=d[900830+ua>>0]|0;ua=~(1<>0]=(d[ra>>0]|0)&ua|(ya&1)<>0]=(d[ra>>0]|0)&ua|ya>>>1<>>0<4);va=va+1|0}while(va>>>0<4);eb(c[f>>2]|0)}else{va=0;do{if((c[xa>>2]|0)==(c[t>>2]|0)){X=266;break e}N=c[g>>2]|0;while(1){if(N>>>0>=16){Ha=N;break}wa=c[D>>2]|0;if(wa>>>0<(c[F>>2]|0)>>>0){c[D>>2]=wa+1;Ia=d[wa>>0]|0}else Ia=0;c[h>>2]=c[h>>2]|Ia<>2]=N;if(N>>>0>=33){X=271;break e}}N=c[h>>2]|0;wa=c[(c[qa>>2]|0)+((N&1023)<<2)>>2]|0;if((wa|0)>-1){Ja=wa>>16;Ka=wa&65535}else{sa=c[da>>2]|0;ya=10;ua=wa;while(1){wa=ya+1|0;ra=b[sa+((N>>>ya&1)+~ua<<1)>>1]|0;ca=ra<<16>>16;if(ra<<16>>16<0){ya=wa;ua=ca}else{Ja=wa;Ka=ca;break}}}c[h>>2]=N>>>Ja;c[g>>2]=Ha-Ja;ua=A+va|0;ya=(d[ua>>0]|0)^Ka;a[ua>>0]=ya;ua=0;do{sa=c[f>>2]|0;ca=ua<<1;wa=ya>>>ca&3;if((ua|va)>>>0>=4){X=278;break e}ra=sa+(G*11|0)+va|0;a[ra>>0]=(d[ra>>0]|0)&(3<>>3)|0;ta=sa+(G*11|0)+4+ra|0;I=ca&7;ca=d[900830+wa>>0]|0;wa=~(1<>0]=(d[ta>>0]|0)&wa|(ca&1)<>0]=(d[ta>>0]|0)&wa|ca>>>1<>>0<4);va=va+1|0}while(va>>>0<4);eb((c[f>>2]|0)+(G*11|0)|0)}G=G+1|0;if(G>>>0>=j>>>0){X=283;break c}}if((X|0)==257)ma(900637,900560,316,900627);else if((X|0)==260)ma(900834,900560,711,900852);else if((X|0)==266)ma(900658,900560,429,900681);else if((X|0)==271)ma(900637,900560,439,900681);else if((X|0)==278)ma(900834,900560,711,900852)}G=l&15;da=l>>>4;c[h>>2]=da;qa=6+-4|0;c[g>>2]=qa;xa=qa;qa=za;va=da;while(1){if(xa>>>0>=4){La=va;Ma=xa;break}if(qa>>>0>>0){da=qa+1|0;c[D>>2]=da;Na=da;Oa=d[qa>>0]|0}else{Na=qa;Oa=0}va=va|Oa<>2]=va;xa=xa+8|0;c[g>>2]=xa;if(xa>>>0>=33){X=144;break}else qa=Na}if((X|0)==144)ma(900637,900560,316,900627);qa=La&15;c[h>>2]=La>>>4;c[g>>2]=Ma+-4;B=u;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));do if(cb(n,u)|0){xa=u+4|0;if((c[xa>>2]|0)==(c[u>>2]|0)){Pa=1;break}B=x;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));va=(qa|0)!=0;do if(va){if(!(cb(n,x)|0)){Qa=1;break}if((c[x+4>>2]|0)==(c[x>>2]|0))Qa=1;else X=150}else X=150;while(0);f:do if((X|0)==150){if(!j){Qa=0;break}l=u+12|0;da=u+24|0;ua=(G|0)==0;ya=x+4|0;N=x+12|0;I=x+24|0;ca=e+24|0;wa=z+12|0;ta=z+6|0;sa=z+5|0;ra=z+4|0;ka=z+2|0;ja=z+3|0;ha=z+1|0;ia=z+7|0;H=z+8|0;s=z+9|0;ba=z+10|0;aa=z+11|0;Z=0;$=0;J=0;g:while(1){if(!J){if((c[xa>>2]|0)==(c[u>>2]|0)){X=155;break}M=c[g>>2]|0;while(1){if(M>>>0>=16){Ra=M;break}V=c[D>>2]|0;if(V>>>0<(c[F>>2]|0)>>>0){c[D>>2]=V+1;Sa=d[V>>0]|0}else Sa=0;c[h>>2]=c[h>>2]|Sa<>2]=M;if(M>>>0>=33){X=160;break g}}M=c[h>>2]|0;pa=c[(c[l>>2]|0)+((M&1023)<<2)>>2]|0;if((pa|0)>-1){Ta=pa>>16;Ua=pa&65535}else{V=c[da>>2]|0;Q=10;K=pa;while(1){pa=Q+1|0;L=b[V+((M>>>Q&1)+~K<<1)>>1]|0;T=L<<16>>16;if(L<<16>>16<0){Q=pa;K=T}else{Ta=pa;Ua=T;break}}}c[h>>2]=M>>>Ta;c[g>>2]=Ra-Ta;Va=Ua;Wa=8}else{Va=Z;Wa=J}J=Wa+-1|0;Z=Va>>>1;if(!(Va&1)){K=0;do{Q=c[g>>2]|0;while(1){if(Q>>>0>=8){Xa=Q;break}V=c[D>>2]|0;if(V>>>0<(c[F>>2]|0)>>>0){c[D>>2]=V+1;Ya=d[V>>0]|0}else Ya=0;c[h>>2]=c[h>>2]|Ya<>2]=Q;if(Q>>>0>=33){X=197;break g}}Q=c[h>>2]|0;V=Q&255;c[h>>2]=Q>>>8;c[g>>2]=Xa+-8;Q=0;do{T=c[f>>2]|0;pa=Q<<1;L=V>>>pa&3;if((Q|K)>>>0>=4){X=200;break g}S=T+($*11|0)+K|0;a[S>>0]=(d[S>>0]|0)&(3<>>3)|0;R=T+($*11|0)+4+S|0;O=pa&7;pa=d[900830+L>>0]|0;L=~(1<>0]=(d[R>>0]|0)&L|(pa&1)<>0]=(d[R>>0]|0)&L|pa>>>1<>>0<4);K=K+1|0}while(K>>>0<4)}else{if(ua)Za=0;else Za=db(n,G)|0;if(va){if((c[ya>>2]|0)==(c[x>>2]|0)){X=172;break}K=c[g>>2]|0;while(1){if(K>>>0>=16){_a=K;break}M=c[D>>2]|0;if(M>>>0<(c[F>>2]|0)>>>0){c[D>>2]=M+1;$a=d[M>>0]|0}else $a=0;c[h>>2]=c[h>>2]|$a<>2]=K;if(K>>>0>=33){X=177;break g}}K=c[h>>2]|0;M=c[(c[N>>2]|0)+((K&1023)<<2)>>2]|0;if((M|0)>-1){ab=M>>16;bb=M&65535}else{Q=c[I>>2]|0;V=10;O=M;while(1){M=V+1|0;pa=b[Q+((K>>>V&1)+~O<<1)>>1]|0;L=pa<<16>>16;if(pa<<16>>16<0){V=M;O=L}else{ab=M;bb=L;break}}}c[h>>2]=K>>>ab;c[g>>2]=_a-ab;fb=bb}else fb=0;O=c[ca>>2]|0;V=c[O>>2]|0;if(Za>>>0>=(c[O+4>>2]|0)-V>>4>>>0){Qa=1;break f}if(fb>>>0>=32768){X=185;break}a[wa>>0]=fb&3;a[ta>>0]=fb>>>2&1;a[sa>>0]=fb>>>3&1;a[z>>0]=fb>>>4&3;a[ra>>0]=fb>>>6&1;a[ka>>0]=fb>>>7&1;a[ja>>0]=fb>>>8&1;a[ha>>0]=fb>>>9&1;a[ia>>0]=fb>>>10&1;a[H>>0]=fb>>>11&1;a[s>>0]=fb>>>12&1;a[ba>>0]=fb>>>13&1;a[aa>>0]=fb>>>14&1;yb(y,V+(Za<<4)|0,z);V=0;do{O=V<<2;Q=0;do{L=c[f>>2]|0;M=d[y+(Q+O)>>0]|0;if((Q|V|M)>>>0>=4){X=189;break g}pa=Q<<1;R=L+($*11|0)+V|0;a[R>>0]=(d[R>>0]|0)&(3<>>3)|0;T=L+($*11|0)+4+R|0;S=pa&7;pa=d[900830+M>>0]|0;M=~(1<>0]=(d[T>>0]|0)&M|(pa&1)<>0]=(d[T>>0]|0)&M|pa>>>1<>>0<4);V=V+1|0}while(V>>>0<4)}eb((c[f>>2]|0)+($*11|0)|0);$=$+1|0;if($>>>0>=j>>>0){Qa=0;break f}}if((X|0)==155)ma(900658,900560,429,900681);else if((X|0)==160)ma(900637,900560,439,900681);else if((X|0)==172)ma(900658,900560,429,900681);else if((X|0)==177)ma(900637,900560,439,900681);else if((X|0)==185)ma(900799,896125,48,900820);else if((X|0)==189)ma(900834,900560,711,900852);else if((X|0)==197)ma(900637,900560,316,900627);else if((X|0)==200)ma(900834,900560,711,900852)}while(0);va=c[x+24>>2]|0;xa=va;if(va){$=x+28|0;aa=c[$>>2]|0;if((aa|0)!=(va|0))c[$>>2]=aa+(~((aa+-2-xa|0)>>>1)<<1);ac(va)}va=c[x+12>>2]|0;xa=va;if(va){aa=x+16|0;$=c[aa>>2]|0;if(($|0)!=(va|0))c[aa>>2]=$+(~(($+-4-xa|0)>>>2)<<2);ac(va)}va=c[x>>2]|0;if(va){xa=x+4|0;if((c[xa>>2]|0)!=(va|0))c[xa>>2]=va;ac(va)}Pa=Qa}else Pa=1;while(0);G=c[u+24>>2]|0;qa=G;if(G){va=u+28|0;xa=c[va>>2]|0;if((xa|0)!=(G|0))c[va>>2]=xa+(~((xa+-2-qa|0)>>>1)<<1);ac(G)}G=c[u+12>>2]|0;qa=G;if(G){xa=u+16|0;va=c[xa>>2]|0;if((va|0)!=(G|0))c[xa>>2]=va+(~((va+-4-qa|0)>>>2)<<2);ac(G)}G=c[u>>2]|0;if(G){qa=u+4|0;if((c[qa>>2]|0)!=(G|0))c[qa>>2]=G;ac(G)}if(!Pa)X=283;else Ea=0}else{G=k&15;qa=k>>>4;c[h>>2]=qa;va=7+-4|0;c[g>>2]=va;xa=va;va=za;$=qa;while(1){if(xa>>>0>=4){gb=$;hb=xa;break}if(va>>>0>>0){qa=va+1|0;c[D>>2]=qa;ib=qa;jb=d[va>>0]|0}else{ib=va;jb=0}$=$|jb<>2]=$;xa=xa+8|0;c[g>>2]=xa;if(xa>>>0>=33){X=93;break}else va=ib}if((X|0)==93)ma(900637,900560,316,900627);va=gb&15;c[h>>2]=gb>>>4;c[g>>2]=hb+-4;B=u;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));xa=(va|0)!=0;do if(xa){if(!(cb(n,u)|0)){kb=1;break}if((c[u+4>>2]|0)==(c[u>>2]|0))kb=1;else X=97}else X=97;while(0);h:do if((X|0)==97){if(!j){kb=0;break}va=(G|0)==0;$=u+4|0;qa=u+12|0;aa=u+24|0;ba=e+24|0;s=w+12|0;H=w+6|0;ia=w+5|0;ha=w+4|0;ja=w+2|0;ka=w+3|0;ra=w+1|0;sa=w+7|0;ta=w+8|0;wa=w+9|0;ca=w+10|0;I=w+11|0;N=0;i:while(1){if(va)lb=0;else lb=db(n,G)|0;if(xa){if((c[$>>2]|0)==(c[u>>2]|0)){X=104;break}ya=c[g>>2]|0;while(1){if(ya>>>0>=16){mb=ya;break}ua=c[D>>2]|0;if(ua>>>0<(c[F>>2]|0)>>>0){c[D>>2]=ua+1;nb=d[ua>>0]|0}else nb=0;c[h>>2]=c[h>>2]|nb<>2]=ya;if(ya>>>0>=33){X=109;break i}}ya=c[h>>2]|0;ua=c[(c[qa>>2]|0)+((ya&1023)<<2)>>2]|0;if((ua|0)>-1){ob=ua>>16;pb=ua&65535}else{Z=c[aa>>2]|0;J=10;da=ua;while(1){ua=J+1|0;l=b[Z+((ya>>>J&1)+~da<<1)>>1]|0;V=l<<16>>16;if(l<<16>>16<0){J=ua;da=V}else{ob=ua;pb=V;break}}}c[h>>2]=ya>>>ob;c[g>>2]=mb-ob;qb=pb}else qb=0;da=c[ba>>2]|0;J=c[da>>2]|0;if(lb>>>0>=(c[da+4>>2]|0)-J>>4>>>0){kb=1;break h}if(qb>>>0>=32768){X=117;break}a[s>>0]=qb&3;a[H>>0]=qb>>>2&1;a[ia>>0]=qb>>>3&1;a[w>>0]=qb>>>4&3;a[ha>>0]=qb>>>6&1;a[ja>>0]=qb>>>7&1;a[ka>>0]=qb>>>8&1;a[ra>>0]=qb>>>9&1;a[sa>>0]=qb>>>10&1;a[ta>>0]=qb>>>11&1;a[wa>>0]=qb>>>12&1;a[ca>>0]=qb>>>13&1;a[I>>0]=qb>>>14&1;yb(v,J+(lb<<4)|0,w);J=0;do{da=J<<2;Z=0;do{V=c[f>>2]|0;ua=d[v+(Z+da)>>0]|0;if((Z|J|ua)>>>0>=4){X=121;break i}l=Z<<1;K=V+(N*11|0)+J|0;a[K>>0]=(d[K>>0]|0)&(3<>>3)|0;Q=V+(N*11|0)+4+K|0;O=l&7;l=d[900830+ua>>0]|0;ua=~(1<>0]=(d[Q>>0]|0)&ua|(l&1)<>0]=(d[Q>>0]|0)&ua|l>>>1<>>0<4);J=J+1|0}while(J>>>0<4);eb((c[f>>2]|0)+(N*11|0)|0);N=N+1|0;if(N>>>0>=j>>>0){kb=0;break h}}if((X|0)==104)ma(900658,900560,429,900681);else if((X|0)==109)ma(900637,900560,439,900681);else if((X|0)==117)ma(900799,896125,48,900820);else if((X|0)==121)ma(900834,900560,711,900852)}while(0);xa=c[u+24>>2]|0;G=xa;if(xa){N=u+28|0;I=c[N>>2]|0;if((I|0)!=(xa|0))c[N>>2]=I+(~((I+-2-G|0)>>>1)<<1);ac(xa)}xa=c[u+12>>2]|0;G=xa;if(xa){I=u+16|0;N=c[I>>2]|0;if((N|0)!=(xa|0))c[I>>2]=N+(~((N+-4-G|0)>>>2)<<2);ac(xa)}xa=c[u>>2]|0;if(xa){G=u+4|0;if((c[G>>2]|0)!=(xa|0))c[G>>2]=xa;ac(xa)}if(!kb)X=283;else Ea=0}while(0);if((X|0)==283)Ea=1;X=c[t+24>>2]|0;kb=X;if(X){u=t+28|0;j=c[u>>2]|0;if((j|0)!=(X|0))c[u>>2]=j+(~((j+-2-kb|0)>>>1)<<1);ac(X)}X=c[t+12>>2]|0;kb=X;if(X){j=t+16|0;u=c[j>>2]|0;if((u|0)!=(X|0))c[j>>2]=u+(~((u+-4-kb|0)>>>2)<<2);ac(X)}X=c[t>>2]|0;if(X){kb=t+4|0;if((c[kb>>2]|0)!=(X|0))c[kb>>2]=X;ac(X)}rb=Ea}else rb=0}else rb=0;Ea=c[r+24>>2]|0;X=Ea;if(Ea){kb=r+28|0;t=c[kb>>2]|0;if((t|0)!=(Ea|0))c[kb>>2]=t+(~((t+-2-X|0)>>>1)<<1);ac(Ea)}Ea=c[r+12>>2]|0;X=Ea;if(Ea){t=r+16|0;kb=c[t>>2]|0;if((kb|0)!=(Ea|0))c[t>>2]=kb+(~((kb+-4-X|0)>>>2)<<2);ac(Ea)}Ea=c[r>>2]|0;if(Ea){X=r+4|0;if((c[X>>2]|0)!=(Ea|0))c[X>>2]=Ea;ac(Ea)}Ea=c[q+24>>2]|0;X=Ea;if(Ea){r=q+28|0;kb=c[r>>2]|0;if((kb|0)!=(Ea|0))c[r>>2]=kb+(~((kb+-2-X|0)>>>1)<<1);ac(Ea)}Ea=c[q+12>>2]|0;X=Ea;if(Ea){kb=q+16|0;r=c[kb>>2]|0;if((r|0)!=(Ea|0))c[kb>>2]=r+(~((r+-4-X|0)>>>2)<<2);ac(Ea)}Ea=c[q>>2]|0;if(Ea){X=q+4|0;if((c[X>>2]|0)!=(Ea|0))c[X>>2]=Ea;ac(Ea)}Ea=c[p+24>>2]|0;X=Ea;if(Ea){q=p+28|0;r=c[q>>2]|0;if((r|0)!=(Ea|0))c[q>>2]=r+(~((r+-2-X|0)>>>1)<<1);ac(Ea)}Ea=c[p+12>>2]|0;X=Ea;if(Ea){r=p+16|0;q=c[r>>2]|0;if((q|0)!=(Ea|0))c[r>>2]=q+(~((q+-4-X|0)>>>2)<<2);ac(Ea)}Ea=c[p>>2]|0;if(Ea){X=p+4|0;if((c[X>>2]|0)!=(Ea|0))c[X>>2]=Ea;ac(Ea)}Ea=c[o+24>>2]|0;X=Ea;if(Ea){p=o+28|0;q=c[p>>2]|0;if((q|0)!=(Ea|0))c[p>>2]=q+(~((q+-2-X|0)>>>1)<<1);ac(Ea)}Ea=c[o+12>>2]|0;X=Ea;if(Ea){q=o+16|0;p=c[q>>2]|0;if((p|0)!=(Ea|0))c[q>>2]=p+(~((p+-4-X|0)>>>2)<<2);ac(Ea)}Ea=c[o>>2]|0;if(!Ea){i=m;return rb|0}X=o+4|0;if((c[X>>2]|0)!=(Ea|0))c[X>>2]=Ea;ac(Ea);i=m;return rb|0}function cb(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;g=i;i=i+64|0;h=g+36|0;j=g;k=c[f>>2]|0;l=f+4|0;if((c[l>>2]|0)!=(k|0))c[l>>2]=k;k=c[f+12>>2]|0;l=f+16|0;m=c[l>>2]|0;if((k|0)!=(m|0))c[l>>2]=m+(~((m+-4-k|0)>>>2)<<2);k=c[f+24>>2]|0;m=f+28|0;l=c[m>>2]|0;if((k|0)!=(l|0))c[m>>2]=l+(~((l+-2-k|0)>>>1)<<1);k=e+20|0;l=e+4|0;m=e+12|0;n=e+16|0;e=c[k>>2]|0;while(1){if(e>>>0>=14){o=e;break}p=c[l>>2]|0;if(p>>>0<(c[m>>2]|0)>>>0){c[l>>2]=p+1;q=d[p>>0]|0}else q=0;c[n>>2]=c[n>>2]|q<>2]=e;if(e>>>0>=33){r=12;break}}if((r|0)==12)ma(900637,900560,316,900627);e=c[n>>2]|0;q=e&16383;p=e>>>14;c[n>>2]=p;s=o+-14|0;c[k>>2]=s;if(!q){t=1;i=g;return t|0}o=h;u=o+21|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(u|0));v=s;s=p;while(1){if(v>>>0>=5){w=s;x=v;break}p=c[l>>2]|0;if(p>>>0<(c[m>>2]|0)>>>0){c[l>>2]=p+1;y=d[p>>0]|0}else y=0;s=s|y<>2]=s;v=v+8|0;c[k>>2]=v;if(v>>>0>=33){r=19;break}}if((r|0)==19)ma(900637,900560,316,900627);v=w&31;s=w>>>5;c[n>>2]=s;w=x+-5|0;c[k>>2]=w;if((v+-1|0)>>>0>20){t=0;i=g;return t|0}a:do if(v){x=w;y=s;p=0;b:while(1){z=x;A=y;while(1){if(z>>>0>=3){B=A;C=z;break}D=c[l>>2]|0;if(D>>>0<(c[m>>2]|0)>>>0){c[l>>2]=D+1;E=d[D>>0]|0}else E=0;A=A|E<>2]=A;z=z+8|0;c[k>>2]=z;if(z>>>0>=33)break b}y=B>>>3;c[n>>2]=y;x=C+-3|0;c[k>>2]=x;a[h+(d[900524+p>>0]|0)>>0]=B&7;p=p+1|0;if(p>>>0>=v>>>0)break a}ma(900637,900560,316,900627)}while(0);o=j;u=o+36|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(u|0));if(ub(j,21,h)|0?(c[j+4>>2]|0)!=(c[j>>2]|0):0){h=$b(q)|0;Qc(h|0,0,e&16383|0)|0;e=j+12|0;o=j+24|0;u=0;c:while(1){v=c[k>>2]|0;while(1){if(v>>>0>=16){F=v;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;G=d[B>>0]|0}else G=0;c[n>>2]=c[n>>2]|G<>2]=v;if(v>>>0>=33){r=37;break c}}v=c[n>>2]|0;B=c[(c[e>>2]|0)+((v&1023)<<2)>>2]|0;if((B|0)>-1){H=B>>16;I=B&65535}else{C=c[o>>2]|0;E=10;s=B;while(1){B=E+1|0;w=b[C+((v>>>E&1)+~s<<1)>>1]|0;p=w<<16>>16;if(w<<16>>16<0){E=B;s=p}else{H=B;I=p;break}}}s=v>>>H;c[n>>2]=s;E=F-H|0;c[k>>2]=E;d:do if((I|0)<17){a[h+u>>0]=I;J=u+1|0}else switch(I|0){case 17:{C=E;p=s;while(1){if(C>>>0>=3){K=p;L=C;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;M=d[B>>0]|0}else M=0;p=p|M<>2]=p;C=C+8|0;c[k>>2]=C;if(C>>>0>=33){r=49;break c}}c[n>>2]=K>>>3;c[k>>2]=L+-3;J=u+3+(K&7)|0;break d;break}case 18:{C=E;p=s;while(1){if(C>>>0>=7){N=p;O=C;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;P=d[B>>0]|0}else P=0;p=p|P<>2]=p;C=C+8|0;c[k>>2]=C;if(C>>>0>=33){r=56;break c}}c[n>>2]=N>>>7;c[k>>2]=O+-7;J=u+11+(N&127)|0;break d;break}default:{if(!u){Q=0;break c}if((I|0)==19){C=E;p=s;while(1){if(C>>>0>=2){R=p;S=C;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;T=d[B>>0]|0}else T=0;p=p|T<>2]=p;C=C+8|0;c[k>>2]=C;if(C>>>0>=33){r=64;break c}}c[n>>2]=R>>>2;c[k>>2]=S+-2;U=(R&3)+3|0}else{C=E;p=s;while(1){if(C>>>0>=7){V=p;W=C;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;X=d[B>>0]|0}else X=0;p=p|X<>2]=p;C=C+8|0;c[k>>2]=C;if(C>>>0>=33){r=70;break c}}c[n>>2]=V>>>7;c[k>>2]=W+-7;U=(V&127)+7|0}C=a[h+(u+-1)>>0]|0;if(!(C<<24>>24)){Q=0;break c}else{Y=u;Z=U}while(1){if(Y>>>0>=q>>>0){Q=0;break c}p=Y+1|0;a[h+Y>>0]=C;Z=Z+-1|0;if(!Z){J=p;break}else Y=p}}}while(0);if(J>>>0>>0)u=J;else{_=J;r=75;break}}if((r|0)==37)ma(900637,900560,439,900681);else if((r|0)==49)ma(900637,900560,316,900627);else if((r|0)==56)ma(900637,900560,316,900627);else if((r|0)==64)ma(900637,900560,316,900627);else if((r|0)==70)ma(900637,900560,316,900627);else if((r|0)==75)if((_|0)==(q|0))Q=ub(f,q,h)|0;else Q=0;ac(h);$=Q}else $=0;Q=c[j+24>>2]|0;h=Q;if(Q){q=j+28|0;f=c[q>>2]|0;if((f|0)!=(Q|0))c[q>>2]=f+(~((f+-2-h|0)>>>1)<<1);ac(Q)}Q=c[j+12>>2]|0;h=Q;if(Q){f=j+16|0;q=c[f>>2]|0;if((q|0)!=(Q|0))c[f>>2]=q+(~((q+-4-h|0)>>>2)<<2);ac(Q)}Q=c[j>>2]|0;if(Q){h=j+4|0;if((c[h>>2]|0)!=(Q|0))c[h>>2]=Q;ac(Q)}t=$;i=g;return t|0}function db(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(b>>>0<=25){do if(b){e=a+20|0;f=a+4|0;g=a+12|0;h=a+16|0;i=c[e>>2]|0;while(1){if(i>>>0>=b>>>0){j=i;k=28;break}l=c[f>>2]|0;if(l>>>0<(c[g>>2]|0)>>>0){c[f>>2]=l+1;m=d[l>>0]|0}else m=0;c[h>>2]=c[h>>2]|m<>2]=i;if(i>>>0>=33){k=27;break}}if((k|0)==27)ma(900637,900560,316,900627);else if((k|0)==28){i=c[h>>2]|0;n=i&(1<>2]|0;r=c[f>>2]|0}while(0);c[p>>2]=q>>>b;c[o>>2]=r-b;s=n;return s|0}if(b>>>0>=33)ma(900545,900560,334,900603);n=a+20|0;r=a+4|0;o=a+12|0;q=a+16|0;a=c[n>>2]|0;while(1){if(a>>>0>=25){t=a;break}p=c[r>>2]|0;if(p>>>0<(c[o>>2]|0)>>>0){c[r>>2]=p+1;u=d[p>>0]|0}else u=0;c[q>>2]=c[q>>2]|u<>2]=a;if(a>>>0>=33){k=9;break}}if((k|0)==9)ma(900637,900560,316,900627);a=c[q>>2]|0;u=a&33554431;p=a>>>25;c[q>>2]=p;a=t+-25|0;c[n>>2]=a;t=b+-25|0;do if(t){if(t>>>0<26){v=a;w=p}else ma(900612,900560,306,900627);while(1){if(v>>>0>=t>>>0){x=w;y=v;k=18;break}b=c[r>>2]|0;if(b>>>0<(c[o>>2]|0)>>>0){c[r>>2]=b+1;z=d[b>>0]|0}else z=0;w=w|z<>2]=w;v=v+8|0;c[n>>2]=v;if(v>>>0>=33){k=17;break}}if((k|0)==17)ma(900637,900560,316,900627);else if((k|0)==18){A=(x&(1<>2]=B>>>t;c[n>>2]=C-t;s=A|u;return s|0}function eb(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=i;i=i+16|0;f=e;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;g=d[b>>0]|0;h=f+((g&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+((g>>>2&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+((g>>>4&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+(g>>>6<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=d[b+1>>0]|0;g=f+((h&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+((h>>>2&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+((h>>>4&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+(h>>>6<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=d[b+2>>0]|0;h=f+((g&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+((g>>>2&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+((g>>>4&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+(g>>>6<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=d[b+3>>0]|0;g=f+((h&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+((h>>>2&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+((h>>>4&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+(h>>>6<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=b+8|0;a[g>>0]=3;h=b+9|0;a[h>>0]=0;j=b+10|0;a[j>>0]=0;if(!(c[f>>2]|0)){k=0;l=3}else{a[j>>0]=1;a[g>>0]=0;k=1;l=0}if(!(c[f+4>>2]|0)){m=l;n=k}else{b=k+1<<24>>24;a[j>>0]=b;if((l&255)>1){a[g>>0]=1;o=1}else o=l;a[h>>0]=1;m=o;n=b}if(!(c[f+8>>2]|0))p=n;else{b=n+1<<24>>24;a[j>>0]=b;if((m&255)>2)a[g>>0]=2;a[h>>0]=2;p=b}if(!(c[f+12>>2]|0)){i=e;return}a[j>>0]=p+1<<24>>24;a[h>>0]=3;i=e;return}function fb(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;f=i;i=i+32|0;g=f;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;if((b|0)==0&(e|0)!=0){h=0;i=f;return h|0}c[g>>2]=e;j=g+4|0;c[j>>2]=b;c[g+8>>2]=b;k=g+12|0;c[k>>2]=b+e;e=g+16|0;c[e>>2]=0;b=g+20|0;c[b>>2]=0;l=a+28|0;if(!(cb(g,l)|0)){h=0;i=f;return h|0}if((c[a+32>>2]|0)==(c[l>>2]|0)){h=0;i=f;return h|0}l=a+64|0;if(!(cb(g,l)|0)){h=0;i=f;return h|0}if((c[a+68>>2]|0)==(c[l>>2]|0)){h=0;i=f;return h|0}l=a+100|0;if(!(cb(g,l)|0)){h=0;i=f;return h|0}if((c[a+104>>2]|0)==(c[l>>2]|0)){h=0;i=f;return h|0}l=a+136|0;if(!(cb(g,l)|0)){h=0;i=f;return h|0}if((c[a+140>>2]|0)==(c[l>>2]|0)){h=0;i=f;return h|0}l=c[b>>2]|0;while(1){if(l>>>0>=13){m=l;break}g=c[j>>2]|0;if(g>>>0<(c[k>>2]|0)>>>0){c[j>>2]=g+1;n=d[g>>0]|0}else n=0;c[e>>2]=c[e>>2]|n<>2]=l;if(l>>>0>=33){o=15;break}}if((o|0)==15)ma(900637,900560,316,900627);o=c[e>>2]|0;c[e>>2]=o>>>13;c[b>>2]=m+-13;c[a+172>>2]=o&8191;h=1;i=f;return h|0} +function gb(f,h,j,l,m,n,o,p,q,r,s,t,u,v,w,x,y){f=f|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;var z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Ib=0,Jb=0,Kb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,_j=0,$j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Hk=0,Ik=0,Jk=0,Kk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,_k=0,$k=0,al=0,bl=0,cl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,zl=0,Al=0,Bl=0.0,Cl=0,Dl=0,El=0,Fl=0.0,Gl=0,Hl=0,Il=0,Jl=0.0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Pl=0,Ql=0,Rl=0,Sl=0,Tl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0.0,Zl=0.0,_l=0.0,$l=0.0,am=0.0,bm=0.0,cm=0.0,dm=0.0,em=0.0,fm=0.0,gm=0.0,hm=0.0,im=0.0,jm=0.0,km=0.0,lm=0.0,mm=0.0,nm=0.0,om=0.0,pm=0.0,qm=0.0,rm=0.0,sm=0.0,tm=0.0,um=0.0,vm=0.0,wm=0.0,xm=0.0,ym=0.0,zm=0.0,Am=0.0,Bm=0.0,Cm=0.0,Dm=0.0,Em=0.0,Fm=0.0,Gm=0.0,Hm=0.0,Im=0.0,Jm=0.0,Km=0.0,Lm=0.0,Mm=0.0,Nm=0.0,Om=0.0,Pm=0.0,Qm=0.0,Rm=0.0,Sm=0.0,Tm=0.0,Um=0.0,Vm=0.0,Wm=0.0,Xm=0.0,Ym=0,Zm=0,_m=0,$m=0.0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,_n=0,$n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0;z=i;i=i+416|0;A=z+320|0;C=z+256|0;D=z+240|0;E=z+224|0;F=z+208|0;G=z+192|0;H=z+144|0;I=z+80|0;J=z+32|0;K=z+16|0;L=z+176|0;M=z+160|0;O=z+128|0;P=z+112|0;Q=z+96|0;R=z+408|0;S=z+64|0;T=z+400|0;U=z+48|0;V=z+392|0;W=z;X=z+384|0;Y=(v|0)==0?f+176|0:v;v=(a[s+23>>0]|0)==3;s=Z(l,j)|0;_=o+-14|0;do if(!u){if(_>>>0<8){$=d[t+6>>0]<<8|d[t+5>>0];aa=6;break}if((o|0)==12){ba=((d[t+6>>0]<<8|d[t+5>>0])+7|0)>>>3;ca=y}else{ba=j;ca=y}}else{$=u;aa=6}while(0);if((aa|0)==6)if(_>>>0>7|(y|0)!=0){ba=$;ca=y}else{ba=$;ca=d[t+8>>0]<<8|d[t+7>>0]}if(v){$=a[t+3>>0]|0;if(($&255)>15){da=0;i=z;return da|0}y=$&255;$=d[t+4>>0]&1;t=Y+24+($*192|0)+(y*12|0)|0;_=(c[Y+24+($*192|0)+(y*12|0)+4>>2]|0)-(c[t>>2]|0)>>2;if(s>>>0>_>>>0){Lb(t,s-_|0);ea=t}else ea=t}else ea=0;if((m|0)==0&(n|0)!=0){da=0;i=z;return da|0}t=m+n|0;n=f+172|0;_=c[n>>2]|0;c[L>>2]=0;y=L+4|0;c[y>>2]=0;c[L+8>>2]=0;if(!_)fa=0;else{xb(L,_);fa=c[n>>2]|0}$=L+12|0;c[$>>2]=_>>>1;_=f+16|0;u=f+12|0;ga=fa+(((c[_>>2]|0)-(c[u>>2]|0)|0)/11|0)|0;if((o+-3|0)>>>0<2){fa=Ic(s*12|0)|0;if(!fa)ha=0;else{ia=fa+(s<<3)|0;ja=fa;aa=18}}else{ia=0;ja=0;aa=18}a:do if((aa|0)==18){fa=(c[Y+4>>2]|0)-(c[Y>>2]|0)>>2;do if(fa>>>0>>0){Mb(Y,j-fa|0);ka=Y+12|0;la=Y+16|0;ma=c[la>>2]|0;oa=c[ka>>2]|0;pa=ma-oa>>2;if(pa>>>0>>0){Mb(ka,j-pa|0);break}if(pa>>>0>j>>>0?(pa=oa+(j<<2)|0,(ma|0)!=(pa|0)):0)c[la>>2]=ma+(~((ma+-4-pa|0)>>>2)<<2)}while(0);b:do if(l){fa=(j|0)==0;pa=f+32|0;ma=f+28|0;la=f+40|0;oa=f+52|0;ka=f+68|0;qa=f+64|0;ra=f+76|0;sa=f+4|0;ta=f+88|0;ua=v^1;va=f+104|0;wa=f+100|0;xa=f+112|0;ya=f+140|0;za=f+136|0;Aa=f+148|0;Ba=f+160|0;Ca=f+124|0;Da=o>>>0<2;Ea=(x|0)==0;Fa=A+1|0;Ga=A+2|0;Ha=A+3|0;Ia=A+1|0;Ja=A+2|0;Ka=A+3|0;La=J+4|0;Ma=J+8|0;Na=J+12|0;Oa=C+8|0;Pa=C+9|0;Qa=C+2|0;Ra=C+4|0;Sa=C+1|0;Ta=C+3|0;Ua=C+5|0;Va=K+4|0;Wa=K+8|0;Xa=K+12|0;Ya=C+6|0;Za=C+7|0;_a=C+11|0;$a=C+13|0;ab=C+15|0;bb=C+17|0;cb=C+19|0;db=C+21|0;eb=C+23|0;fb=C+25|0;gb=C+27|0;kb=C+29|0;lb=C+31|0;mb=C+33|0;nb=C+35|0;ob=C+37|0;pb=C+39|0;qb=C+41|0;rb=H+4|0;sb=H+8|0;tb=H+12|0;ub=D+1|0;vb=D+12+1|0;wb=C+10|0;yb=C+12|0;zb=C+14|0;Ab=C+16|0;Bb=C+18|0;Cb=C+20|0;Db=C+22|0;Eb=C+24|0;Fb=C+26|0;Gb=C+28|0;Ib=C+30|0;Jb=C+32|0;Kb=C+34|0;Nb=C+36|0;Ob=C+38|0;Pb=C+40|0;Qb=F+12|0;Rb=G+12|0;Sb=Rb+2|0;Tb=Rb+1|0;Ub=A+1|0;Vb=A+2|0;Wb=A+3|0;Xb=A+4|0;Yb=A+5|0;Zb=A+6|0;_b=A+7|0;$b=G+1|0;ac=G+2|0;cc=G+3|0;dc=G+4|0;ec=dc+1|0;fc=dc+2|0;gc=dc+3|0;hc=G+8|0;ic=hc+1|0;jc=hc+2|0;kc=hc+3|0;lc=G+12|0;mc=lc+1|0;nc=lc+2|0;oc=lc+3|0;pc=C+4|0;qc=C+8|0;rc=C+12|0;sc=D+4|0;tc=D+8|0;uc=D+12|0;vc=E+4|0;wc=E+8|0;xc=E+12|0;yc=F+4|0;zc=I+4|0;Ac=F+8|0;Bc=I+8|0;Cc=F+12|0;Dc=I+12|0;Ec=(p|0)==4;Fc=M+4|0;Gc=M+8|0;Hc=M+12|0;Kc=ba<<2;Lc=(p|0)==2;Mc=(o|0)==17;Nc=ba<<1;Oc=~ba;Pc=Q+4|0;Qc=R+2|0;Rc=Q+8|0;Uc=R+4|0;Vc=Q+12|0;Wc=R+6|0;Xc=Q+2|0;Yc=Q+1|0;Zc=Q+4|0;_c=Zc+2|0;$c=Zc+1|0;ad=R+2|0;bd=Q+8|0;cd=bd+2|0;dd=bd+1|0;ed=R+4|0;fd=Q+12|0;gd=fd+2|0;hd=fd+1|0;id=R+6|0;jd=S+4|0;kd=T+2|0;ld=S+8|0;md=T+4|0;nd=S+12|0;od=T+6|0;pd=U+4|0;qd=V+2|0;rd=U+8|0;sd=V+4|0;td=U+12|0;ud=V+6|0;vd=W+1|0;wd=W+4+1|0;xd=X+2|0;yd=W+8+1|0;zd=X+4|0;Ad=W+12+1|0;Bd=X+6|0;Cd=0;Dd=0;Ed=0;Fd=3;Gd=m;Hd=0;Id=0;Jd=0;Kd=0;Ld=0;Md=0;Nd=~ca;Od=0;Pd=0;c:while(1){Qd=(Nd|0)>-5?~Nd:4;Rd=Jd&1;d:do if(fa){Sd=Fd;Td=Ed;Ud=Dd;Vd=Cd;Wd=Id;Xd=Hd;Yd=Gd;Zd=Kd;_d=Ld;$d=Md;ae=Od;be=Pd}else{ce=(Rd|0)==0;de=Y+((Rd^1)*12|0)|0;ee=Y+(Rd*12|0)|0;fe=Z(Jd,j)|0;ge=Z(Jd,ba)|0;he=Jd<<2;ie=Z(he,ba)|0;je=(ca|0)==(he|0);he=(Jd|0)==0;ke=(Jd|0)!=0;le=Cd;me=Dd;ne=Ed;oe=Fd;pe=Gd;qe=Hd;re=Id;se=0;te=Kd;ue=Ld;ve=Md;we=Oc;xe=Od;ye=Pd;while(1){ze=(we|0)>-5?~we:4;Ae=(se&1|0)==0;do if(Ae){if(!ce){Be=re;Ce=qe;De=pe;Ee=d[(c[ee>>2]|0)+(se<<2)+2>>0]|0;Fe=ve;Ge=ye;break}do if(!ve){if((c[pa>>2]|0)==(c[ma>>2]|0)){aa=33;break c}else{He=re;Ie=pe;Je=qe}while(1){if(He>>>0>=16){Ke=Je;Le=Ie;Me=He;break}if(Ie>>>0>>0){Ne=Ie+1|0;Oe=d[Ie>>0]|0}else{Ne=Ie;Oe=0}Je=Oe<>>0>=33){aa=38;break c}else Ie=Ne}Pe=c[(c[la>>2]|0)+((Ke&1023)<<2)>>2]|0;if((Pe|0)>-1){Qe=Pe>>16;Re=Pe&65535}else{Se=c[oa>>2]|0;Te=10;Ue=Pe;while(1){Pe=Te+1|0;Ve=b[Se+((Ke>>>Te&1)+~Ue<<1)>>1]|0;We=Ve<<16>>16;if(Ve<<16>>16<0){Te=Pe;Ue=We}else{Qe=Pe;Re=We;break}}}Ue=Ke>>>Qe;Te=Me-Qe|0;if((Re|0)==256){Xe=Te;Ye=Ue;Ze=Le;_e=0;$e=0}else{af=Te;bf=Ue;cf=Le;df=0;ef=Re;break}while(1){Ue=Xe;Te=Ze;Se=Ye;while(1){if(Ue>>>0>=5){ff=Se;gf=Te;hf=Ue;break}if(Te>>>0>>0){jf=Te+1|0;kf=d[Te>>0]|0}else{jf=Te;kf=0}Se=kf<>>0>=33){aa=49;break c}else Te=jf}Te=ff>>>5;Ue=hf+-5|0;Se=(ff&15)<<_e|$e;We=_e+4|0;if(!(ff&16)){lf=gf;mf=Te;nf=Ue;of=Se;break}if(We>>>0>31){aa=52;break c}else{Xe=Ue;Ye=Te;Ze=gf;_e=We;$e=Se}}af=nf;bf=mf;cf=lf;df=of+2|0;ef=ye}else{af=re;bf=qe;cf=pe;df=ve+-1|0;ef=ye}while(0);a[(c[de>>2]|0)+(se<<2)+2>>0]=ef>>>4;Be=af;Ce=bf;De=cf;Ee=ef;Fe=df;Ge=ef}else{Be=re;Ce=qe;De=pe;Ee=te;Fe=ve;Ge=ye}while(0);Se=Ee&3;We=Ee>>>2;e:do switch(Se|0){case 0:{if(!se){aa=58;break c}else{pf=xe;aa=82}break}case 1:{if(he){aa=61;break c}pf=e[(c[de>>2]|0)+(se<<2)>>1]|0;aa=82;break}case 2:{if(v){Te=c[(c[ea>>2]|0)+(se+fe<<2)>>2]|0;qf=Be;rf=Ce;sf=De;tf=Te&65535;uf=Te>>>16;aa=83;break e}if(!(ke&(se|0)!=0)){aa=67;break c}qf=Be;rf=Ce;sf=De;tf=e[(c[de>>2]|0)+(se+-1<<2)>>1]|0;uf=0;aa=83;break}default:{if((c[ka>>2]|0)==(c[qa>>2]|0)){aa=71;break c}else{vf=Be;wf=De;xf=Ce}while(1){if(vf>>>0>=16){yf=xf;zf=wf;Af=vf;break}if(wf>>>0>>0){Bf=wf+1|0;Cf=d[wf>>0]|0}else{Bf=wf;Cf=0}xf=Cf<>>0>=33){aa=76;break c}else wf=Bf}Te=c[(c[ra>>2]|0)+((yf&1023)<<2)>>2]|0;if((Te|0)>-1){Df=Te>>16;Ef=Te&65535}else{Ue=c[ta>>2]|0;Pe=10;Ve=Te;while(1){Te=Pe+1|0;Ff=b[Ue+((yf>>>Pe&1)+~Ve<<1)>>1]|0;Gf=Ff<<16>>16;if(Ff<<16>>16<0){Pe=Te;Ve=Gf}else{Df=Te;Ef=Gf;break}}}Ve=Ef+xe|0;Pe=(c[sa>>2]|0)-(c[f>>2]|0)>>3;qf=Af-Df|0;rf=yf>>>Df;sf=zf;tf=Ve-(Ve>>>0>>0?0:Pe)|0;uf=0;aa=83}}while(0);if((aa|0)==82){aa=0;Pe=pf&65535;b[(c[ee>>2]|0)+(se<<2)>>1]=Pe;Hf=Pe;If=De;Jf=Ce;Kf=Be;Lf=pf;aa=84}else if((aa|0)==83){aa=0;Pe=tf&65535;b[(c[ee>>2]|0)+(se<<2)>>1]=Pe;if((Se|0)!=2|ua){Hf=Pe;If=sf;Jf=rf;Kf=qf;Lf=tf;aa=84}else{Mf=Pe;Nf=qf;Of=rf;Pf=sf;Qf=ue;Rf=tf;Sf=uf}}do if((aa|0)==84){aa=0;if(!ue){if((c[va>>2]|0)==(c[wa>>2]|0)){aa=87;break c}else{Tf=Kf;Uf=If;Vf=Jf}while(1){if(Tf>>>0>=16){Wf=Vf;Xf=Uf;Yf=Tf;break}if(Uf>>>0>>0){Zf=Uf+1|0;_f=d[Uf>>0]|0}else{Zf=Uf;_f=0}Vf=_f<>>0>=33){aa=92;break c}else Uf=Zf}Pe=c[(c[xa>>2]|0)+((Wf&1023)<<2)>>2]|0;if((Pe|0)>-1){$f=Pe>>16;ag=Pe&65535}else{Ve=c[Ca>>2]|0;Ue=10;Gf=Pe;while(1){Pe=Ue+1|0;Te=b[Ve+((Wf>>>Ue&1)+~Gf<<1)>>1]|0;Ff=Te<<16>>16;if(Te<<16>>16<0){Ue=Pe;Gf=Ff}else{$f=Pe;ag=Ff;break}}}Gf=Wf>>>$f;Ue=Yf-$f|0;if((ag|0)==(ga|0)){if((c[ya>>2]|0)==(c[za>>2]|0)){aa=99;break c}else{bg=Ue;cg=Xf;dg=Gf}while(1){if(bg>>>0>=16){eg=dg;fg=cg;gg=bg;break}if(cg>>>0>>0){hg=cg+1|0;ig=d[cg>>0]|0}else{hg=cg;ig=0}dg=ig<>>0>=33){aa=104;break c}else cg=hg}Ve=c[(c[Aa>>2]|0)+((eg&1023)<<2)>>2]|0;if((Ve|0)>-1){jg=Ve>>16;kg=Ve&65535}else{Ff=c[Ba>>2]|0;Pe=10;Te=Ve;while(1){Ve=Pe+1|0;lg=b[Ff+((eg>>>Pe&1)+~Te<<1)>>1]|0;mg=lg<<16>>16;if(lg<<16>>16<0){Pe=Ve;Te=mg}else{jg=Ve;kg=mg;break}}}Te=eg>>>jg;Pe=gg-jg|0;do if((kg|0)==63){Ff=Pe;mg=fg;Ve=Te;while(1){if(Ff>>>0>=8){ng=Ve;og=mg;pg=Ff;break}if(mg>>>0>>0){qg=mg+1|0;rg=d[mg>>0]|0}else{qg=mg;rg=0}Ve=rg<>>0>=33){aa=114;break c}else mg=qg}mg=ng>>>8;Ff=pg+-8|0;Ve=ng&127;if(!(ng&128)){sg=Ff;tg=mg;ug=og;vg=Ve;break}else{wg=Ff;xg=og;yg=mg}while(1){if(wg>>>0>=8){zg=yg;Ag=xg;Bg=wg;break}if(xg>>>0>>0){Cg=xg+1|0;Dg=d[xg>>0]|0}else{Cg=xg;Dg=0}yg=Dg<>>0>=33){aa=114;break c}else xg=Cg}mg=zg>>>8;Ff=Bg+-8|0;lg=zg<<7&16256|Ve;if(!(zg&128)){sg=Ff;tg=mg;ug=Ag;vg=lg;break}else{Eg=Ff;Fg=Ag;Gg=mg}while(1){if(Eg>>>0>=8){Hg=Gg;Ig=Fg;Jg=Eg;break}if(Fg>>>0>>0){Kg=Fg+1|0;Lg=d[Fg>>0]|0}else{Kg=Fg;Lg=0}Gg=Lg<>>0>=33){aa=114;break c}else Fg=Kg}Ve=Hg>>>8;mg=Jg+-8|0;Ff=Hg<<14&2080768|lg;if(!(Hg&128)){sg=mg;tg=Ve;ug=Ig;vg=Ff;break}else{Mg=mg;Ng=Ig;Og=Ve}while(1){if(Mg>>>0>=8){Pg=Og;Qg=Ng;Rg=Mg;break}if(Ng>>>0>>0){Sg=Ng+1|0;Tg=d[Ng>>0]|0}else{Sg=Ng;Tg=0}Og=Tg<>>0>=33){aa=114;break c}else Ng=Sg}lg=Pg>>>8;Ve=Rg+-8|0;mg=Pg<<21&266338304|Ff;if(!(Pg&128)){sg=Ve;tg=lg;ug=Qg;vg=mg;break}else{Ug=Ve;Vg=Qg;Wg=lg}while(1){if(Ug>>>0>=8){Xg=Wg;Yg=Vg;Zg=Ug;break}if(Vg>>>0>>0){_g=Vg+1|0;$g=d[Vg>>0]|0}else{_g=Vg;$g=0}Wg=$g<>>0>=33){aa=114;break c}else Vg=_g}if(!(Xg&128)){sg=Zg+-8|0;tg=Xg>>>8;ug=Yg;vg=Xg<<28|mg}else{aa=830;break c}}else{sg=Pe;tg=Te;ug=fg;vg=kg}while(0);if((vg+3|0)>>>0>s>>>0){aa=117;break c}ah=sg;bh=tg;ch=ug;dh=vg+2|0;eh=((c[_>>2]|0)-(c[u>>2]|0)|0)/11|0}else{ah=Ue;bh=Gf;ch=Xf;dh=0;eh=ag}}else{ah=Kf;bh=Jf;ch=If;dh=ue+-1|0;eh=((c[_>>2]|0)-(c[u>>2]|0)|0)/11|0}Te=((c[_>>2]|0)-(c[u>>2]|0)|0)/11|0;Pe=(c[n>>2]|0)==0;if((eh|0)<(Te|0)){if(Pe){Mf=Hf;Nf=ah;Of=bh;Pf=ch;Qf=dh;Rf=Lf;Sf=eh;break}Ff=c[$>>2]|0;c[$>>2]=Ff+1;lg=c[L>>2]|0;c[lg+(Ff<<2)>>2]=eh;Ff=c[$>>2]|0;if((Ff|0)!=((c[y>>2]|0)-lg>>2|0)){Mf=Hf;Nf=ah;Of=bh;Pf=ch;Qf=dh;Rf=Lf;Sf=eh;break}c[$>>2]=Ff>>>1;Mf=Hf;Nf=ah;Of=bh;Pf=ch;Qf=dh;Rf=Lf;Sf=eh;break}if(Pe){aa=122;break c}Pe=eh-Te|0;Ff=c[L>>2]|0;if((Pe|0)>=((c[y>>2]|0)-Ff>>2|0)){aa=124;break c}lg=Ff+(Pe<<2)|0;Ve=c[lg>>2]|0;if((eh|0)==(Te|0)){Mf=Hf;Nf=ah;Of=bh;Pf=ch;Qf=dh;Rf=Lf;Sf=Ve}else{Te=Ff+(Pe>>>1<<2)|0;Pe=c[Te>>2]|0;c[Te>>2]=Ve;c[lg>>2]=Pe;Mf=Hf;Nf=ah;Of=bh;Pf=ch;Qf=dh;Rf=Lf;Sf=Ve}}while(0);Ve=c[f>>2]|0;if(Rf>>>0>=(c[sa>>2]|0)-Ve>>3>>>0){aa=133;break c}Pe=c[u>>2]|0;if(Sf>>>0>=(((c[_>>2]|0)-Pe|0)/11|0)>>>0){aa=133;break c}if(v)c[(c[ea>>2]|0)+(se+fe<<2)>>2]=Sf<<16|Rf;lg=c[123158]|0;f:do if(v&(Se|0)==2&(Da&(lg&1|0)!=0)){Te=h+(Z(se+ge|0,p)|0)|0;c[Te>>2]=-1;c[Te+4>>2]=-1;fh=oe;gh=ne;hh=me;ih=le}else{Te=Ve+(Rf<<3)|0;Ff=Pe+(Sf*11|0)|0;do switch(o|0){case 0:{jh=Z(se+ge|0,p)|0;kh=a[Te>>0]|0;lh=a[Te+1>>0]|0;mh=d[Te+2>>0]|0;nh=(lh&255)<31?(lh&255)<<5:992;lh=(mh>>>0<31?mh:31)|nh;mh=(nh|((kh&255)<31?(kh&255)<<10:31744))>>>7&248|le&7;kh=lh>>>2&248|me&7;nh=lh<<3|ne&7;lh=a[Ve+(Rf<<3)+4>>0]|0;oh=lh&255;if((lh&255)>=8){aa=141;break c}lh=oh<<5|oe&3|oh<<2;c[h+jh>>2]=mh|lh<<24|nh<<16&16711680|kh<<8;oh=a[Pe+(Sf*11|0)+5>>0]|0;ph=a[Pe+(Sf*11|0)+6>>0]|0;qh=a[Pe+(Sf*11|0)+7>>0]|0;a[h+(jh+4)>>0]=a[Pe+(Sf*11|0)+4>>0]|0;a[h+(jh+5)>>0]=oh;a[h+(jh+6)>>0]=ph;a[h+(jh+7)>>0]=qh;fh=lh&255;gh=nh&255;hh=kh&255;ih=mh&255;break f;break}case 1:{mh=Z(se+ge|0,p)|0;kh=h+mh|0;hb(kh,Te,Ff,r);if(!(lg&6)){fh=oe;gh=ne;hh=me;ih=le;break f}nh=c[123158]|0;if(nh&2){a[kh>>0]=-1;a[h+(mh+1)>>0]=-1;a[h+(mh+2)>>0]=0;a[h+(mh+3)>>0]=0;fh=oe;gh=ne;hh=me;ih=le;break f}if(!(nh&4)){fh=oe;gh=ne;hh=me;ih=le;break f}a[h+(mh+4)>>0]=0;a[h+(mh+5)>>0]=0;a[h+(mh+6)>>0]=85;a[h+(mh+7)>>0]=85;fh=oe;gh=ne;hh=me;ih=le;break f;break}case 2:{mh=Z(se+ge|0,p)|0;nh=h+mh|0;kh=a[Pe+(Sf*11|0)+8>>0]|0;lh=kh&255;qh=a[Pe+(Sf*11|0)+9>>0]|0;jh=qh&255;ph=d[Ve+(Rf<<3)+4>>0]|0;g:do if(kh<<24>>24==qh<<24>>24){if((kh&255)>=4){aa=149;break c}oh=d[Te>>0]|0;rh=(oh<<3|oh>>>2)+(c[509600+(ph<<4)+(lh<<2)>>2]|0)|0;if(rh>>>0>255)if((rh|0)<0){sh=0;aa=152}else th=255;else{sh=rh;aa=152}if((aa|0)==152){aa=0;th=sh}rh=th&255;a[nh>>0]=rh;a[h+(mh+1)>>0]=rh;rh=h+(mh+2)|0;a[rh>>0]=0;a[rh+1>>0]=0;a[rh+2>>0]=0;a[rh+3>>0]=0;a[rh+4>>0]=0;a[rh+5>>0]=0}else{if((a[Pe+(Sf*11|0)+10>>0]|0)==2){jb(G,Te,ph);rh=a[G+(jh<<2)>>0]|0;a[nh>>0]=a[G+(lh<<2)>>0]|0;a[h+(mh+1)>>0]=rh;rh=0;while(1){oh=Pe+(Sf*11|0)+rh|0;uh=rh<<2;vh=0;do{if((vh|rh)>>>0>=4){aa=159;break c}wh=(vh+uh|0)*3|0;xh=wh>>>3;yh=wh&7;zh=nh+2+xh|0;Ah=d[zh>>0]|0;Bh=wh>>>0<40;if(Bh)Ch=d[xh+1+(nh+2)>>0]<<8|Ah;else Ch=Ah;Ah=Ch&~(7<>0]|0)>>>(vh<<1)&3|0)==(jh|0)&1)<>0]=Ah;if(Bh)a[xh+1+(nh+2)>>0]=Ah>>>8;vh=vh+1|0}while(vh>>>0<4);rh=rh+1|0;if(rh>>>0>=4)break g}}h:do switch(kh<<24>>24){case 0:{if(qh<<24>>24==3){Dh=0;break h}if(qh<<24>>24==2)Dh=2;else aa=180;break}case 1:{if(qh<<24>>24==3){Dh=1;break h}if(qh<<24>>24==2)Dh=3;else aa=180;break}default:aa=180}while(0);if((aa|0)==180){aa=0;Dh=4}rh=Dh>>>0>3?0:Dh;vh=(d[Te>>0]|0)+(ph<<5)|0;a[nh>>0]=a[695072+(vh<<4)+(rh<<2)>>0]|0;a[h+(mh+1)>>0]=a[695072+(vh<<4)+(rh<<2)+1>>0]|0;oh=695072+(vh<<4)+(rh<<2)+2|0;rh=0;do{vh=Pe+(Sf*11|0)+rh|0;uh=rh<<2;Ah=0;do{if((Ah|rh)>>>0>=4){aa=170;break c}xh=(Ah+uh|0)*3|0;Bh=xh>>>3;zh=xh&7;yh=nh+2+Bh|0;wh=d[yh>>0]|0;Eh=xh>>>0<40;if(Eh)Fh=d[Bh+1+(nh+2)>>0]<<8|wh;else Fh=wh;wh=Fh&~(7<>1]|0)>>>(((d[vh>>0]|0)>>>(Ah<<1)&3)*3|0)&7)<>0]=wh;if(Eh)a[Bh+1+(nh+2)>>0]=wh>>>8;Ah=Ah+1|0}while(Ah>>>0<4);rh=rh+1|0}while(rh>>>0<4)}while(0);fh=oe;gh=ne;hh=me;ih=le;break f;break}case 3:{nh=a[Te>>0]|0;mh=a[Te+1>>0]|0;ph=d[Te+2>>0]|0;qh=(mh&255)<31?(mh&255)<<5:992;mh=(ph>>>0<31?ph:31)|qh;ph=(qh|((nh&255)<31?(nh&255)<<10:31744))>>>7&248|le&7;nh=ph&255;qh=mh>>>2&248|me&7;kh=qh&255;jh=mh<<3|ne&7;mh=jh&255;lh=Ve+(Rf<<3)+4|0;mg=a[lh>>0]|0;rh=mg&255;if((mg&255)>=8){aa=183;break c}mg=rh<<5|oe&3|rh<<2;rh=a[Pe+(Sf*11|0)+4>>0]|0;oh=a[Pe+(Sf*11|0)+5>>0]|0;Ah=a[Pe+(Sf*11|0)+6>>0]|0;vh=se+fe|0;uh=Tc(d[Pe+(Sf*11|0)+7>>0]|0,0,56)|0;wh=B;Bh=Tc(Ah&255|0,0,48)|0;Ah=B;Eh=Tc(oh&255|0,0,40)|0;oh=ja+(vh<<3)|0;c[oh>>2]=ph|mg<<24|jh<<16&16711680|qh<<8|Eh|Bh|uh;c[oh+4>>2]=rh&255|B|Ah|wh;wh=mg&255;mg=d[lh>>0]|0;lh=d[Pe+(Sf*11|0)+9>>0]|0;Ah=c[Te>>2]|0;rh=Ah&255;oh=Ah>>>5;uh=Ah>>>10&63;Bh=Ah>>>13;Eh=Ah>>>18&63;Ah=rh<<3&248|rh>>>2;rh=c[509600+(mg<<4)+(d[Pe+(Sf*11|0)+8>>0]<<2)>>2]|0;qh=Ah+rh|0;if(qh>>>0>255)if((qh|0)<0){Gh=0;aa=186}else Hh=255;else{Gh=qh;aa=186}if((aa|0)==186){aa=0;Hh=Gh}qh=oh&248|uh;uh=qh+rh|0;if(uh>>>0>255)if((uh|0)<0){Ih=0;aa=189}else Jh=255;else{Ih=uh;aa=189}if((aa|0)==189){aa=0;Jh=Ih}uh=Bh&248|Eh;Eh=uh+rh|0;if(Eh>>>0>255)if((Eh|0)<0){Kh=0;aa=192}else Lh=255;else{Kh=Eh;aa=192}if((aa|0)==192){aa=0;Lh=Kh}Eh=Hh&255;rh=Jh&255;Bh=Lh&255;oh=c[509600+(mg<<4)+(lh<<2)>>2]|0;lh=oh+Ah|0;if(lh>>>0>255)if((lh|0)<0){Mh=0;aa=195}else Nh=255;else{Mh=lh;aa=195}if((aa|0)==195){aa=0;Nh=Mh}lh=oh+qh|0;if(lh>>>0>255)if((lh|0)<0){Oh=0;aa=198}else Ph=255;else{Oh=lh;aa=198}if((aa|0)==198){aa=0;Ph=Oh}lh=oh+uh|0;if(lh>>>0>255)if((lh|0)<0){Qh=0;aa=201}else Rh=255;else{Qh=lh;aa=201}if((aa|0)==201){aa=0;Rh=Qh}if((Eh&255)>(Nh&255)){aa=203;break c}if((rh&255)>(Ph&255)){aa=205;break c}if((Bh&255)>(Rh&255)){aa=207;break c}Bh=d[970432+(Lh&255)>>0]<<1;if(Bh>>>0>=32){aa=209;break c}rh=Bh|d[970176+(Jh&255)>>0]<<5|d[970176+(Hh&255)>>0]<<10|32768;if(rh>>>0>=65536){aa=211;break c}Bh=d[970763+(Rh&255)>>0]|d[970763+(Ph&255)>>0]<<5|d[970763+(Nh&255)>>0]<<10|32768;if(Bh>>>0>=65536){aa=213;break c}c[ia+(vh<<2)>>2]=Bh<<16|rh&65534;fh=wh;gh=mh;hh=kh;ih=nh;break f;break}case 4:{if(Ea){aa=216;break c}nh=a[Te>>0]|0;kh=a[Te+1>>0]|0;mh=d[Te+2>>0]|0;wh=(kh&255)<31?(kh&255)<<5:992;kh=(mh>>>0<31?mh:31)|wh;mh=(wh|((nh&255)<31?(nh&255)<<10:31744))>>>7&248|le&7;nh=mh&255;wh=kh>>>2&248|me&7;rh=wh&255;Bh=kh<<3|ne&7;kh=Bh&255;vh=Ve+(Rf<<3)+4|0;Eh=a[vh>>0]|0;lh=Eh&255;if((Eh&255)>=8){aa=218;break c}Eh=lh<<5|oe&3|lh<<2;lh=a[Ff>>0]|0;uh=a[Pe+(Sf*11|0)+1>>0]|0;oh=a[Pe+(Sf*11|0)+2>>0]|0;qh=se+fe|0;Ah=Tc(d[Pe+(Sf*11|0)+3>>0]|0,0,56)|0;mg=B;jh=Tc(oh&255|0,0,48)|0;oh=B;ph=Tc(uh&255|0,0,40)|0;uh=ja+(qh<<3)|0;c[uh>>2]=mh|Eh<<24|Bh<<16&16711680|wh<<8|ph|jh|Ah;c[uh+4>>2]=lh&255|B|oh|mg;mg=Eh&255;Eh=d[vh>>0]|0;vh=d[Pe+(Sf*11|0)+9>>0]|0;oh=c[Te>>2]|0;lh=oh&255;uh=oh>>>5;Ah=oh>>>10&63;jh=oh>>>13;ph=oh>>>18&63;oh=lh<<3&248|lh>>>2;lh=c[509600+(Eh<<4)+(d[Pe+(Sf*11|0)+8>>0]<<2)>>2]|0;wh=oh+lh|0;if(wh>>>0>255)if((wh|0)<0){Sh=0;aa=221}else Th=255;else{Sh=wh;aa=221}if((aa|0)==221){aa=0;Th=Sh}wh=uh&248|Ah;Ah=wh+lh|0;if(Ah>>>0>255)if((Ah|0)<0){Uh=0;aa=224}else Vh=255;else{Uh=Ah;aa=224}if((aa|0)==224){aa=0;Vh=Uh}Ah=jh&248|ph;ph=Ah+lh|0;if(ph>>>0>255)if((ph|0)<0){Wh=0;aa=227}else Xh=255;else{Wh=ph;aa=227}if((aa|0)==227){aa=0;Xh=Wh}ph=Th&255;lh=Vh&255;jh=Xh&255;uh=c[509600+(Eh<<4)+(vh<<2)>>2]|0;vh=uh+oh|0;if(vh>>>0>255)if((vh|0)<0){Yh=0;aa=230}else Zh=255;else{Yh=vh;aa=230}if((aa|0)==230){aa=0;Zh=Yh}vh=uh+wh|0;if(vh>>>0>255)if((vh|0)<0){_h=0;aa=233}else $h=255;else{_h=vh;aa=233}if((aa|0)==233){aa=0;$h=_h}vh=uh+Ah|0;if(vh>>>0>255)if((vh|0)<0){ai=0;aa=236}else bi=255;else{ai=vh;aa=236}if((aa|0)==236){aa=0;bi=ai}if((ph&255)>(Zh&255)){aa=238;break c}if((lh&255)>($h&255)){aa=240;break c}if((jh&255)>(bi&255)){aa=242;break c}jh=qh<<2;lh=e[x+jh>>1]|0;ph=e[x+(jh|2)>>1]|0;jh=d[Ve+(lh<<3)+4>>0]|0;vh=d[Pe+(ph*11|0)+9>>0]|0;Ah=d[Ve+(lh<<3)+1>>0]|0;lh=Ah<<3&248|Ah>>>2;Ah=lh+(c[509600+(jh<<4)+(d[Pe+(ph*11|0)+8>>0]<<2)>>2]|0)|0;if(Ah>>>0>255)if((Ah|0)<0){ci=0;aa=245}else di=255;else{ci=Ah;aa=245}if((aa|0)==245){aa=0;di=ci}Ah=(c[509600+(jh<<4)+(vh<<2)>>2]|0)+lh|0;if(Ah>>>0>255)if((Ah|0)<0){ei=0;aa=248}else fi=255;else{ei=Ah;aa=248}if((aa|0)==248){aa=0;fi=ei}if(di>>>0>fi>>>0){aa=250;break c}Ah=fi&255;lh=a[971275+(di&255)>>0]|0;vh=Th&255;if((di&255)<<24>>24==-1){jh=a[970176+vh>>0]|0;ph=a[970176+(Vh&255)>>0]|0;if(((ph|jh)&255)>=32){aa=253;break c}uh=(jh&255)<<10|(ph&255)<<5|d[970432+(Xh&255)>>0]<<1|32768;if(uh>>>0<65536)gi=uh;else{aa=255;break c}}else{uh=a[970432+vh>>0]|0;vh=a[970432+(Vh&255)>>0]|0;ph=a[971531+(Xh&255)>>0]|0;if(!(((vh|uh)&255)<16&((ph|lh)&255)<8)){aa=257;break c}jh=(uh&255)<<8|(lh&255)<<12|(vh&255)<<4|(ph&255)<<1;if(jh>>>0<65536)gi=jh;else{aa=259;break c}}jh=fi&255;ph=a[971924+jh>>0]|0;vh=Zh&255;if((jh+-239|0)>>>0<17){jh=a[970763+vh>>0]|0;lh=a[970763+($h&255)>>0]|0;uh=a[970763+(bi&255)>>0]|0;if(((lh|jh|uh)&255)>=32){aa=262;break c}wh=(jh&255)<<10|(lh&255)<<5|uh&255|32768;if(wh>>>0>=65536){aa=264;break c}hi=wh<<16|gi&65535}else{wh=a[971019+vh>>0]|0;vh=a[971019+($h&255)>>0]|0;uh=a[971019+(bi&255)>>0]|0;if(!((Ah&255)<239?((vh|wh|uh)&255)<16:0)){aa=267;break c}Ah=(wh&255)<<8|(ph&255)<<12|(vh&255)<<4|uh&255;if(Ah>>>0>=65536){aa=269;break c}hi=Ah<<16|gi&65535}c[ia+(qh<<2)>>2]=hi;fh=mg;gh=kh;hh=rh;ih=nh;break f;break}case 5:{nh=Z(se+ge|0,p)|0;rh=h+nh|0;kh=d[Pe+(Sf*11|0)+8>>0]|0;mg=d[Pe+(Sf*11|0)+9>>0]|0;qh=a[Te>>0]|0;Ah=a[Te+1>>0]|0;uh=a[Te+2>>0]|0;vh=d[Ve+(Rf<<3)+4>>0]|0;if((d[Pe+(Sf*11|0)+10>>0]|0)<3){ph=rh;wh=c[ph+4>>2]&-2147352577|2147352576;lh=rh;c[lh>>2]=c[ph>>2]&-128|64;c[lh+4>>2]=wh;a[A>>0]=qh;a[Fa>>0]=Ah;a[Ga>>0]=uh;a[Ha>>0]=-1;jb(G,A,vh);wh=c[G+(kh<<2)>>2]|0;lh=((wh>>>8&1)+(wh&1)+(wh>>>16&1)|0)>>>0>1;ph=c[G+(mg<<2)>>2]|0;jh=((ph>>>8&1)+(ph&1)+(ph>>>16&1)|0)>>>0>1;oh=wh>>>1&127;Eh=rh;Bh=c[Eh>>2]|0;mh=c[Eh+4>>2]|0;Eh=Tc(oh|0,0,7)|0;yh=B;zh=wh>>>9&127;xh=Tc(zh|0,0,21)|0;ii=B;ji=wh>>>17&127;wh=Tc(ji|0,0,35)|0;ki=B;li=Tc(lh&1|0,0,63)|0;mi=B;ni=ph>>>1&127;oi=Tc(ni|0,0,14)|0;pi=B;qi=ph>>>9&127;ri=Tc(qi|0,0,28)|0;si=B;ti=ph>>>17&127;ph=Tc(ti|0,0,42)|0;ui=Eh|Bh&127|xh|wh|oi|ri|ph|li;li=yh|mh&2147352576|ii|ki|pi|si|B|mi;mi=rh;c[mi>>2]=ui;c[mi+4>>2]=li;mi=Tc(ni|0,0,7)|0;ni=B;si=Tc(qi|0,0,21)|0;qi=B;pi=Tc(ti|0,0,35)|0;ti=B;ki=Tc(oh|0,0,14)|0;oh=B;ii=Tc(zh|0,0,28)|0;zh=B;mh=Tc(ji|0,0,42)|0;ji=ii|ki|mh|mi|si|pi;pi=zh|oh|B|ni|qi|ti;ti=ui;ui=li;li=jh&1;qi=jh&1;jh=lh&1;lh=0;ni=1;oh=0;zh=0;while(1){si=Pe+(Sf*11|0)+zh|0;mi=a[si>>0]|0;mh=(mi&3|0)==(kh|0)?oh:oh^15;do if(!zh){if(!(mh&8)){vi=qi;wi=lh;xi=mi;yi=ti;zi=ui;Ai=jh;Bi=li;Ci=3;Di=mh;Ei=oh;break}ki=Tc(li|0,0,63)|0;ii=ji|ti&127|ki;ki=pi|ui&2147352576|B;yh=rh;c[yh>>2]=ii;c[yh+4>>2]=ki;vi=jh|qi&-2;wi=lh;xi=a[si>>0]|0;yi=ii;zi=ki;Ai=li;Bi=jh;Ci=3;Di=0;Ei=15}else{vi=qi;wi=lh;xi=mi;yi=ti;zi=ui;Ai=jh;Bi=li;Ci=4;Di=mh;Ei=oh}while(0);mh=Tc(Di|0,0,ni|0)|0;mi=B|wi;si=Ci+ni|0;ki=xi&255;ii=Ei^15;yh=Tc(((ki>>>2&3|0)==(kh|0)?Ei:ii)|0,0,si|0)|0;ph=B;ri=Tc(((ki>>>4&3|0)==(kh|0)?Ei:ii)|0,0,si+4|0)|0;oi=B;wh=Tc(((ki>>>6|0)==(kh|0)?Ei:ii)|0,0,si+8|0)|0;ii=mh|vi|wh|yh|ri;ri=mi|B|ph|oi;zh=zh+1|0;if((zh|0)==4){Fi=Bi;Gi=ii;Hi=ri;break}else{ti=yi;ui=zi;li=Bi;qi=ii;jh=Ai;lh=ri;ni=si+12|0;oh=Ei}}oh=h+(nh+8)|0;c[oh>>2]=Gi;c[oh+4>>2]=Hi;if((Gi&1|0)!=(Fi|0)){aa=278;break c}}else{oh=vh<<5;ni=c[491608+(oh+(qh&255)<<2)>>2]|0;lh=(c[509088+(kh<<4)+(mg<<2)>>2]|0)*48|0;jh=c[491608+(oh+(Ah&255)<<2)>>2]|0;qi=c[491608+(oh+(uh&255)<<2)>>2]|0;oh=(c[jh+(lh<<2)>>2]|0)+(c[ni+(lh<<2)>>2]|0)+(c[qi+(lh<<2)>>2]|0)<<14;li=lh|1;ui=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|1;li=lh|2;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|2;li=ti>>>0>>0?ti:oh;oh=lh|3;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|3;oh=ti>>>0>>0?ti:ui;ui=lh|4;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|4;ui=ti>>>0

  • >>0?ti:li;li=lh|5;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|5;li=ti>>>0>>0?ti:oh;oh=lh|6;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|6;oh=ti>>>0>>0?ti:ui;ui=lh|7;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|7;ui=ti>>>0
  • >>0?ti:li;li=lh|8;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|8;li=ti>>>0>>0?ti:oh;oh=lh|9;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|9;oh=ti>>>0>>0?ti:ui;ui=lh|10;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|10;ui=ti>>>0
  • >>0?ti:li;li=lh|11;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|11;li=ti>>>0>>0?ti:oh;oh=lh|12;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|12;oh=ti>>>0>>0?ti:ui;ui=lh|13;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|13;ui=ti>>>0
  • >>0?ti:li;li=lh|14;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|14;li=ti>>>0>>0?ti:oh;oh=lh|15;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|15;oh=ti>>>0>>0?ti:ui;ui=lh+16|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|16;ui=ti>>>0
  • >>0?ti:li;li=lh+17|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|17;li=ti>>>0>>0?ti:oh;oh=lh+18|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|18;oh=ti>>>0>>0?ti:ui;ui=lh+19|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|19;ui=ti>>>0
  • >>0?ti:li;li=lh+20|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|20;li=ti>>>0>>0?ti:oh;oh=lh+21|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|21;oh=ti>>>0>>0?ti:ui;ui=lh+22|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|22;ui=ti>>>0
  • >>0?ti:li;li=lh+23|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|23;li=ti>>>0>>0?ti:oh;oh=lh+24|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|24;oh=ti>>>0>>0?ti:ui;ui=lh+25|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|25;ui=ti>>>0
  • >>0?ti:li;li=lh+26|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|26;li=ti>>>0>>0?ti:oh;oh=lh+27|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|27;oh=ti>>>0>>0?ti:ui;ui=lh+28|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|28;ui=ti>>>0
  • >>0?ti:li;li=lh+29|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|29;li=ti>>>0>>0?ti:oh;oh=lh+30|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|30;oh=ti>>>0>>0?ti:ui;ui=lh+31|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|31;ui=ti>>>0
  • >>0?ti:li;li=lh+32|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|32;li=ti>>>0>>0?ti:oh;oh=lh+33|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|33;oh=ti>>>0>>0?ti:ui;ui=lh+34|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|34;ui=ti>>>0
  • >>0?ti:li;li=lh+35|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|35;li=ti>>>0>>0?ti:oh;oh=lh+36|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|36;oh=ti>>>0>>0?ti:ui;ui=lh+37|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|37;ui=ti>>>0
  • >>0?ti:li;li=lh+38|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|38;li=ti>>>0>>0?ti:oh;oh=lh+39|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|39;oh=ti>>>0>>0?ti:ui;ui=lh+40|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|40;ui=ti>>>0
  • >>0?ti:li;li=lh+41|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|41;li=ti>>>0>>0?ti:oh;oh=lh+42|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|42;oh=ti>>>0>>0?ti:ui;ui=lh+43|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|43;ui=ti>>>0
  • >>0?ti:li;li=lh+44|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|44;li=ti>>>0>>0?ti:oh;oh=lh+45|0;ti=(c[jh+(oh<<2)>>2]|0)+(c[ni+(oh<<2)>>2]|0)+(c[qi+(oh<<2)>>2]|0)<<14|45;oh=ti>>>0>>0?ti:ui;ui=lh+46|0;ti=(c[jh+(ui<<2)>>2]|0)+(c[ni+(ui<<2)>>2]|0)+(c[qi+(ui<<2)>>2]|0)<<14|46;ui=ti>>>0
  • >>0?ti:li;li=lh+47|0;ti=(c[jh+(li<<2)>>2]|0)+(c[ni+(li<<2)>>2]|0)+(c[qi+(li<<2)>>2]|0)<<14|47;li=ti>>>0>>0?ti:oh;oh=(ui>>>0
  • >>0?ui:li)&255;li=rh;ui=c[li>>2]&-128|64;ti=c[li+4>>2]&-2147352577|2147352576;li=rh;c[li>>2]=ui;c[li+4>>2]=ti;li=oh+lh|0;lh=ni+(li<<2)|0;ni=(c[lh>>2]|0)>>>18&127;if(!(a[(d[Ff>>0]&3)+(960815+(oh<<2))>>0]&8)){zh=Tc(ni|0,0,7)|0;pi=zh|ui&-16320;zh=B|ti;ji=rh;c[ji>>2]=pi;c[ji+4>>2]=zh;ji=jh+(li<<2)|0;si=Tc((c[ji>>2]|0)>>>18|0,0,21)|0;ri=si&266338304|pi&-266338368;pi=rh;c[pi>>2]=ri;c[pi+4>>2]=zh;pi=qi+(li<<2)|0;Tc((c[pi>>2]|0)>>>18|0,0,35)|0;si=zh&-1017|B&1016;zh=rh;c[zh>>2]=ri;c[zh+4>>2]=si;zh=Tc((c[lh>>2]|0)>>>25|0,0,14)|0;ii=ri&-2080832|zh;zh=si|B;si=rh;c[si>>2]=ii;c[si+4>>2]=zh;si=Tc((c[ji>>2]|0)>>>25|0,0,28)|0;ji=ii&268435392|si;si=zh&-8|B;zh=rh;c[zh>>2]=ji;c[zh+4>>2]=si;zh=Tc((c[pi>>2]|0)>>>25|0,0,42)|0;pi=rh;c[pi>>2]=ji&-64|zh;c[pi+4>>2]=si&2147353599|B;si=h+(nh+8)|0;pi=si;zh=c[pi+4>>2]|0;ji=si;c[ji>>2]=c[pi>>2]|1;c[ji+4>>2]=zh;Ii=si;Ji=1;Ki=0;Li=960815}else{si=Tc(ni|0,0,14)|0;ni=si|ui&-2080832;ui=B|ti;ti=rh;c[ti>>2]=ni;c[ti+4>>2]=ui;ti=jh+(li<<2)|0;jh=Tc((c[ti>>2]|0)>>>18|0,0,28)|0;si=jh&-268435456|ni&268435392;ni=B&7|ui&-8;ui=rh;c[ui>>2]=si;c[ui+4>>2]=ni;ui=qi+(li<<2)|0;Tc((c[ui>>2]|0)>>>18|0,0,42)|0;li=ni&-130049|B&130048;ni=rh;c[ni>>2]=si;c[ni+4>>2]=li;ni=Tc((c[lh>>2]|0)>>>25|0,0,7)|0;lh=si&-16320|ni;ni=li|B;li=rh;c[li>>2]=lh;c[li+4>>2]=ni;li=Tc((c[ti>>2]|0)>>>25|0,0,21)|0;ti=lh&-266338368|li;li=ni|B;ni=rh;c[ni>>2]=ti;c[ni+4>>2]=li;ni=Tc((c[ui>>2]|0)>>>25|0,0,35)|0;ui=rh;c[ui>>2]=ni|ti&-64;c[ui+4>>2]=B|li&2147482631|-2147483648;li=h+(nh+8)|0;ui=li;ti=c[ui+4>>2]|0;ni=li;c[ni>>2]=c[ui>>2]&-2;c[ni+4>>2]=ti;Ii=li;Ji=0;Ki=0;Li=961007}li=d[Ff>>0]|0;ti=Tc(d[(li&3)+(Li+(oh<<2))>>0]|0,0,1)|0;ni=B;ui=d[Pe+(Sf*11|0)+1>>0]|0;lh=Tc(d[(ui&3)+(Li+(oh<<2))>>0]|0,0,16)|0;si=B;qi=d[Pe+(Sf*11|0)+2>>0]|0;jh=d[(qi&3)+(Li+(oh<<2))>>0]|0;zh=d[Pe+(Sf*11|0)+3>>0]|0;ji=Tc(d[(zh&3)+(Li+(oh<<2))>>0]|0,0,48)|0;pi=B;ii=Tc(d[(li>>>2&3)+(Li+(oh<<2))>>0]|0,0,4)|0;ri=B;oi=Tc(d[(ui>>>2&3)+(Li+(oh<<2))>>0]|0,0,20)|0;ph=B;mi=Tc(d[(qi>>>2&3)+(Li+(oh<<2))>>0]|0,0,36)|0;yh=B;wh=Tc(d[(zh>>>2&3)+(Li+(oh<<2))>>0]|0,0,52)|0;mh=B;ki=Tc(d[(li>>>4&3)+(Li+(oh<<2))>>0]|0,0,8)|0;xh=B;Bh=Tc(d[(ui>>>4&3)+(Li+(oh<<2))>>0]|0,0,24)|0;Eh=B;Mi=Tc(d[(qi>>>4&3)+(Li+(oh<<2))>>0]|0,0,40)|0;Ni=B;Oi=Tc(d[(zh>>>4&3)+(Li+(oh<<2))>>0]|0,0,56)|0;Pi=B;Qi=Tc(d[(li>>>6)+(Li+(oh<<2))>>0]|0,0,12)|0;li=B;Ri=Tc(d[(ui>>>6)+(Li+(oh<<2))>>0]|0,0,28)|0;ui=B;Si=Tc(d[(qi>>>6)+(Li+(oh<<2))>>0]|0,0,44)|0;qi=B;Ti=Tc(d[(zh>>>6)+(Li+(oh<<2))>>0]|0,0,60)|0;oh=Ii;c[oh>>2]=ti|Ji|lh|ji|ii|oi|mi|wh|ki|Bh|Mi|Oi|Qi|Ri|Si|Ti;c[oh+4>>2]=ni|Ki|si|jh|pi|ri|ph|yh|mh|xh|Eh|Ni|Pi|li|ui|qi|B}fh=oe;gh=ne;hh=me;ih=le;break f;break}case 6:{qi=Z(se+ge|0,p)|0;ui=h+qi|0;li=ui;c[li>>2]=32;c[li+4>>2]=-262144;li=h+(qi+8)|0;c[li>>2]=3;c[li+4>>2]=0;li=a[Pe+(Sf*11|0)+8>>0]|0;Pi=li&255;Ni=d[Pe+(Sf*11|0)+9>>0]|0;Eh=a[Te>>0]|0;xh=a[Te+1>>0]|0;mh=a[Te+2>>0]|0;yh=d[Ve+(Rf<<3)+4>>0]|0;switch(a[Pe+(Sf*11|0)+10>>0]|0){case 1:{if((li&255)>=4){aa=287;break c}li=Eh&255;ph=xh&255;ri=ph<<3|ph>>>2;ph=mh&255;pi=ph<<3|ph>>>2;ph=c[509600+(yh<<4)+(Pi<<2)>>2]|0;jh=ph+(li<<3|li>>>2)|0;if(jh>>>0>255)if((jh|0)<0){Ui=0;aa=290}else Vi=255;else{Ui=jh;aa=290}if((aa|0)==290){aa=0;Vi=Ui}jh=ph+ri|0;if(jh>>>0>255)if((jh|0)<0){Wi=0;aa=293}else Xi=255;else{Wi=jh;aa=293}if((aa|0)==293){aa=0;Xi=Wi}jh=ph+pi|0;if(jh>>>0>255)if((jh|0)<0){Yi=0;aa=296}else Zi=255;else{Yi=jh;aa=296}if((aa|0)==296){aa=0;Zi=Yi}jh=Tc(d[972232+(Vi<<1)+1>>0]|0,0,8)|0;pi=Tc(d[972232+(Xi<<1)+1>>0]|0,0,22)|0;Tc(d[972232+(Zi<<1)+1>>0]|0,0,36)|0;ph=B&2032;ri=Tc(d[972232+(Vi<<1)>>0]|0,0,15)|0;li=Tc(d[972232+(Xi<<1)>>0]|0,0,29)|0;si=B&15;ni=ui;c[ni>>2]=Tc(d[972232+(Zi<<1)>>0]|0,0,43)|0|(jh&32512|pi&532676608|ri&4161536|li&-536870912)|32;c[ni+4>>2]=ph|si|B|-262144;si=66;ph=31;ni=715827883;li=2147483647;while(1){ri=si&7;pi=8-ri|0;jh=pi>>>0>>0?pi:ph;pi=h+((si>>>3)+qi)|0;a[pi>>0]=d[pi>>0]&(li<>>jh;li=li>>>jh}}break}case 2:{a[A>>0]=Eh;a[Ia>>0]=xh;a[Ja>>0]=mh;a[Ka>>0]=-1;jb(G,A,yh);li=c[G+(Pi<<2)>>2]|0;ni=li>>>9&127;ph=li>>>17&127;si=c[G+(Ni<<2)>>2]|0;nh=si>>>9&127;rh=si>>>17&127;uh=li>>>1&127;li=ui;Ah=c[li>>2]|0;mg=c[li+4>>2]|0;li=Tc(uh|0,0,8)|0;kh=B;qh=Tc(ni|0,0,22)|0;vh=B;jh=Tc(ph|0,0,36)|0;ri=B;pi=si>>>1&127;si=Tc(pi|0,0,15)|0;oh=B;Ti=Tc(nh|0,0,29)|0;Si=B;Ri=Tc(rh|0,0,43)|0;Qi=li|Ah&255|qh|jh|si|Ti|Ri;Ri=kh|mg&-262144|vh|ri|oh|Si|B;Si=ui;c[Si>>2]=Qi;c[Si+4>>2]=Ri;Si=Tc(pi|0,0,8)|0;pi=B;oh=Tc(nh|0,0,22)|0;nh=B;ri=Tc(rh|0,0,36)|0;rh=B;vh=Tc(uh|0,0,15)|0;uh=B;mg=Tc(ni|0,0,29)|0;ni=B;kh=Tc(ph|0,0,43)|0;ph=mg|vh|kh|Si|oh|ri;ri=ni|uh|B|pi|nh|rh;rh=Qi;Qi=Ri;Ri=0;nh=0;pi=0;uh=0;while(1){ni=Pe+(Sf*11|0)+uh|0;oh=a[ni>>0]|0;Si=(oh&3|0)==(Pi|0)?pi:pi^3;do if(!uh){if(!(Si&2)){_i=oh;$i=rh;aj=Qi;bj=1;cj=Si;dj=pi;break}kh=ph|rh&255;vh=ri|Qi&-262144;mg=ui;c[mg>>2]=kh;c[mg+4>>2]=vh;_i=a[ni>>0]|0;$i=kh;aj=vh;bj=1;cj=0;dj=3}else{_i=oh;$i=rh;aj=Qi;bj=2;cj=Si;dj=pi}while(0);Si=bj+Ri|0;oh=_i&255;ni=dj^3;vh=cj<>>6|0)==(Pi|0)?dj:ni)<>>2&3|0)==(Pi|0)?dj:ni)<>>4&3|0)==(Pi|0)?dj:ni)<-1){fj=66;gj=31;hj=ej;ij=2147483647}else{aa=304;break c}while(1){pi=fj&7;nh=8-pi|0;Ri=nh>>>0>>0?nh:gj;nh=h+((fj>>>3)+qi)|0;a[nh>>0]=d[nh>>0]&(ij<>>Ri;ij=ij>>>Ri}}break}default:{Ri=yh<<5;pi=(c[509152+(Pi<<4)+(Ni<<2)>>2]|0)*10|0;nh=pi+((Ri+(Eh&255)|0)*60|0)|0;Qi=pi+((Ri+(xh&255)|0)*60|0)|0;rh=pi+((Ri+(mh&255)|0)*60|0)|0;Ri=(e[699168+(Qi<<2)+2>>1]|0)+(e[699168+(nh<<2)+2>>1]|0)+(e[699168+(rh<<2)+2>>1]|0)|0;pi=(e[699168+((Qi|1)<<2)+2>>1]|0)+(e[699168+((nh|1)<<2)+2>>1]|0)+(e[699168+((rh|1)<<2)+2>>1]|0)|0;uh=pi>>>0>>0;ri=uh?pi:Ri;Ri=(e[699168+(Qi+2<<2)+2>>1]|0)+(e[699168+(nh+2<<2)+2>>1]|0)+(e[699168+(rh+2<<2)+2>>1]|0)|0;pi=Ri>>>0>>0;ph=pi?Ri:ri;ri=(e[699168+(Qi+3<<2)+2>>1]|0)+(e[699168+(nh+3<<2)+2>>1]|0)+(e[699168+(rh+3<<2)+2>>1]|0)|0;Ri=ri>>>0>>0;vh=Ri?ri:ph;ph=(e[699168+(Qi+4<<2)+2>>1]|0)+(e[699168+(nh+4<<2)+2>>1]|0)+(e[699168+(rh+4<<2)+2>>1]|0)|0;ri=ph>>>0>>0;Si=ri?ph:vh;vh=(e[699168+(Qi+5<<2)+2>>1]|0)+(e[699168+(nh+5<<2)+2>>1]|0)+(e[699168+(rh+5<<2)+2>>1]|0)|0;ph=vh>>>0>>0;ni=ph?vh:Si;Si=(e[699168+(Qi+6<<2)+2>>1]|0)+(e[699168+(nh+6<<2)+2>>1]|0)+(e[699168+(rh+6<<2)+2>>1]|0)|0;vh=Si>>>0>>0;oh=vh?Si:ni;ni=(e[699168+(Qi+7<<2)+2>>1]|0)+(e[699168+(nh+7<<2)+2>>1]|0)+(e[699168+(rh+7<<2)+2>>1]|0)|0;Si=ni>>>0>>0;kh=Si?ni:oh;oh=(e[699168+(Qi+8<<2)+2>>1]|0)+(e[699168+(nh+8<<2)+2>>1]|0)+(e[699168+(rh+8<<2)+2>>1]|0)|0;ni=oh>>>0>>0;mg=((e[699168+(Qi+9<<2)+2>>1]|0)+(e[699168+(nh+9<<2)+2>>1]|0)+(e[699168+(rh+9<<2)+2>>1]|0)|0)>>>0<(ni?oh:kh)>>>0?9:ni?8:Si?7:vh?6:ph?5:ri?4:Ri?3:pi?2:uh&1;uh=mg+nh|0;nh=a[699168+(uh<<2)>>0]|0;if(!(a[(d[Ff>>0]&3)+(977669+(mg<<2))>>0]&2)){pi=ui;Ri=c[pi>>2]|0;ri=c[pi+4>>2]|0;pi=Tc(nh&255|0,0,8)|0;ph=mg+Qi|0;vh=Tc(d[699168+(ph<<2)>>0]|0,0,22)|0;Si=mg+rh|0;Tc(d[699168+(Si<<2)>>0]|0,0,36)|0;ni=ri&-2048|B&2032;ri=Tc(d[699168+(uh<<2)+1>>0]|0,0,15)|0;kh=Tc(d[699168+(ph<<2)+1>>0]|0,0,29)|0;ph=Ri&255|pi&32512|vh&532676608|ri&4161536|kh&-536870912;kh=ni|B&15;ni=ui;c[ni>>2]=ph;c[ni+4>>2]=kh;Tc(d[699168+(Si<<2)+1>>0]|0,0,43)|0;jj=ph;kj=kh&-260097|B&260096;lj=0}else{kh=ui;ph=c[kh>>2]|0;Si=c[kh+4>>2]|0;kh=Tc(d[699168+(uh<<2)+1>>0]|0,0,8)|0;uh=mg+Qi|0;Qi=Tc(d[699168+(uh<<2)+1>>0]|0,0,22)|0;ni=mg+rh|0;Tc(d[699168+(ni<<2)+1>>0]|0,0,36)|0;rh=B&2032;ri=Tc(nh&255|0,0,15)|0;nh=Tc(d[699168+(uh<<2)>>0]|0,0,29)|0;uh=ph&255|ri&4161536|kh&32512|Qi&532676608|nh&-536870912;nh=Si&-2048|rh|B&15;rh=ui;c[rh>>2]=uh;c[rh+4>>2]=nh;Tc(d[699168+(ni<<2)>>0]|0,0,43)|0;jj=uh;kj=nh&-260097|B&260096;lj=3}nh=ui;c[nh>>2]=jj;c[nh+4>>2]=kj;nh=0;uh=0;ni=0;while(1){rh=d[Pe+(Sf*11|0)+ni>>0]|0;Si=((ni|0)==0?1:2)+nh|0;Qi=(d[(rh>>>4&3)+(977669+(mg<<2))>>0]^lj)<>>2&3)+(977669+(mg<<2))>>0]^lj)<>0]^lj)<>>6)+(977669+(mg<<2))>>0]^lj)<>>0>=4){mj=Qi;break}else{nh=Si+6|0;uh=Qi}}if((mj|0)>-1){nj=66;oj=31;pj=mj;qj=2147483647}else{aa=311;break c}while(1){uh=nj&7;nh=8-uh|0;ni=nh>>>0>>0?nh:oj;nh=h+((nj>>>3)+qi)|0;a[nh>>0]=d[nh>>0]&(qj<>>ni;qj=qj>>>ni}}}}fh=oe;gh=ne;hh=me;ih=le;break f;break}case 7:{qi=Z(se+ge|0,p)|0;ni=h+qi|0;uh=a[Pe+(Sf*11|0)+8>>0]|0;nh=uh&255;mg=d[Pe+(Sf*11|0)+9>>0]|0;ui=d[Ve+(Rf<<3)+4>>0]|0;switch(a[Pe+(Sf*11|0)+10>>0]|0){case 1:{if((uh&255)>=4){aa=318;break c}uh=d[Te>>0]|0;mh=(uh<<3|uh>>>2)+(c[509600+(ui<<4)+(nh<<2)>>2]|0)|0;if(mh>>>0>255)if((mh|0)<0){rj=0;aa=321}else sj=255;else{rj=mh;aa=321}if((aa|0)==321){aa=0;sj=rj}mh=ni;uh=c[mh>>2]|0;xh=c[mh+4>>2]|0;Tc(sj|0,0,50)|0;mh=B;Eh=ni;c[Eh>>2]=Tc(sj|0,0,58)|0|uh;c[Eh+4>>2]=B|xh&262143|mh&66846720;mh=h+(qi+8)|0;xh=mh;Eh=c[xh+4>>2]|0;uh=mh;c[uh>>2]=c[xh>>2]&-4|sj>>>6&3;c[uh+4>>2]=Eh;break}case 2:{Eh=d[Te+1>>0]|0;uh=Eh<<3|Eh>>>2;Eh=uh+(c[509600+(ui<<4)>>2]|0)|0;if(Eh>>>0>255)if((Eh|0)<0){tj=0;aa=325}else uj=255;else{tj=Eh;aa=325}if((aa|0)==325){aa=0;uj=tj}c[J>>2]=uj;Eh=(c[509600+(ui<<4)+4>>2]|0)+uh|0;if(Eh>>>0>255)if((Eh|0)<0){vj=0;aa=328}else wj=255;else{vj=Eh;aa=328}if((aa|0)==328){aa=0;wj=vj}c[La>>2]=wj;Eh=(c[509600+(ui<<4)+8>>2]|0)+uh|0;if(Eh>>>0>255)if((Eh|0)<0){xj=0;aa=331}else yj=255;else{xj=Eh;aa=331}if((aa|0)==331){aa=0;yj=xj}c[Ma>>2]=yj;Eh=(c[509600+(ui<<4)+12>>2]|0)+uh|0;if(Eh>>>0>255)if((Eh|0)<0){zj=0;aa=334}else Aj=255;else{zj=Eh;aa=334}if((aa|0)==334){aa=0;Aj=zj}c[Na>>2]=Aj;Eh=c[J+(nh<<2)>>2]|0;uh=ni;xh=c[uh>>2]|0;mh=c[uh+4>>2]|0;Tc(Eh|0,0,50)|0;uh=B&66846720|mh&262143;mh=c[J+(mg<<2)>>2]|0;Ni=xh|(Tc(mh|0,0,58)|0);xh=uh|B;uh=ni;c[uh>>2]=Ni;c[uh+4>>2]=xh;uh=h+(qi+8)|0;Pi=uh;yh=c[Pi+4>>2]|0;Qi=mh>>>6&3|c[Pi>>2]&-4;Pi=uh;c[Pi>>2]=Qi;c[Pi+4>>2]=yh;Tc(mh|0,0,50)|0;mh=B&66846720;Pi=Tc(Eh|0,0,58)|0;Si=Eh>>>6&3;Eh=mh|B;mh=xh;xh=Ni;Ni=Qi;Qi=yh;yh=0;rh=0;kh=0;ri=0;while(1){ph=Pe+(Sf*11|0)+ri|0;vh=(d[ph>>0]&3|0)==(nh|0)?kh:kh^3;do if(!ri){if(!(vh&2)){Bj=Ni;Cj=Qi;Dj=xh;Ej=mh;Fj=1;Gj=vh;Hj=kh;break}pi=Pi|xh;Ri=Eh|mh&262143;oh=ni;c[oh>>2]=pi;c[oh+4>>2]=Ri;oh=Ni&-4|Si;Ti=uh;c[Ti>>2]=oh;c[Ti+4>>2]=Qi;Bj=oh;Cj=Qi;Dj=pi;Ej=Ri;Fj=1;Gj=0;Hj=3}else{Bj=Ni;Cj=Qi;Dj=xh;Ej=mh;Fj=2;Gj=vh;Hj=kh}while(0);vh=Fj+yh|0;Ri=d[ph>>0]|0;pi=Hj^3;oh=((Ri>>>6|0)==(nh|0)?Hj:pi)<>>4&3|0)==(nh|0)?Hj:pi)<>>2&3|0)==(nh|0)?Hj:pi)<>>0>=4){Ij=oh;break}else{mh=Ej;xh=Dj;Ni=Bj;Qi=Cj;yh=vh+6|0;rh=oh;kh=Hj}}if((Ij|0)>-1){Jj=97;Kj=31;Lj=Ij;Mj=2147483647}else{aa=340;break c}while(1){kh=Jj&7;rh=8-kh|0;yh=rh>>>0>>0?rh:Kj;rh=h+((Jj>>>3)+qi)|0;a[rh>>0]=d[rh>>0]&(Mj<>>yh;Mj=Mj>>>yh}}break}default:{yh=(c[509216+(nh<<4)+(mg<<2)>>2]|0)+(ui*192|0)+((d[Te>>0]|0)*6|0)|0;kh=a[972784+(yh*3|0)>>0]|0;rh=kh&255;Qi=ni;Ni=c[Qi>>2]|0;xh=c[Qi+4>>2]|0;Qi=Tc(rh|0,0,50)|0;mh=B;ri=a[972784+(yh*3|0)+1>>0]|0;uh=ri&255;Si=Tc(uh|0,0,58)|0;Eh=Ni|Qi|Si;Si=xh&262143|mh|B;mh=ni;c[mh>>2]=Eh;c[mh+4>>2]=Si;mh=h+(qi+8)|0;xh=mh;Qi=c[xh+4>>2]|0;Ni=(ri&255)>>>6|c[xh>>2]&-4;xh=mh;c[xh>>2]=Ni;c[xh+4>>2]=Qi;xh=d[972784+(yh*3|0)+2>>0]|0;yh=Tc(uh|0,0,50)|0;uh=B;ri=Tc(rh|0,0,58)|0;rh=(kh&255)>>>6;kh=yh|ri;ri=uh|B;uh=Si;Si=Eh;Eh=Ni;Ni=Qi;Qi=0;yh=0;Pi=xh;xh=0;while(1){oh=Pe+(Sf*11|0)+xh|0;vh=Pi>>>(d[oh>>0]<<1&6);pi=vh&3;do if(!xh){if(!(vh&2)){Nj=Eh;Oj=Ni;Pj=Si;Qj=uh;Rj=1;Sj=pi;Tj=Pi;break}Ri=kh|Si;Ti=ri|uh&262143;si=ni;c[si>>2]=Ri;c[si+4>>2]=Ti;si=Eh&-4|rh;jh=mh;c[jh>>2]=si;c[jh+4>>2]=Ni;Nj=si;Oj=Ni;Pj=Ri;Qj=Ti;Rj=1;Sj=pi^3;Tj=Pi^255}else{Nj=Eh;Oj=Ni;Pj=Si;Qj=uh;Rj=2;Sj=pi;Tj=Pi}while(0);pi=Rj+Qi|0;vh=d[oh>>0]|0;ph=(Tj>>>(vh>>>5&6)&3)<>>(vh>>>3&6)&3)<>>(vh>>>1&6)&3)<>>0>=4){Uj=ph;break}else{uh=Qj;Si=Pj;Eh=Nj;Ni=Oj;Qi=pi+6|0;yh=ph;Pi=Tj}}if((Uj|0)>-1){Vj=97;Wj=31;Xj=Uj;Yj=2147483647}else{aa=347;break c}while(1){Pi=Vj&7;yh=8-Pi|0;Qi=yh>>>0>>0?yh:Wj;yh=h+((Vj>>>3)+qi)|0;a[yh>>0]=d[yh>>0]&(Yj<>>Qi;Yj=Yj>>>Qi}}}}fh=oe;gh=ne;hh=me;ih=le;break f;break}case 8:{qi=Z(se+ge|0,p)|0;Qi=h+qi|0;Pi=a[Pe+(Sf*11|0)+8>>0]|0;yh=Pi&255;Ni=a[Pe+(Sf*11|0)+9>>0]|0;Eh=d[Ve+(Rf<<3)+4>>0]|0;if(Pi<<24>>24==Ni<<24>>24){if((Pi&255)>=4){aa=353;break c}Si=d[Te>>0]|0;uh=(Si<<3|Si>>>2)+(c[509600+(Eh<<4)+(yh<<2)>>2]|0)|0;if(uh>>>0>255)if((uh|0)<0){Zj=0;aa=356}else _j=255;else{Zj=uh;aa=356}if((aa|0)==356){aa=0;_j=Zj}b[Qi>>1]=_j&255|7424;uh=h+(qi+2)|0;a[uh>>0]=a[953632]|0;a[uh+1>>0]=a[953633]|0;a[uh+2>>0]=a[953634]|0;a[uh+3>>0]=a[953635]|0;a[uh+4>>0]=a[953636]|0;a[uh+5>>0]=a[953637]|0;fh=oe;gh=ne;hh=me;ih=le;break f}i:do switch(Pi<<24>>24){case 0:{if(Ni<<24>>24==3){$j=0;break i}if(Ni<<24>>24==2)$j=2;else aa=365;break}case 1:{if(Ni<<24>>24==3){$j=1;break i}if(Ni<<24>>24==2)$j=3;else aa=365;break}default:aa=365}while(0);if((aa|0)==365){aa=0;$j=4}Ni=$j>>>0>3?0:$j;Pi=(d[Te>>0]|0)+(Eh<<5)|0;uh=a[760608+(Pi<<4)+(Ni<<2)+1>>0]|0;b[Qi>>1]=(uh&255)<<12&65535|d[760608+(Pi<<4)+(Ni<<2)>>0]|((uh&255)>>>4&255)<<8&65535;uh=e[760608+(Pi<<4)+(Ni<<2)+2>>1]|0;Ni=0;Pi=0;yh=0;while(1){Si=d[Pe+(Sf*11|0)+yh>>0]|0;xh=Z(yh,-3)|0;mh=Tc(uh>>>((Si>>>4&3)*3|0)&7|0,0,xh+21|0)|0;rh=B;ni=Tc(uh>>>((Si>>>2&3)*3|0)&7|0,0,xh+33|0)|0;ri=B;kh=Tc(uh>>>((Si&3)*3|0)&7|0,0,xh+45|0)|0;ui=B|Pi;mg=Tc(uh>>>((Si>>>6)*3|0)&7|0,0,xh+9|0)|0;xh=kh|Ni|mg|ni|mh;mh=ui|B|ri|rh;yh=yh+1|0;if(yh>>>0>=4){ak=xh;bk=mh;break}else{Ni=xh;Pi=mh}}Pi=Sc(ak|0,bk|0,40)|0;a[h+(qi+2)>>0]=Pi;a[h+(qi+3)>>0]=bk;Pi=Sc(ak|0,bk|0,24)|0;a[h+(qi+4)>>0]=Pi;Pi=Sc(ak|0,bk|0,16)|0;a[h+(qi+5)>>0]=Pi;Pi=Sc(ak|0,bk|0,8)|0;a[h+(qi+6)>>0]=Pi;a[h+(qi+7)>>0]=ak;fh=oe;gh=ne;hh=me;ih=le;break f;break}case 9:{Pi=Z(se+ge|0,p)|0;Ni=h+Pi|0;a[Oa>>0]=0;a[Pa>>0]=0;do if(w){yh=e[h+(Pi+2)>>1]|0;uh=a[Pe+(yh*11|0)+10>>0]|0;Qi=uh&255;if(uh<<24>>24!=1){ck=255;dk=Qi;break}uh=e[Ni>>1]|0;Eh=d[Ve+(uh<<3)+4>>0]|0;mh=d[Ve+(uh<<3)+1>>0]|0;uh=mh<<3|mh>>>2;mh=uh+(c[509600+(Eh<<4)>>2]|0)|0;if(mh>>>0>255)if((mh|0)<0){ek=0;aa=370}else fk=255;else{ek=mh;aa=370}if((aa|0)==370){aa=0;fk=ek}c[J>>2]=fk;mh=(c[509600+(Eh<<4)+4>>2]|0)+uh|0;if(mh>>>0>255)if((mh|0)<0){gk=0;aa=373}else hk=255;else{gk=mh;aa=373}if((aa|0)==373){aa=0;hk=gk}c[La>>2]=hk;mh=(c[509600+(Eh<<4)+8>>2]|0)+uh|0;if(mh>>>0>255)if((mh|0)<0){ik=0;aa=376}else jk=255;else{ik=mh;aa=376}if((aa|0)==376){aa=0;jk=ik}c[Ma>>2]=jk;mh=(c[509600+(Eh<<4)+12>>2]|0)+uh|0;if(mh>>>0>255)if((mh|0)<0){kk=0;aa=379}else lk=255;else{kk=mh;aa=379}if((aa|0)==379){aa=0;lk=kk}c[Na>>2]=lk;ck=c[J+(d[Pe+(yh*11|0)+8>>0]<<2)>>2]|0;dk=Qi}else{ck=255;dk=1}while(0);qi=a[Ve+(Rf<<3)+4>>0]|0;Qi=qi&255;yh=Pe+(Sf*11|0)+8|0;mh=a[yh>>0]|0;uh=mh&255;Eh=Pe+(Sf*11|0)+9|0;xh=a[Eh>>0]|0;rh=xh&255;ri=Pe+(Sf*11|0)+10|0;ui=a[ri>>0]|0;j:do if((dk|0)==1&ui<<24>>24==1){if((mh&255)>=4){aa=383;break c}ni=d[Te>>0]|0;mg=d[Te+1>>0]|0;kh=mg<<3|mg>>>2;mg=d[Te+2>>0]|0;Si=mg<<3|mg>>>2;mg=c[509600+(Qi<<4)+(uh<<2)>>2]|0;nh=(ni<<3|ni>>>2)+mg|0;if(nh>>>0>255)if((nh|0)<0){mk=0;aa=386}else nk=255;else{mk=nh;aa=386}if((aa|0)==386){aa=0;nk=mk}nh=kh+mg|0;if(nh>>>0>255)if((nh|0)<0){ok=0;aa=389}else pk=255;else{ok=nh;aa=389}if((aa|0)==389){aa=0;pk=ok}nh=Si+mg|0;if(nh>>>0>255)if((nh|0)<0){qk=0;aa=392}else rk=255;else{qk=nh;aa=392}if((aa|0)==392){aa=0;rk=qk}a[Ni>>0]=-4;a[h+(Pi+1)>>0]=-3;a[h+(Pi+2)>>0]=-1;a[h+(Pi+3)>>0]=-1;c[h+(Pi+4)>>2]=-1;c[h+(Pi+8)>>2]=0;c[h+(Pi+12)>>2]=0;nh=nk<<8|nk;mg=64;Si=16;while(1){kh=mg&7;ni=8-kh|0;ph=(ni|0)<(Si|0)?ni:Si;ni=h+((mg>>3)+Pi)|0;a[ni>>0]=d[ni>>0]|nh<>>ph;mg=kh;Si=Si-ph|0}}Si=pk<<8|pk;mg=sk;nh=16;while(1){oh=mg&7;ph=8-oh|0;kh=(ph|0)<(nh|0)?ph:nh;ph=h+((mg>>3)+Pi)|0;a[ph>>0]=d[ph>>0]|Si<>>kh;mg=oh;nh=nh-kh|0}}nh=rk<<8|rk;mg=tk;Si=16;while(1){kh=mg&7;oh=8-kh|0;ph=(oh|0)<(Si|0)?oh:Si;oh=h+((mg>>3)+Pi)|0;a[oh>>0]=d[oh>>0]|nh<>>ph;mg=kh;Si=Si-ph|0}}Si=ck<<8|ck;mg=uk;nh=16;while(1){ph=mg&7;kh=8-ph|0;oh=(kh|0)<(nh|0)?kh:nh;kh=h+((mg>>3)+Pi)|0;a[kh>>0]=d[kh>>0]|Si<>>oh;mg=oh+mg|0;nh=nh-oh|0}}}else{if(dk>>>0<3&(ui&255)<3){jb(G,Te,Qi);nh=c[G+(uh<<2)>>2]|0;mg=nh&255;a[C>>0]=mg;Si=(nh&65535)>>>8;oh=Si&255;a[Qa>>0]=oh;ph=nh>>>16;kh=ph&255;a[Ra>>0]=kh;ni=c[G+(rh<<2)>>2]|0;pi=ni&255;a[Sa>>0]=pi;vh=(ni&65535)>>>8;Ti=vh&255;a[Ta>>0]=Ti;Ri=ni>>>16;si=Ri&255;a[Ua>>0]=si;if(((Ri&255)+(ni&255)+(vh&65535)|0)<((ph&255)+(nh&255)+(Si&65535)|0)){a[C>>0]=pi;a[Sa>>0]=mg;a[Qa>>0]=Ti;a[Ta>>0]=oh;a[Ra>>0]=si;a[Ua>>0]=kh;vk=pi;wk=1}else{vk=mg;wk=0}if(w){mg=e[Ni>>1]|0;pi=e[h+(Pi+2)>>1]|0;kh=d[Ve+(mg<<3)+4>>0]|0;si=d[Pe+(pi*11|0)+8>>0]|0;oh=d[Pe+(pi*11|0)+9>>0]|0;Ti=d[Ve+(mg<<3)+1>>0]|0;mg=Ti<<3|Ti>>>2;Ti=mg+(c[509600+(kh<<4)>>2]|0)|0;if(Ti>>>0>255)if((Ti|0)<0){xk=0;aa=407}else yk=255;else{xk=Ti;aa=407}if((aa|0)==407){aa=0;yk=xk}c[K>>2]=yk;Ti=(c[509600+(kh<<4)+4>>2]|0)+mg|0;if(Ti>>>0>255)if((Ti|0)<0){zk=0;aa=410}else Ak=255;else{zk=Ti;aa=410}if((aa|0)==410){aa=0;Ak=zk}c[Va>>2]=Ak;Ti=(c[509600+(kh<<4)+8>>2]|0)+mg|0;if(Ti>>>0>255)if((Ti|0)<0){Bk=0;aa=413}else Ck=255;else{Bk=Ti;aa=413}if((aa|0)==413){aa=0;Ck=Bk}c[Wa>>2]=Ck;Ti=(c[509600+(kh<<4)+12>>2]|0)+mg|0;if(Ti>>>0>255)if((Ti|0)<0){Dk=0;aa=416}else Ek=255;else{Dk=Ti;aa=416}if((aa|0)==416){aa=0;Ek=Dk}c[Xa>>2]=Ek;a[Ya>>0]=c[K+(si<<2)>>2];a[Za>>0]=c[K+(oh<<2)>>2];si=d[Pe+(pi*11|0)>>0]|0;a[_a>>0]=(si&3|0)==(oh|0)&1;a[$a>>0]=(si>>>2&3|0)==(oh|0)&1;a[ab>>0]=(si>>>4&3|0)==(oh|0)&1;a[bb>>0]=(si>>>6|0)==(oh|0)&1;si=d[Pe+(pi*11|0)+1>>0]|0;a[cb>>0]=(si&3|0)==(oh|0)&1;a[db>>0]=(si>>>2&3|0)==(oh|0)&1;a[eb>>0]=(si>>>4&3|0)==(oh|0)&1;a[fb>>0]=(si>>>6|0)==(oh|0)&1;si=d[Pe+(pi*11|0)+2>>0]|0;a[gb>>0]=(si&3|0)==(oh|0)&1;a[kb>>0]=(si>>>2&3|0)==(oh|0)&1;a[lb>>0]=(si>>>4&3|0)==(oh|0)&1;a[mb>>0]=(si>>>6|0)==(oh|0)&1;si=d[Pe+(pi*11|0)+3>>0]|0;a[nb>>0]=(si&3|0)==(oh|0)&1;a[ob>>0]=(si>>>2&3|0)==(oh|0)&1;a[pb>>0]=(si>>>4&3|0)==(oh|0)&1;Fk=(si>>>6|0)==(oh|0)&1}else{a[Ya>>0]=-1;a[Za>>0]=-1;a[_a>>0]=0;a[$a>>0]=0;a[ab>>0]=0;a[bb>>0]=0;a[cb>>0]=0;a[db>>0]=0;a[eb>>0]=0;a[fb>>0]=0;a[gb>>0]=0;a[kb>>0]=0;a[lb>>0]=0;a[mb>>0]=0;a[nb>>0]=0;a[ob>>0]=0;a[pb>>0]=0;Fk=0}a[qb>>0]=Fk;oh=d[Pe+(Sf*11|0)>>0]|0;si=wk^(oh&3|0)==(rh|0);a[wb>>0]=si&1;a[yb>>0]=(wk^(oh>>>2&3|0)==(rh|0))&1;a[zb>>0]=(wk^(oh>>>4&3|0)==(rh|0))&1;a[Ab>>0]=(wk^(oh>>>6|0)==(rh|0))&1;oh=d[Pe+(Sf*11|0)+1>>0]|0;a[Bb>>0]=(wk^(oh&3|0)==(rh|0))&1;a[Cb>>0]=(wk^(oh>>>2&3|0)==(rh|0))&1;a[Db>>0]=(wk^(oh>>>4&3|0)==(rh|0))&1;a[Eb>>0]=(wk^(oh>>>6|0)==(rh|0))&1;oh=d[Pe+(Sf*11|0)+2>>0]|0;a[Fb>>0]=(wk^(oh&3|0)==(rh|0))&1;a[Gb>>0]=(wk^(oh>>>2&3|0)==(rh|0))&1;a[Ib>>0]=(wk^(oh>>>4&3|0)==(rh|0))&1;a[Jb>>0]=(wk^(oh>>>6|0)==(rh|0))&1;oh=d[Pe+(Sf*11|0)+3>>0]|0;a[Kb>>0]=(wk^(oh&3|0)==(rh|0))&1;a[Nb>>0]=(wk^(oh>>>2&3|0)==(rh|0))&1;a[Ob>>0]=(wk^(oh>>>4&3|0)==(rh|0))&1;a[Pb>>0]=(wk^(oh>>>6|0)==(rh|0))&1;a[Ni>>0]=65;a[h+(Pi+1)>>0]=-124;a[h+(Pi+2)>>0]=1;oh=h+(Pi+3)|0;pi=oh;a[pi>>0]=0;a[pi+1>>0]=0;a[pi+2>>0]=0;a[pi+3>>0]=0;pi=oh+4|0;a[pi>>0]=0;a[pi+1>>0]=0;a[pi+2>>0]=0;a[pi+3>>0]=0;a[h+(Pi+11)>>0]=-64;c[h+(Pi+12)>>2]=0;pi=vk;oh=17;Ti=0;while(1){mg=pi&255;kh=oh;Si=8;while(1){nh=kh&7;ph=8-nh|0;vh=(ph|0)<(Si|0)?ph:Si;ph=h+((kh>>3)+Pi)|0;a[ph>>0]=d[ph>>0]|mg<>>vh;kh=nh;Si=Si-vh|0}}Si=Ti+1|0;if((Si|0)==8)break;pi=a[C+Si>>0]|0;oh=Gk;Ti=Si}Ti=h+(Pi+15)|0;a[Ti>>0]=d[Ti>>0]|(si&1)<<7;Ti=1;while(1){oh=127-Ti|0;pi=h+((oh>>>3)+Pi)|0;a[pi>>0]=d[pi>>0]|d[C+10+Ti>>0]<<(oh&7);Ti=Ti+1|0;if((Ti|0)==32)break j}}k:do if(w){Ti=e[Ni>>1]|0;si=Ve+(Ti<<3)|0;oh=e[h+(Pi+2)>>1]|0;pi=a[Ve+(Ti<<3)+4>>0]|0;Ti=pi&255;Si=a[Pe+(oh*11|0)+8>>0]|0;kh=Si&255;mg=a[Pe+(oh*11|0)+9>>0]|0;vh=mg&255;if(Si<<24>>24!=mg<<24>>24){do if((pi&255)>6){if(!(mg<<24>>24==3&(Si<<24>>24==0?(a[Pe+(oh*11|0)+10>>0]|0)==2:0)))break;jb(D,si,Ti);nh=d[vb>>0]|0;a[Ya>>0]=a[963794+(d[ub>>0]|0)>>0]|0;a[Za>>0]=a[963794+nh>>0]|0;nh=d[Pe+(oh*11|0)>>0]|0;a[_a>>0]=(nh&3|0)==(vh|0)?3:0;a[$a>>0]=(nh>>>2&3|0)==(vh|0)?3:0;a[ab>>0]=(nh>>>4&3|0)==(vh|0)?3:0;a[bb>>0]=(nh>>>6|0)==(vh|0)?3:0;nh=d[Pe+(oh*11|0)+1>>0]|0;a[cb>>0]=(nh&3|0)==(vh|0)?3:0;a[db>>0]=(nh>>>2&3|0)==(vh|0)?3:0;a[eb>>0]=(nh>>>4&3|0)==(vh|0)?3:0;a[fb>>0]=(nh>>>6|0)==(vh|0)?3:0;nh=d[Pe+(oh*11|0)+2>>0]|0;a[gb>>0]=(nh&3|0)==(vh|0)?3:0;a[kb>>0]=(nh>>>2&3|0)==(vh|0)?3:0;a[lb>>0]=(nh>>>4&3|0)==(vh|0)?3:0;a[mb>>0]=(nh>>>6|0)==(vh|0)?3:0;nh=d[Pe+(oh*11|0)+3>>0]|0;a[nb>>0]=(nh&3|0)==(vh|0)?3:0;a[ob>>0]=(nh>>>2&3|0)==(vh|0)?3:0;a[pb>>0]=(nh>>>4&3|0)==(vh|0)?3:0;a[qb>>0]=(nh>>>6|0)==(vh|0)?3:0;break k}while(0);Si=c[509280+(kh<<4)+(vh<<2)>>2]|0;mg=d[si+1>>0]|0;pi=d[961746+(mg*48|0)+(Ti*6|0)+Si>>0]|0;nh=pi+(Si*10|0)+((mg+(Ti<<5)|0)*60|0)|0;a[Ya>>0]=a[510752+(nh<<2)>>0]|0;a[Za>>0]=a[510752+(nh<<2)+1>>0]|0;nh=d[Pe+(oh*11|0)>>0]|0;a[_a>>0]=a[(nh&3)+(977669+(pi<<2))>>0]|0;a[$a>>0]=a[(nh>>>2&3)+(977669+(pi<<2))>>0]|0;a[ab>>0]=a[(nh>>>4&3)+(977669+(pi<<2))>>0]|0;a[bb>>0]=a[(nh>>>6)+(977669+(pi<<2))>>0]|0;nh=d[Pe+(oh*11|0)+1>>0]|0;a[cb>>0]=a[(nh&3)+(977669+(pi<<2))>>0]|0;a[db>>0]=a[(nh>>>2&3)+(977669+(pi<<2))>>0]|0;a[eb>>0]=a[(nh>>>4&3)+(977669+(pi<<2))>>0]|0;a[fb>>0]=a[(nh>>>6)+(977669+(pi<<2))>>0]|0;nh=d[Pe+(oh*11|0)+2>>0]|0;a[gb>>0]=a[(nh&3)+(977669+(pi<<2))>>0]|0;a[kb>>0]=a[(nh>>>2&3)+(977669+(pi<<2))>>0]|0;a[lb>>0]=a[(nh>>>4&3)+(977669+(pi<<2))>>0]|0;a[mb>>0]=a[(nh>>>6)+(977669+(pi<<2))>>0]|0;nh=d[Pe+(oh*11|0)+3>>0]|0;a[nb>>0]=a[(nh&3)+(977669+(pi<<2))>>0]|0;a[ob>>0]=a[(nh>>>2&3)+(977669+(pi<<2))>>0]|0;a[pb>>0]=a[(nh>>>4&3)+(977669+(pi<<2))>>0]|0;a[qb>>0]=a[(nh>>>6)+(977669+(pi<<2))>>0]|0;break}pi=d[si+1>>0]|0;nh=pi<<3|pi>>>2;pi=nh+(c[509600+(Ti<<4)>>2]|0)|0;if(pi>>>0>255)if((pi|0)<0){Hk=0;aa=428}else Ik=255;else{Hk=pi;aa=428}if((aa|0)==428){aa=0;Ik=Hk}c[H>>2]=Ik;pi=(c[509600+(Ti<<4)+4>>2]|0)+nh|0;if(pi>>>0>255)if((pi|0)<0){Jk=0;aa=431}else Kk=255;else{Jk=pi;aa=431}if((aa|0)==431){aa=0;Kk=Jk}c[rb>>2]=Kk;pi=(c[509600+(Ti<<4)+8>>2]|0)+nh|0;if(pi>>>0>255)if((pi|0)<0){Lk=0;aa=434}else Mk=255;else{Lk=pi;aa=434}if((aa|0)==434){aa=0;Mk=Lk}c[sb>>2]=Mk;pi=(c[509600+(Ti<<4)+12>>2]|0)+nh|0;if(pi>>>0>255)if((pi|0)<0){Nk=0;aa=437}else Ok=255;else{Nk=pi;aa=437}if((aa|0)==437){aa=0;Ok=Nk}c[tb>>2]=Ok;pi=c[H+(kh<<2)>>2]|0;a[Ya>>0]=a[963282+(pi<<1)>>0]|0;a[Za>>0]=a[963282+(pi<<1)+1>>0]|0;a[_a>>0]=1;a[$a>>0]=1;a[ab>>0]=1;a[bb>>0]=1;a[cb>>0]=1;a[db>>0]=1;a[eb>>0]=1;a[fb>>0]=1;a[gb>>0]=1;a[kb>>0]=1;a[lb>>0]=1;a[mb>>0]=1;a[nb>>0]=1;a[ob>>0]=1;a[pb>>0]=1;a[qb>>0]=1}else{a[Ya>>0]=1;a[Za>>0]=1;a[_a>>0]=0;a[$a>>0]=0;a[ab>>0]=0;a[bb>>0]=0;a[cb>>0]=0;a[db>>0]=0;a[eb>>0]=0;a[fb>>0]=0;a[gb>>0]=0;a[kb>>0]=0;a[lb>>0]=0;a[mb>>0]=0;a[nb>>0]=0;a[ob>>0]=0;a[pb>>0]=0;a[qb>>0]=0}while(0);l:do if(mh<<24>>24==xh<<24>>24){jb(E,Te,Qi);pi=c[E+(uh<<2)>>2]|0;nh=pi&255;mg=pi>>>8&255;Si=pi>>>16&255;pi=a[963282+(nh<<1)>>0]|0;a[C>>0]=pi;ph=a[963282+(nh<<1)+1>>0]|0;a[Sa>>0]=ph;nh=a[963282+(mg<<1)>>0]|0;a[Qa>>0]=nh;ni=a[963282+(mg<<1)+1>>0]|0;a[Ta>>0]=ni;mg=a[963282+(Si<<1)>>0]|0;a[Ra>>0]=mg;Ri=a[963282+(Si<<1)+1>>0]|0;a[Ua>>0]=Ri;if(((c[509344+((ni&255)<<2)>>2]|0)+(c[509344+((ph&255)<<2)>>2]|0)+(c[509344+((Ri&255)<<2)>>2]|0)|0)<((c[509344+((nh&255)<<2)>>2]|0)+(c[509344+((pi&255)<<2)>>2]|0)+(c[509344+((mg&255)<<2)>>2]|0)|0)){a[C>>0]=ph;a[Sa>>0]=pi;a[Qa>>0]=ni;a[Ta>>0]=nh;a[Ra>>0]=Ri;a[Ua>>0]=mg;Pk=2}else Pk=1;a[wb>>0]=Pk;a[yb>>0]=Pk;a[zb>>0]=Pk;a[Ab>>0]=Pk;a[Bb>>0]=Pk;a[Cb>>0]=Pk;a[Db>>0]=Pk;a[Eb>>0]=Pk;a[Fb>>0]=Pk;a[Gb>>0]=Pk;a[Ib>>0]=Pk;a[Jb>>0]=Pk;a[Kb>>0]=Pk;a[Nb>>0]=Pk;a[Ob>>0]=Pk;a[Pb>>0]=Pk}else{do if((qi&255)>6){if((a[ri>>0]|0)!=2)break;if(a[yh>>0]|0)break;if((a[Eh>>0]|0)!=3)break;jb(F,Te,Qi);mg=c[F>>2]|0;Ri=c[Qb>>2]|0;nh=a[963794+(mg&255)>>0]|0;a[C>>0]=nh;ni=a[963794+(Ri&255)>>0]|0;a[Sa>>0]=ni;pi=a[963794+(mg>>>8&255)>>0]|0;a[Qa>>0]=pi;ph=a[963794+(Ri>>>8&255)>>0]|0;a[Ta>>0]=ph;Si=a[963794+(mg>>>16&255)>>0]|0;a[Ra>>0]=Si;mg=a[963794+(Ri>>>16&255)>>0]|0;a[Ua>>0]=mg;if(((c[509344+((ph&255)<<2)>>2]|0)+(c[509344+((ni&255)<<2)>>2]|0)+(c[509344+((mg&255)<<2)>>2]|0)|0)<((c[509344+((pi&255)<<2)>>2]|0)+(c[509344+((nh&255)<<2)>>2]|0)+(c[509344+((Si&255)<<2)>>2]|0)|0)){a[C>>0]=ni;a[Sa>>0]=nh;a[Qa>>0]=ph;a[Ta>>0]=pi;a[Ra>>0]=mg;a[Ua>>0]=Si;Qk=1}else Qk=0;Si=0;while(1){mg=d[Pe+(Sf*11|0)+Si>>0]|0;pi=(mg&3|0)==(uh|0)?0:3;ph=Si<<3;a[C+10+ph>>0]=Qk?pi^3:pi;pi=(mg>>>2&3|0)==(uh|0)?0:3;a[(ph|2)+(C+10)>>0]=Qk?pi^3:pi;pi=(mg>>>4&3|0)==(uh|0)?0:3;a[(ph|4)+(C+10)>>0]=Qk?pi^3:pi;pi=(mg>>>6|0)==(uh|0)?0:3;a[(ph|6)+(C+10)>>0]=Qk?pi^3:pi;Si=Si+1|0;if(Si>>>0>=4)break l}}while(0);kh=Qi<<5;Ti=(c[509280+(uh<<4)+(rh<<2)>>2]|0)*10|0;si=(((d[Te>>0]|0)+kh|0)*60|0)+Ti|0;oh=(((d[Te+1>>0]|0)+kh|0)*60|0)+Ti|0;vh=(((d[Te+2>>0]|0)+kh|0)*60|0)+Ti|0;Ti=(e[510752+(oh<<2)+2>>1]|0)+(e[510752+(si<<2)+2>>1]|0)+(e[510752+(vh<<2)+2>>1]|0)|0;kh=(e[510752+((oh|1)<<2)+2>>1]|0)+(e[510752+((si|1)<<2)+2>>1]|0)+(e[510752+((vh|1)<<2)+2>>1]|0)|0;Si=kh>>>0>>0;pi=Si?kh:Ti;Ti=(e[510752+(oh+2<<2)+2>>1]|0)+(e[510752+(si+2<<2)+2>>1]|0)+(e[510752+(vh+2<<2)+2>>1]|0)|0;kh=Ti>>>0>>0;ph=kh?Ti:pi;pi=(e[510752+(oh+3<<2)+2>>1]|0)+(e[510752+(si+3<<2)+2>>1]|0)+(e[510752+(vh+3<<2)+2>>1]|0)|0;Ti=pi>>>0>>0;mg=Ti?pi:ph;ph=(e[510752+(oh+4<<2)+2>>1]|0)+(e[510752+(si+4<<2)+2>>1]|0)+(e[510752+(vh+4<<2)+2>>1]|0)|0;pi=ph>>>0>>0;nh=pi?ph:mg;mg=(e[510752+(oh+5<<2)+2>>1]|0)+(e[510752+(si+5<<2)+2>>1]|0)+(e[510752+(vh+5<<2)+2>>1]|0)|0;ph=mg>>>0>>0;ni=ph?mg:nh;nh=(e[510752+(oh+6<<2)+2>>1]|0)+(e[510752+(si+6<<2)+2>>1]|0)+(e[510752+(vh+6<<2)+2>>1]|0)|0;mg=nh>>>0>>0;Ri=mg?nh:ni;ni=(e[510752+(oh+7<<2)+2>>1]|0)+(e[510752+(si+7<<2)+2>>1]|0)+(e[510752+(vh+7<<2)+2>>1]|0)|0;nh=ni>>>0>>0;jh=nh?ni:Ri;Ri=(e[510752+(oh+8<<2)+2>>1]|0)+(e[510752+(si+8<<2)+2>>1]|0)+(e[510752+(vh+8<<2)+2>>1]|0)|0;ni=Ri>>>0>>0;qh=((e[510752+(oh+9<<2)+2>>1]|0)+(e[510752+(si+9<<2)+2>>1]|0)+(e[510752+(vh+9<<2)+2>>1]|0)|0)>>>0<(ni?Ri:jh)>>>0?9:ni?8:nh?7:mg?6:ph?5:pi?4:Ti?3:kh?2:Si&1;Si=qh+si|0;si=a[510752+(Si<<2)>>0]|0;a[C>>0]=si;kh=a[510752+(Si<<2)+1>>0]|0;a[Sa>>0]=kh;Si=qh+oh|0;oh=a[510752+(Si<<2)>>0]|0;a[Qa>>0]=oh;Ti=a[510752+(Si<<2)+1>>0]|0;a[Ta>>0]=Ti;Si=qh+vh|0;vh=a[510752+(Si<<2)>>0]|0;a[Ra>>0]=vh;pi=a[510752+(Si<<2)+1>>0]|0;a[Ua>>0]=pi;if(((c[509344+((Ti&255)<<2)>>2]|0)+(c[509344+((kh&255)<<2)>>2]|0)+(c[509344+((pi&255)<<2)>>2]|0)|0)<((c[509344+((oh&255)<<2)>>2]|0)+(c[509344+((si&255)<<2)>>2]|0)+(c[509344+((vh&255)<<2)>>2]|0)|0)){a[C>>0]=kh;a[Sa>>0]=si;a[Qa>>0]=Ti;a[Ta>>0]=oh;a[Ra>>0]=pi;a[Ua>>0]=vh;Rk=1}else Rk=0;vh=0;do{pi=d[Pe+(Sf*11|0)+vh>>0]|0;oh=d[(pi&3)+(977669+(qh<<2))>>0]|0;Ti=vh<<3;a[C+10+Ti>>0]=Rk?3-oh|0:oh;oh=d[(pi>>>2&3)+(977669+(qh<<2))>>0]|0;a[(Ti|2)+(C+10)>>0]=Rk?3-oh|0:oh;oh=d[(pi>>>4&3)+(977669+(qh<<2))>>0]|0;a[(Ti|4)+(C+10)>>0]=Rk?3-oh|0:oh;oh=d[(pi>>>6)+(977669+(qh<<2))>>0]|0;a[(Ti|6)+(C+10)>>0]=Rk?3-oh|0:oh;vh=vh+1|0}while(vh>>>0<4)}while(0);a[Ni>>0]=66;a[h+(Pi+1)>>0]=-124;a[h+(Pi+2)>>0]=1;vh=h+(Pi+3)|0;a[vh>>0]=0;a[vh+1>>0]=0;a[vh+2>>0]=0;a[vh+3>>0]=0;a[h+(Pi+7)>>0]=-64;c[h+(Pi+8)>>2]=0;c[h+(Pi+12)>>2]=0;c[A>>2]=17;Hb(Ni,C,A);Hb(Ni,Ua,A);vh=0;do{qh=126-(vh<<1)|0;oh=h+((qh>>>3)+Pi)|0;a[oh>>0]=d[oh>>0]|d[977392+(d[C+10+vh>>0]|0)>>0]<<(qh&6);vh=vh+1|0}while((vh|0)!=32)}while(0);fh=oe;gh=ne;hh=me;ih=le;break f;break}case 10:{Pi=Z(se+ge|0,p)|0;Ni=h+Pi|0;rh=a[Pe+(Sf*11|0)+8>>0]|0;uh=rh&255;Qi=a[Pe+(Sf*11|0)+9>>0]|0;Eh=Qi&255;yh=a[Ve+(Rf<<3)+4>>0]|0;ri=yh&255;m:do if(rh<<24>>24!=Qi<<24>>24){do if((yh&255)>6){if(!(Qi<<24>>24==3&(rh<<24>>24==0?(a[Pe+(Sf*11|0)+10>>0]|0)==2:0)))break;jb(G,Te,ri);qi=c[G>>2]|0;xh=a[966098+((qi&255)<<1)+1>>0]|0;mh=a[966098+((qi>>>8&255)<<1)+1>>0]|0;ui=a[966098+((qi>>>16&255)<<1)+1>>0]|0;if(((mh|xh|ui)&255)>=32){aa=482;break c}qi=d[Sb>>0]|0;vh=d[Tb>>0]|0;qh=d[Rb>>0]|0;oh=(mh&255)<<5;a[Ni>>0]=oh|ui&255;a[h+(Pi+1)>>0]=(oh|(xh&255)<<10)>>>8;xh=a[966098+(qh<<1)+1>>0]|0;qh=a[966610+(vh<<1)+1>>0]|0;vh=a[966098+(qi<<1)+1>>0]|0;if(!((qh&255)<64&((vh|xh)&255)<32)){aa=484;break c}qi=(qh&255)<<5;a[h+(Pi+2)>>0]=qi|vh&255;a[h+(Pi+3)>>0]=(qi|(xh&255)<<11)>>>8;a[h+(Pi+4)>>0]=a[Ff>>0]|0;a[h+(Pi+5)>>0]=a[Pe+(Sf*11|0)+1>>0]|0;a[h+(Pi+6)>>0]=a[Pe+(Sf*11|0)+2>>0]|0;a[h+(Pi+7)>>0]=a[Pe+(Sf*11|0)+3>>0]|0;break m}while(0);xh=ri<<5;qi=(c[509536+(uh<<4)+(Eh<<2)>>2]|0)*10|0;vh=(((d[Te>>0]|0)+xh|0)*60|0)+qi|0;qh=(((d[Te+1>>0]|0)+xh|0)*60|0)+qi|0;oh=(((d[Te+2>>0]|0)+xh|0)*60|0)+qi|0;qi=(e[826144+(qh<<2)+2>>1]|0)+(e[764704+(vh<<2)+2>>1]|0)+(e[764704+(oh<<2)+2>>1]|0)|0;xh=(e[826144+((qh|1)<<2)+2>>1]|0)+(e[764704+((vh|1)<<2)+2>>1]|0)+(e[764704+((oh|1)<<2)+2>>1]|0)|0;ui=xh>>>0>>0;mh=ui?xh:qi;qi=(e[826144+(qh+2<<2)+2>>1]|0)+(e[764704+(vh+2<<2)+2>>1]|0)+(e[764704+(oh+2<<2)+2>>1]|0)|0;xh=qi>>>0>>0;Ti=xh?qi:mh;mh=(e[826144+(qh+3<<2)+2>>1]|0)+(e[764704+(vh+3<<2)+2>>1]|0)+(e[764704+(oh+3<<2)+2>>1]|0)|0;qi=mh>>>0>>0;pi=qi?mh:Ti;Ti=(e[826144+(qh+4<<2)+2>>1]|0)+(e[764704+(vh+4<<2)+2>>1]|0)+(e[764704+(oh+4<<2)+2>>1]|0)|0;mh=Ti>>>0>>0;si=mh?Ti:pi;pi=(e[826144+(qh+5<<2)+2>>1]|0)+(e[764704+(vh+5<<2)+2>>1]|0)+(e[764704+(oh+5<<2)+2>>1]|0)|0;Ti=pi>>>0>>0;kh=Ti?pi:si;si=(e[826144+(qh+6<<2)+2>>1]|0)+(e[764704+(vh+6<<2)+2>>1]|0)+(e[764704+(oh+6<<2)+2>>1]|0)|0;pi=si>>>0>>0;Si=pi?si:kh;kh=(e[826144+(qh+7<<2)+2>>1]|0)+(e[764704+(vh+7<<2)+2>>1]|0)+(e[764704+(oh+7<<2)+2>>1]|0)|0;si=kh>>>0>>0;ph=si?kh:Si;Si=(e[826144+(qh+8<<2)+2>>1]|0)+(e[764704+(vh+8<<2)+2>>1]|0)+(e[764704+(oh+8<<2)+2>>1]|0)|0;kh=Si>>>0>>0;mg=((e[826144+(qh+9<<2)+2>>1]|0)+(e[764704+(vh+9<<2)+2>>1]|0)+(e[764704+(oh+9<<2)+2>>1]|0)|0)>>>0<(kh?Si:ph)>>>0?9:kh?8:si?7:pi?6:Ti?5:mh?4:qi?3:xh?2:ui&1;ui=mg+vh|0;vh=a[764704+(ui<<2)>>0]|0;xh=mg+qh|0;qh=a[826144+(xh<<2)>>0]|0;qi=mg+oh|0;oh=a[764704+(qi<<2)>>0]|0;if(((qh|vh|oh)&255)>=32){aa=487;break c}mh=(qh&255)<<5;a[Ni>>0]=mh|oh&255;a[h+(Pi+1)>>0]=(mh|(vh&255)<<10)>>>8;vh=a[764704+(ui<<2)+1>>0]|0;ui=a[826144+(xh<<2)+1>>0]|0;xh=a[764704+(qi<<2)+1>>0]|0;if(!((ui&255)<64&((xh|vh)&255)<32)){aa=489;break c}qi=(ui&255)<<5;a[h+(Pi+2)>>0]=qi|xh&255;a[h+(Pi+3)>>0]=(qi|(vh&255)<<11)>>>8;vh=a[Ff>>0]|0;if((mg|0)==6){a[h+(Pi+4)>>0]=vh;a[h+(Pi+5)>>0]=a[Pe+(Sf*11|0)+1>>0]|0;a[h+(Pi+6)>>0]=a[Pe+(Sf*11|0)+2>>0]|0;a[h+(Pi+7)>>0]=a[Pe+(Sf*11|0)+3>>0]|0;break}else{qi=vh&255;vh=d[Pe+(Sf*11|0)+1>>0]|0;xh=d[Pe+(Sf*11|0)+2>>0]|0;ui=d[Pe+(Sf*11|0)+3>>0]|0;mh=d[(vh>>>2&3)+(977669+(mg<<2))>>0]<<2|d[(vh&3)+(977669+(mg<<2))>>0]|d[(vh>>>4&3)+(977669+(mg<<2))>>0]<<4|d[(vh>>>6)+(977669+(mg<<2))>>0]<<6;vh=d[(xh>>>2&3)+(977669+(mg<<2))>>0]<<2|d[(xh&3)+(977669+(mg<<2))>>0]|d[(xh>>>4&3)+(977669+(mg<<2))>>0]<<4|d[(xh>>>6)+(977669+(mg<<2))>>0]<<6;xh=d[(ui>>>2&3)+(977669+(mg<<2))>>0]<<2|d[(ui&3)+(977669+(mg<<2))>>0]|d[(ui>>>4&3)+(977669+(mg<<2))>>0]<<4|d[(ui>>>6)+(977669+(mg<<2))>>0]<<6;a[h+(Pi+4)>>0]=d[(qi>>>2&3)+(977669+(mg<<2))>>0]<<2|d[(qi&3)+(977669+(mg<<2))>>0]|d[(qi>>>4&3)+(977669+(mg<<2))>>0]<<4|d[(qi>>>6)+(977669+(mg<<2))>>0]<<6;a[h+(Pi+5)>>0]=mh;a[h+(Pi+6)>>0]=vh;a[h+(Pi+7)>>0]=xh;break}}else{if((rh&255)>=4){aa=464;break c}xh=d[Te>>0]|0;vh=d[Te+1>>0]|0;mh=vh<<3|vh>>>2;vh=d[Te+2>>0]|0;mg=vh<<3|vh>>>2;vh=c[509600+(ri<<4)+(uh<<2)>>2]|0;qi=(xh<<3|xh>>>2)+vh|0;if(qi>>>0>255)if((qi|0)<0){Sk=0;aa=467}else Tk=255;else{Sk=qi;aa=467}if((aa|0)==467){aa=0;Tk=Sk}qi=mh+vh|0;if(qi>>>0>255)if((qi|0)<0){Uk=0;aa=470}else Vk=255;else{Uk=qi;aa=470}if((aa|0)==470){aa=0;Vk=Uk}qi=mg+vh|0;if(qi>>>0>255)if((qi|0)<0){Wk=0;aa=473}else Xk=255;else{Wk=qi;aa=473}if((aa|0)==473){aa=0;Xk=Wk}qi=a[964562+(Tk<<1)>>0]|0;vh=a[965074+(Vk<<1)>>0]|0;mg=a[964562+(Xk<<1)>>0]|0;if(((vh|qi|mg)&255)>=32){aa=475;break c}mh=(vh&255)<<5;a[Ni>>0]=mh|mg&255;a[h+(Pi+1)>>0]=(mh|(qi&255)<<10)>>>8;qi=a[964562+(Tk<<1)+1>>0]|0;mh=a[965074+(Vk<<1)+1>>0]|0;mg=a[964562+(Xk<<1)+1>>0]|0;if(!((mh&255)<64&((mg|qi)&255)<32)){aa=477;break c}vh=(mh&255)<<5;a[h+(Pi+2)>>0]=vh|mg&255;a[h+(Pi+3)>>0]=(vh|(qi&255)<<11)>>>8;qi=h+(Pi+4)|0;a[qi>>0]=85;a[qi+1>>0]=85;a[qi+2>>0]=85;a[qi+3>>0]=85}while(0);fh=oe;gh=ne;hh=me;ih=le;break f;break}case 12:{Pi=Z((se>>>1)+ge|0,p)|0;hb(A,Te,Ff,0);Ni=d[A>>0]|0;uh=a[Ub>>0]|0;ri=d[Vb>>0]|0;rh=a[Wb>>0]|0;Eh=((uh&255)<<8|Ni)>>>5;Qi=(uh&255)>>>3;uh=((rh&255)<<8|ri)>>>5;yh=(rh&255)>>>3;rh=Eh&1;qi=uh&1;vh=(Eh&62)>>>1;Eh=(uh&62)>>>1;uh=d[Xb>>0]|0;mg=d[977775+(uh&15)>>0]|0;mh=d[977775+(uh>>>4)>>0]<<4|mg;uh=mh&255;a[Xb>>0]=uh;xh=d[Yb>>0]|0;ui=d[977775+(xh>>>4)>>0]<<4|d[977775+(xh&15)>>0];xh=ui&255;a[Yb>>0]=xh;oh=d[Zb>>0]|0;qh=d[977775+(oh>>>4)>>0]<<4|d[977775+(oh&15)>>0];oh=qh&255;a[Zb>>0]=oh;Ti=d[_b>>0]|0;pi=d[977775+(Ti>>>4)>>0]<<4|d[977775+(Ti&15)>>0];Ti=pi&255;a[_b>>0]=Ti;if((mg>>>1&1|0)==(qi^rh|0)){Yk=Ni;Zk=ri;_k=qi;$k=Qi;al=vh;bl=yh;cl=Eh;dl=uh;el=xh;fl=oh;gl=Ti}else{Ti=(mh^255)&255;a[Xb>>0]=Ti;mh=(ui^255)&255;a[Yb>>0]=mh;ui=(qh^255)&255;a[Zb>>0]=ui;qh=(pi^255)&255;a[_b>>0]=qh;Yk=ri;Zk=Ni;_k=rh;$k=yh;al=Eh;bl=Qi;cl=vh;dl=Ti;el=mh;fl=ui;gl=qh}qh=h+(Pi+8)|0;ui=qh;mh=c[ui>>2]|0;Ti=c[ui+4>>2]|0;if(Ae){ui=Tc(_k<<1|_k|0,0,61)|0;vh=B;Qi=$k&255;Eh=Tc(Qi|0,0,10)|0;yh=B;rh=al&255;Ni=Tc(rh|0,0,5)|0;ri=Yk&31;pi=bl&255;oh=Tc(pi|0,0,25)|0;xh=B;uh=cl&255;qi=Tc(uh|0,0,20)|0;mg=Zk&31;si=Tc(mg|0,0,15)|0;kh=B;ph=Tc(Qi|0,0,40)|0;Qi=B;Tc(rh|0,0,35)|0;rh=B&248;Si=Tc(ri|0,0,30)|0;nh=B;ni=Tc(pi|0,0,55)|0;pi=B;Tc(uh|0,0,50)|0;uh=B&8126464;jh=Tc(mg|0,0,45)|0;mg=qh;c[mg>>2]=ri|Si|Eh|Ni&992|ph|si|jh|oh|qi&32505856|ni|ui;c[mg+4>>2]=nh|yh|Qi|rh|kh|B|xh|pi|uh|vh|-2147483648;a[h+Pi>>0]=dl;a[h+(Pi+1)>>0]=el;a[h+(Pi+2)>>0]=fl;a[h+(Pi+3)>>0]=gl;a[h+(Pi+4)>>0]=a[977771+((dl&255)>>>6)>>0]|0;a[h+(Pi+5)>>0]=a[977771+((el&255)>>>6)>>0]|0;a[h+(Pi+6)>>0]=a[977771+((fl&255)>>>6)>>0]|0;hl=a[977771+((gl&255)>>>6)>>0]|0}else{vh=Sc(mh|0,Ti|0,61)|0;Tc(vh&1|_k<<1|0,0,61)|0;vh=B&1610612736;uh=Tc($k&255|0,0,40)|0;pi=B;Tc(al&255|0,0,35)|0;xh=B&248;kh=Tc(Yk|0,0,30)|0;rh=B;Qi=Tc(bl&255|0,0,55)|0;yh=B;Tc(cl&255|0,0,50)|0;nh=B&8126464;Tc(Zk|0,0,45)|0;mg=qh;c[mg>>2]=uh|kh&-1073741824|Qi|mh&1073741823;c[mg+4>>2]=pi|rh&7|xh|B&253952|yh|nh|Ti&-1879048192|vh;a[h+(Pi+4)>>0]=dl;a[h+(Pi+5)>>0]=el;a[h+(Pi+6)>>0]=fl;hl=gl}a[h+(Pi+7)>>0]=hl;fh=oe;gh=ne;hh=me;ih=le;break f;break}case 22:{ib(h+(Z(se+ge|0,p)|0)|0,Te,Ff);fh=oe;gh=ne;hh=me;ih=le;break f;break}case 23:{if(!w){aa=502;break c}Pi=Z(se+ge|0,p)|0;vh=h+Pi|0;Ti=e[vh>>1]|0;nh=h+(Pi+2)|0;yh=e[nh>>1]|0;xh=h+(Pi+4)|0;c[xh>>2]=c[xh>>2]&2147450878|32768;rh=a[Pe+(yh*11|0)+10>>0]|0;pi=d[Ve+(Ti<<3)+4>>0]|0;mg=d[Ve+(Ti<<3)+1>>0]|0;Ti=mg<<3|mg>>>2;mg=Ti+(c[509600+(pi<<4)>>2]|0)|0;if(mg>>>0>255)if((mg|0)<0){il=0;aa=505}else jl=255;else{il=mg;aa=505}if((aa|0)==505){aa=0;jl=il}c[J>>2]=jl;mg=(c[509600+(pi<<4)+4>>2]|0)+Ti|0;if(mg>>>0>255)if((mg|0)<0){kl=0;aa=508}else ll=255;else{kl=mg;aa=508}if((aa|0)==508){aa=0;ll=kl}c[La>>2]=ll;mg=(c[509600+(pi<<4)+8>>2]|0)+Ti|0;if(mg>>>0>255)if((mg|0)<0){ml=0;aa=511}else nl=255;else{ml=mg;aa=511}if((aa|0)==511){aa=0;nl=ml}c[Ma>>2]=nl;mg=(c[509600+(pi<<4)+12>>2]|0)+Ti|0;if(mg>>>0>255)if((mg|0)<0){ol=0;aa=514}else pl=255;else{ol=mg;aa=514}if((aa|0)==514){aa=0;pl=ol}c[Na>>2]=pl;mg=Pe+(yh*11|0)+8|0;Ti=d[mg>>0]|0;pi=c[J+(Ti<<2)>>2]|0;n:do if(rh<<24>>24==1)aa=519;else{mh=d[Pe+(yh*11|0)+9>>0]|0;Qi=Ti;while(1){Qi=Qi+1|0;if(Qi>>>0>mh>>>0){aa=519;break n}if((pi|0)!=(c[J+(Qi<<2)>>2]|0)){ql=-1;aa=521;break}}}while(0);do if((aa|0)==519){aa=0;if((pi|0)<=249){ql=pi;aa=521;break}ib(vh,Te,Ff)}while(0);o:do if((aa|0)==521){aa=0;pi=a[Pe+(Sf*11|0)+8>>0]|0;Ti=a[Pe+(Sf*11|0)+10>>0]|0;rh=d[Te>>0]|0;Qi=Te+1|0;mh=d[Qi>>0]|0;kh=Te+2|0;uh=d[kh>>0]|0;qh=d[Ve+(Rf<<3)+4>>0]|0;ui=pi&255;ni=d[Pe+(Sf*11|0)+9>>0]|0;qi=rh<<3|rh>>>2;rh=mh<<3|mh>>>2;mh=uh<<3|uh>>>2;uh=c[509600+(qh<<4)>>2]|0;oh=uh+qi|0;jh=rh+uh|0;si=mh+uh|0;a[G>>0]=oh>>>0>255?oh>>31^255:oh;a[$b>>0]=jh>>>0>255?jh>>31^255:jh;a[ac>>0]=si>>>0>255?si>>31^255:si;si=jl>>>0>255?jl>>31^255:jl;a[cc>>0]=si;jh=c[509600+(qh<<4)+4>>2]|0;oh=jh+qi|0;uh=jh+rh|0;ph=mh+jh|0;jh=oh>>>0>255?oh>>31^255:oh;a[dc>>0]=jh;oh=uh>>>0>255?uh>>31^255:uh;a[ec>>0]=oh;uh=ph>>>0>255?ph>>31^255:ph;a[fc>>0]=uh;ph=ll>>>0>255?ll>>31^255:ll;a[gc>>0]=ph;Ni=c[509600+(qh<<4)+8>>2]|0;Eh=Ni+qi|0;Si=Ni+rh|0;ri=Ni+mh|0;Ni=Eh>>>0>255?Eh>>31^255:Eh;a[hc>>0]=Ni;Eh=Si>>>0>255?Si>>31^255:Si;a[ic>>0]=Eh;Si=ri>>>0>255?ri>>31^255:ri;a[jc>>0]=Si;ri=nl>>>0>255?nl>>31^255:nl;a[kc>>0]=ri;Ri=c[509600+(qh<<4)+12>>2]|0;Ah=Ri+qi|0;qi=Ri+rh|0;rh=Ri+mh|0;mh=c[Na>>2]|0;Ri=Ah>>>0>255?Ah>>31^255:Ah;a[lc>>0]=Ri;Ah=qi>>>0>255?qi>>31^255:qi;a[mc>>0]=Ah;qi=rh>>>0>255?rh>>31^255:rh;a[nc>>0]=qi;rh=mh>>>0>255?mh>>31^255:mh;a[oc>>0]=rh;p:do if((Ti&255)>1){mh=G+(ui<<2)|0;li=ui;while(1){li=li+1|0;if(li>>>0>ni>>>0){aa=527;break p}Oi=c[mh>>2]|0;Mi=Oi&255;Bh=c[G+(li<<2)>>2]|0;ki=Oi>>>16;wh=ki&255;mi=Oi&65535;if(Mi<<24>>24!=(Bh&255)<<24>>24){rl=Oi;sl=Mi;tl=ki;ul=wh;vl=mi;aa=525;break}oi=(mi&65535)>>>8;if(!(wh<<24>>24==(Bh>>>16&255)<<24>>24?(oi&255)<<24>>24==((Bh&65535)>>>8&255)<<24>>24:0)){wl=oi;xl=Oi;yl=ki;zl=Mi;Al=wh;break}}if((aa|0)==525){aa=0;wl=(vl&65535)>>>8;xl=rl;yl=tl;zl=sl;Al=ul}if((ql|0)>-1){Bl=+(ql|0)*.003921568859368563;li=(g[k>>2]=+(xl&255|0)*.003921568859368563,c[k>>2]|0);mh=(g[k>>2]=+(wl&65535|0)*.003921568859368563,c[k>>2]|0);wh=(g[k>>2]=+(yl&255|0)*.003921568859368563,c[k>>2]|0);Mi=c[G+(ni<<2)>>2]|0;ki=(g[k>>2]=+(Mi&255|0)*.003921568859368563,c[k>>2]|0);Oi=(g[k>>2]=+(Mi>>>8&255|0)*.003921568859368563,c[k>>2]|0);Cl=li;Dl=mh;El=wh;Fl=Bl;Gl=ki;Hl=Oi;Il=(g[k>>2]=+(Mi>>>16&255|0)*.003921568859368563,c[k>>2]|0);Jl=Bl;break}do if(zl<<24>>24){Mi=G+(ni<<2)|0;Oi=c[Mi>>2]|0;ki=Oi>>>16;wh=(e[Mi>>1]|0)>>>8&65535;if((ki&255)<<24>>24==-1|(Al<<24>>24==0|((Oi&65280|0)==65280|(wl<<16>>16==0|(Oi&255)<<24>>24==-1))))break;Mi=a[G+(d[mg>>0]<<2)+3>>0]|0;if(!(Mi<<24>>24))break;mh=a[G+(d[Pe+(yh*11|0)+9>>0]<<2)+3>>0]|0;if(mh<<24>>24==-1)break;li=c[G>>2]|0;c[K>>2]=(li>>>8&255)+(li&255)+(li>>>16&255);c[H>>2]=(li>>>24)*3;c[Va>>2]=(oh&255)+(jh&255)+(uh&255);c[rb>>2]=(ph&255)*3;c[Wa>>2]=(Eh&255)+(Ni&255)+(Si&255);c[sb>>2]=(ri&255)*3;c[Xa>>2]=(Ah&255)+(Ri&255)+(qi&255);c[tb>>2]=(rh&255)*3;li=-2147483648;oi=2147483647;Bh=-2147483648;mi=2147483647;ii=0;while(1){ji=d[Pe+(Sf*11|0)+ii>>0]|0;lh=d[Pe+(yh*11|0)+ii>>0]|0;ti=c[K+((ji&3)<<2)>>2]|0;zh=c[H+((lh&3)<<2)>>2]|0;Kl=zh+ti|0;Ll=(oi|0)<(Kl|0)?oi:Kl;Ml=(li|0)>(Kl|0)?li:Kl;Kl=ti-zh|0;zh=(mi|0)<(Kl|0)?mi:Kl;ti=(Bh|0)>(Kl|0)?Bh:Kl;Kl=c[K+((ji>>>2&3)<<2)>>2]|0;Nl=c[H+((lh>>>2&3)<<2)>>2]|0;Ol=Nl+Kl|0;Pl=(Ll|0)<(Ol|0)?Ll:Ol;Ll=(Ml|0)>(Ol|0)?Ml:Ol;Ol=Kl-Nl|0;Nl=(zh|0)<(Ol|0)?zh:Ol;zh=(ti|0)>(Ol|0)?ti:Ol;Ol=c[K+((ji>>>4&3)<<2)>>2]|0;ti=c[H+((lh>>>4&3)<<2)>>2]|0;Kl=ti+Ol|0;Ml=(Pl|0)<(Kl|0)?Pl:Kl;Pl=(Ll|0)>(Kl|0)?Ll:Kl;Kl=Ol-ti|0;ti=(Nl|0)<(Kl|0)?Nl:Kl;Nl=(zh|0)>(Kl|0)?zh:Kl;Kl=c[K+(ji>>>6<<2)>>2]|0;ji=c[H+(lh>>>6<<2)>>2]|0;lh=ji+Kl|0;zh=(Ml|0)<(lh|0)?Ml:lh;Ml=(Pl|0)>(lh|0)?Pl:lh;lh=Kl-ji|0;ji=(ti|0)<(lh|0)?ti:lh;ti=(Nl|0)>(lh|0)?Nl:lh;ii=ii+1|0;if((ii|0)==4){Ql=zh;Rl=Ml;Sl=ji;Tl=ti;break}else{li=Ml;oi=zh;Bh=ti;mi=ji}}mi=(g[k>>2]=+(xl&255|0)*.003921568859368563,c[k>>2]|0);Bh=(g[k>>2]=+(wl&65535|0)*.003921568859368563,c[k>>2]|0);oi=(g[k>>2]=+(yl&255|0)*.003921568859368563,c[k>>2]|0);li=(g[k>>2]=+(Oi&255|0)*.003921568859368563,c[k>>2]|0);ii=(g[k>>2]=+(wh|0)*.003921568859368563,c[k>>2]|0);ji=(g[k>>2]=+(ki&255|0)*.003921568859368563,c[k>>2]|0);ti=(Tl-Sl|0)>(Rl-Ql|0);Cl=ti?li:mi;Dl=ti?ii:Bh;El=ti?ji:oi;Fl=+(Mi&255|0)*.003921568859368563;Gl=ti?mi:li;Hl=ti?Bh:ii;Il=ti?oi:ji;Jl=+(mh&255|0)*.003921568859368563;break p}while(0);ji=0;oi=0;ti=0;ii=0;Bh=0;while(1){li=ji>>>2;mi=ji<<1&6;zh=c[G+(((d[Pe+(Sf*11|0)+li>>0]|0)>>>mi&3)<<2)>>2]|0;Ml=(zh&65535)>>>8;lh=zh>>>16;Nl=a[G+(((d[Pe+(yh*11|0)+li>>0]|0)>>>mi&3)<<2)+3>>0]|0;mi=A+(ji<<2)|0;a[mi>>0]=zh;a[mi+1>>0]=Ml;a[mi+2>>0]=lh;a[mi+3>>0]=Nl;mi=(zh&255)+Bh|0;zh=(Ml&65535)+ii|0;Ml=(lh&255)+ti|0;lh=(Nl&255)+oi|0;ji=ji+1|0;if((ji|0)==16){Ul=mi;Vl=zh;Wl=Ml;Xl=lh;break}else{oi=lh;ti=Ml;ii=zh;Bh=mi}}Bl=+(Ul>>>0);Yl=+(Vl>>>0);Zl=+(Wl>>>0);_l=+(Xl>>>0);$l=Bl*.0625;am=Yl*.0625;bm=Zl*.0625;cm=_l*.0625;dm=Bl*2.4509805371053517e-004;Bl=Yl*2.4509805371053517e-004;Yl=Zl*2.4509805371053517e-004;Zl=_l*2.4509805371053517e-004;do if(dm<0.0)em=0.0;else{if(!(dm>1.0)){em=dm;break}em=1.0}while(0);do if(Bl<0.0)fm=0.0;else{if(!(Bl>1.0)){fm=Bl;break}fm=1.0}while(0);do if(Yl<0.0)gm=0.0;else{if(!(Yl>1.0)){gm=Yl;break}gm=1.0}while(0);do if(Zl<0.0)hm=0.0;else{if(!(Zl>1.0)){hm=Zl;break}hm=1.0}while(0);c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;Zl=0.0;Yl=0.0;Bl=0.0;dm=0.0;Bh=0;while(1){ii=c[A+(Bh<<2)>>2]|0;_l=+(ii&255)-$l;im=+((ii&65535)>>>8&255)-am;jm=+(ii>>>16&255)-bm;km=+(ii>>>24&255)-cm;g[D>>2]=_l;g[sc>>2]=im;g[tc>>2]=jm;g[uc>>2]=km;lm=_l*im;mm=_l*jm;nm=_l*km;om=jm*im;pm=km*im;qm=km*jm;ii=(Bh|0)!=0?C:D;rm=+g[ii>>2];sm=+g[ii+4>>2];tm=+g[ii+8>>2];um=+g[ii+12>>2];vm=rm*rm+sm*sm+tm*tm+um*um;if(vm!=0.0){wm=1.0/+N(+vm);xm=rm*wm;ym=sm*wm;zm=tm*wm;Am=um*wm}else{xm=rm;ym=sm;zm=tm;Am=um}um=Zl+(nm*Am+(mm*zm+(lm*ym+_l*_l*xm)));g[C>>2]=um;_l=Yl+(pm*Am+(om*zm+(im*im*ym+lm*xm)));g[pc>>2]=_l;lm=Bl+(qm*Am+(jm*jm*zm+(om*ym+mm*xm)));g[qc>>2]=lm;mm=dm+(km*km*Am+(qm*zm+(pm*ym+nm*xm)));g[rc>>2]=mm;Bh=Bh+1|0;if((Bh|0)==16){Bm=um;Cm=_l;Dm=lm;Em=mm;break}else{Zl=um;Yl=_l;Bl=lm;dm=mm}}dm=Em*Em+(Dm*Dm+(Bm*Bm+Cm*Cm));if(dm!=0.0){Bl=1.0/+N(+dm);dm=Bm*Bl;g[C>>2]=dm;Yl=Cm*Bl;g[pc>>2]=Yl;Zl=Dm*Bl;g[qc>>2]=Zl;mm=Em*Bl;g[rc>>2]=mm;Fm=dm;Gm=Yl;Hm=Zl;Im=mm}else{Fm=Bm;Gm=Cm;Hm=Dm;Im=Em}if(Im*Im+(Hm*Hm+(Gm*Gm+Fm*Fm))<.5){g[C>>2]=.5;g[pc>>2]=.5;g[qc>>2]=.5;g[rc>>2]=.5;Jm=.5;Km=.5;Lm=.5;Mm=.5}else{Jm=Fm;Km=Gm;Lm=Hm;Mm=Im}mm=-1.0e9;Bh=0;Zl=1.0e9;while(1){ii=c[A+(Bh<<2)>>2]|0;Yl=Mm*(+(ii>>>24&255)-cm)+(Lm*(+(ii>>>16&255)-bm)+(Jm*(+(ii&255)-$l)+Km*(+((ii&65535)>>>8&255)-am)));dm=ZlYl?mm:Yl;Bh=Bh+1|0;if((Bh|0)==16){Nm=dm;Om=Bl;break}else{mm=Bl;Zl=dm}}Zl=Nm*.003921568859368563;mm=Om*.003921568859368563;am=em+Jm*Zl;$l=fm+Km*Zl;bm=gm+Lm*Zl;cm=hm+Mm*Zl;Zl=em+Jm*mm;dm=fm+Km*mm;Bl=gm+Lm*mm;Yl=hm+Mm*mm;do if(am<0.0)Pm=0.0;else{if(!(am>1.0)){Pm=am;break}Pm=1.0}while(0);do if($l<0.0)Qm=0.0;else{if(!($l>1.0)){Qm=$l;break}Qm=1.0}while(0);do if(bm<0.0)Rm=0.0;else{if(!(bm>1.0)){Rm=bm;break}Rm=1.0}while(0);do if(cm<0.0)Sm=0.0;else{if(!(cm>1.0)){Sm=cm;break}Sm=1.0}while(0);Bh=(g[k>>2]=Pm,c[k>>2]|0);ii=(g[k>>2]=Qm,c[k>>2]|0);ti=(g[k>>2]=Rm,c[k>>2]|0);do if(Zl<0.0)Tm=0.0;else{if(!(Zl>1.0)){Tm=Zl;break}Tm=1.0}while(0);do if(dm<0.0)Um=0.0;else{if(!(dm>1.0)){Um=dm;break}Um=1.0}while(0);do if(Bl<0.0)Vm=0.0;else{if(!(Bl>1.0)){Vm=Bl;break}Vm=1.0}while(0);do if(Yl<0.0)Wm=0.0;else{if(!(Yl>1.0)){Wm=Yl;break}Wm=1.0}while(0);oi=(g[k>>2]=Tm,c[k>>2]|0);ji=(g[k>>2]=Um,c[k>>2]|0);mi=(g[k>>2]=Vm,c[k>>2]|0);if(Sm>Wm){Xm=Wm;Ym=mi;Zm=ji;_m=oi;$m=Sm;an=ti;bn=ii;cn=Bh}else{Xm=Sm;Ym=ti;Zm=ii;_m=Bh;$m=Wm;an=mi;bn=ji;cn=oi}Cl=_m;Dl=Zm;El=Ym;Fl=Xm;Gl=cn;Hl=bn;Il=an;Jl=$m}else aa=527;while(0);do if((aa|0)==527){aa=0;if((ql|0)<=-1){qi=c[G+(ui<<2)>>2]|0;ni=(g[k>>2]=+(qi&255|0)*.003921568859368563,c[k>>2]|0);Ti=(g[k>>2]=+(qi>>>8&255|0)*.003921568859368563,c[k>>2]|0);oi=(g[k>>2]=+(qi>>>16&255|0)*.003921568859368563,c[k>>2]|0);Cl=ni;Dl=Ti;El=oi;Fl=+(d[G+(d[mg>>0]<<2)+3>>0]|0)*.003921568859368563;Gl=ni;Hl=Ti;Il=oi;Jl=+(d[G+(d[Pe+(yh*11|0)+9>>0]<<2)+3>>0]|0)*.003921568859368563;break}if((pi&255)>=4){aa=529;break c}oi=d[Te>>0]|0;Ti=d[Qi>>0]|0;ni=Ti<<3|Ti>>>2;Ti=d[kh>>0]|0;qi=Ti<<3|Ti>>>2;Ti=c[509600+(qh<<4)+(ui<<2)>>2]|0;ji=(oi<<3|oi>>>2)+Ti|0;if(ji>>>0>255)if((ji|0)<0){dn=0;aa=532}else en=255;else{dn=ji;aa=532}if((aa|0)==532){aa=0;en=dn}ji=ni+Ti|0;if(ji>>>0>255)if((ji|0)<0){fn=0;aa=535}else gn=255;else{fn=ji;aa=535}if((aa|0)==535){aa=0;gn=fn}ji=qi+Ti|0;if(ji>>>0>255)if((ji|0)<0){hn=0;aa=538}else jn=255;else{hn=ji;aa=538}if((aa|0)==538){aa=0;jn=hn}ji=(((en*15|0)+128|0)>>>0)/255|0;Ti=(((gn*15|0)+128|0)>>>0)/255|0;qi=(((jn*7|0)+128|0)>>>0)/255|0;ni=d[967634+(ql<<1)>>0]|0;oi=ji<<1|ji>>>3;mi=Ti<<1|Ti>>>3;zh=qi<<2|qi>>>1;Ml=(oi<<3|oi>>>2)-en|0;oi=(mi<<3|mi>>>2)-gn|0;mi=(Z(oi,oi)|0)+(Z(Ml,Ml)|0)|0;Ml=(zh<<3|zh>>>2)-jn|0;zh=(ni<<5|ni<<1)-ql|0;oi=mi+(Z(Ml,Ml)|0)+(Z(zh<<1,zh)|0)|0;if((ql|0)<3|(oi|0)==0){if(!((Ti|ji)>>>0<16&(ni|qi)>>>0<8)){aa=541;break c}c[xh>>2]=Ti<<4&240|ji<<8&3840|qi<<1&14|ni<<12&28672|c[xh>>2]&-2147450879;a[vh>>0]=0;a[vh+1>>0]=0;a[vh+2>>0]=0;a[vh+3>>0]=0;break o}zh=(((jn*15|0)+128|0)>>>0)/255|0;Ml=a[968146+(ql<<1)>>0]|0;lh=Ml&255;Nl=zh<<1|zh>>>3;li=lh<<1|1;Kl=(Nl<<3|Nl>>>2)-jn|0;Nl=(li<<4|li)-ql|0;li=(Z(Kl,Kl)|0)+mi+(Z(Nl<<1,Nl)|0)|0;Nl=a[969170+(en<<1)>>0]|0;mi=Nl&255;Kl=a[969170+(gn<<1)>>0]|0;Pl=Kl&255;Ol=a[968658+(jn<<1)>>0]|0;Ll=Ol&255;kn=a[969170+(en<<1)+1>>0]|0;ln=kn&255;mn=a[969170+(gn<<1)+1>>0]|0;nn=mn&255;on=a[968658+(jn<<1)+1>>0]|0;pn=on&255;qn=a[967122+(ql<<1)>>0]|0;rn=qn&255;sn=a[967122+(ql<<1)+1>>0]|0;tn=sn&255;un=mi<<1|mi>>>3;vn=Pl<<1|Pl>>>3;wn=Ll<<2|Ll>>>1;xn=ln<<1|ln>>>3;yn=nn<<1|nn>>>3;zn=pn<<1|pn>>>3;An=tn<<1|1;Bn=((((xn<<3|xn>>>2)*3|0)+((un<<3|un>>>2)*5|0)|0)>>>3)-en|0;un=((((yn<<3|yn>>>2)*3|0)+((vn<<3|vn>>>2)*5|0)|0)>>>3)-gn|0;vn=((((zn<<3|zn>>>2)*3|0)+((wn<<3|wn>>>2)*5|0)|0)>>>3)-jn|0;wn=((((An<<4|An)*3|0)+((rn<<5|rn<<1)*5|0)|0)>>>3)-ql|0;An=(Z(un,un)|0)+(Z(Bn,Bn)|0)+(Z(vn,vn)|0)+(Z(wn<<1,wn)|0)|0;if(An>>>0>>0&An>>>0
  • >>0){if(!(((Kl|Nl)&255)<16&((qn|Ol)&255)<8)){aa=545;break c}Ol=Pl<<4&240|mi<<8&3840|Ll<<1&14|rn<<12&28672|c[xh>>2]&-32767;c[xh>>2]=Ol;if(!((sn&255)<8?((mn|kn|on)&255)<16:0)){aa=547;break c}c[xh>>2]=nn<<20&15728640|ln<<24&251658240|pn<<16&983040|tn<<28&1879048192|Ol&-2147418113;a[vh>>0]=85;a[vh+1>>0]=85;a[vh+2>>0]=85;a[vh+3>>0]=85;break o}if(oi>>>0
  • >>0){if(!((Ti|ji)>>>0<16&(ni|qi)>>>0<8)){aa=551;break c}c[xh>>2]=Ti<<4&240|ji<<8&3840|qi<<1&14|ni<<12&28672|c[xh>>2]&-2147450879;a[vh>>0]=0;a[vh+1>>0]=0;a[vh+2>>0]=0;a[vh+3>>0]=0;break o}else{ni=c[xh>>2]|0;c[xh>>2]=ni&-32767;if(!((Ti|ji|zh)>>>0<16&(Ml&255)<8)){aa=554;break c}c[xh>>2]=Ti<<20&15728640|ji<<24&251658240|zh<<16&983040|lh<<28&1879048192|ni&-2147450879;a[vh>>0]=-1;a[vh+1>>0]=-1>>8;a[vh+2>>0]=-1>>16;a[vh+3>>0]=-1>>24;break o}}while(0);ui=~~((c[k>>2]=Cl,+g[k>>2])*15.0+.5);qh=~~((c[k>>2]=Dl,+g[k>>2])*15.0+.5);kh=~~((c[k>>2]=El,+g[k>>2])*7.0+.5);Qi=~~(Fl*7.0+.5);pi=~~((c[k>>2]=Gl,+g[k>>2])*15.0+.5);ni=~~((c[k>>2]=Hl,+g[k>>2])*15.0+.5);lh=~~((c[k>>2]=Il,+g[k>>2])*15.0+.5);zh=~~(Jl*7.0+.5);ji=(ui>>>0>255?ui>>31^255:ui)&255;ui=(qh>>>0>255?qh>>31^255:qh)&255;qh=(kh>>>0>255?kh>>31^255:kh)&255;kh=(Qi>>>0>255?Qi>>31^255:Qi)&255;if(!((qh|kh)>>>0<8&(ji|ui)>>>0<16)){aa=618;break c}Qi=zh>>>0>255?zh>>31^255:zh;zh=pi>>>0>255?pi>>31^255:pi;pi=qh<<1&14|kh<<12&28672|ui<<4&240|ji<<8&3840|c[xh>>2]&-32767;c[xh>>2]=pi;Ti=zh&255;Ml=(ni>>>0>255?ni>>31^255:ni)&255;ni=(lh>>>0>255?lh>>31^255:lh)&255;lh=Qi&255;if(!(lh>>>0<8&(Ml|ni|Ti)>>>0<16)){aa=620;break c}c[xh>>2]=ni<<16&983040|Qi<<28&1879048192|zh<<24&251658240|Ml<<20&15728640|pi&-2147418113;pi=ji<<1&254|ji>>>3;ji=ui<<1&254|ui>>>3;ui=qh<<2&252|qh>>>1;qh=Ti<<1&254|Ti>>>3;Ti=Ml<<1&254|Ml>>>3;Ml=ni<<1&254|ni>>>3;ni=lh<<1&254|1;lh=pi<<3&248|pi>>>2;pi=ji<<3&248|ji>>>2;ji=ui<<3&248|ui>>>2;ui=(kh<<5|kh<<1)&254;kh=(qh<<3&248|qh>>>2)-lh|0;qh=(Ti<<3&248|Ti>>>2)-pi|0;Ti=(Ml<<3&248|Ml>>>2)-ji|0;Ml=(ni<<4&240|ni)-ui|0;ni=(Z(Ti,Ti)|0)+(Z(Ml,Ml)|0)+(Z(qh,qh)|0)+(Z(kh,kh)|0)|0;zh=(ni*3|0)>>>4;Qi=ni>>>1;qi=(ni*13|0)>>>4;if(!(qh|Ti|kh)){ni=Z((si&255)-ui|0,Ml)|0;c[E>>2]=((ni|0)>=(qi|0)&1)+((ni|0)>=(Qi|0)&1)+((ni|0)>=(zh|0)&1);ni=Z(Ml,(ph&255)-ui|0)|0;c[vc>>2]=((ni|0)>=(qi|0)&1)+((ni|0)>=(Qi|0)&1)+((ni|0)>=(zh|0)&1);ni=Z(Ml,(ri&255)-ui|0)|0;c[wc>>2]=((ni|0)>=(qi|0)&1)+((ni|0)>=(Qi|0)&1)+((ni|0)>=(zh|0)&1);ni=Z(Ml,(rh&255)-ui|0)|0;c[xc>>2]=((ni|0)>=(qi|0)&1)+((ni|0)>=(Qi|0)&1)+((ni|0)>=(zh|0)&1);ni=d[Pe+(yh*11|0)>>0]|0;a[vh>>0]=c[E+((ni>>>2&3)<<2)>>2]<<2|c[E+((ni&3)<<2)>>2]|c[E+((ni>>>4&3)<<2)>>2]<<4|c[E+(ni>>>6<<2)>>2]<<6;ni=d[Pe+(yh*11|0)+1>>0]|0;a[h+(Pi+1)>>0]=c[E+((ni>>>2&3)<<2)>>2]<<2|c[E+((ni&3)<<2)>>2]|c[E+((ni>>>4&3)<<2)>>2]<<4|c[E+(ni>>>6<<2)>>2]<<6;ni=d[Pe+(yh*11|0)+2>>0]|0;a[nh>>0]=c[E+((ni>>>2&3)<<2)>>2]<<2|c[E+((ni&3)<<2)>>2]|c[E+((ni>>>4&3)<<2)>>2]<<4|c[E+(ni>>>6<<2)>>2]<<6;ni=d[Pe+(yh*11|0)+3>>0]|0;a[h+(Pi+3)>>0]=c[E+((ni>>>2&3)<<2)>>2]<<2|c[E+((ni&3)<<2)>>2]|c[E+((ni>>>4&3)<<2)>>2]<<4|c[E+(ni>>>6<<2)>>2]<<6;break}ni=c[G>>2]|0;c[F>>2]=(Z((ni>>>8&255)-pi|0,qh)|0)+(Z((ni&255)-lh|0,kh)|0)+(Z((ni>>>16&255)-ji|0,Ti)|0);c[I>>2]=Z((ni>>>24)-ui|0,Ml)|0;c[yc>>2]=(Z(qh,(oh&255)-pi|0)|0)+(Z(Ti,(uh&255)-ji|0)|0)+(Z(kh,(jh&255)-lh|0)|0);c[zc>>2]=Z(Ml,(ph&255)-ui|0)|0;c[Ac>>2]=(Z(qh,(Eh&255)-pi|0)|0)+(Z(Ti,(Si&255)-ji|0)|0)+(Z(kh,(Ni&255)-lh|0)|0);c[Bc>>2]=Z(Ml,(ri&255)-ui|0)|0;ni=(Z(kh,(Ri&255)-lh|0)|0)+(Z(qh,(Ah&255)-pi|0)|0)|0;pi=b[Sb>>1]|0;c[Cc>>2]=ni+(Z((pi&255)-ji|0,Ti)|0);c[Dc>>2]=Z(((pi&65535)>>>8&65535)-ui|0,Ml)|0;Ml=0;do{ui=d[Pe+(Sf*11|0)+Ml>>0]|0;pi=d[Pe+(yh*11|0)+Ml>>0]|0;Ti=(c[I+((pi&3)<<2)>>2]|0)+(c[F+((ui&3)<<2)>>2]|0)|0;ji=(c[I+((pi>>>2&3)<<2)>>2]|0)+(c[F+((ui>>>2&3)<<2)>>2]|0)|0;ni=(c[I+((pi>>>4&3)<<2)>>2]|0)+(c[F+((ui>>>4&3)<<2)>>2]|0)|0;qh=(c[I+(pi>>>6<<2)>>2]|0)+(c[F+(ui>>>6<<2)>>2]|0)|0;a[h+(Ml+Pi)>>0]=((ji|0)>=(qi|0)&1)+((ji|0)>=(Qi|0)&1)+((ji|0)>=(zh|0)&1)<<2|((Ti|0)>=(qi|0)&1)+((Ti|0)>=(Qi|0)&1)+((Ti|0)>=(zh|0)&1)|((ni|0)>=(qi|0)&1)+((ni|0)>=(Qi|0)&1)+((ni|0)>=(zh|0)&1)<<4|((qh|0)>=(qi|0)&1)+((qh|0)>=(Qi|0)&1)+((qh|0)>=(zh|0)&1)<<6;Ml=Ml+1|0}while((Ml|0)!=4)}while(0);fh=oe;gh=ne;hh=me;ih=le;break f;break}case 13:{Pi=Z(se+ge|0,p)|0;b[h+Pi>>1]=Mf;b[h+(Pi+2)>>1]=Sf;fh=oe;gh=ne;hh=me;ih=le;break f;break}case 16:{if(!Ec){aa=628;break c}Pi=se<<2;yh=h+(Pi+ie<<2)|0;nh=ba-Pi|0;Pi=(nh|0)>4?4:nh;nh=d[Ve+(Rf<<3)+4>>0]|0;vh=d[Te+1>>0]|0;xh=vh<<3|vh>>>2;vh=xh+(c[509600+(nh<<4)>>2]|0)|0;if(vh>>>0>255)if((vh|0)<0){Cn=0;aa=631}else Dn=255;else{Cn=vh;aa=631}if((aa|0)==631){aa=0;Dn=Cn}c[M>>2]=Dn;vh=(c[509600+(nh<<4)+4>>2]|0)+xh|0;if(vh>>>0>255)if((vh|0)<0){En=0;aa=634}else Fn=255;else{En=vh;aa=634}if((aa|0)==634){aa=0;Fn=En}c[Fc>>2]=Fn;vh=(c[509600+(nh<<4)+8>>2]|0)+xh|0;if(vh>>>0>255)if((vh|0)<0){Gn=0;aa=637}else Hn=255;else{Gn=vh;aa=637}if((aa|0)==637){aa=0;Hn=Gn}c[Gc>>2]=Hn;vh=(c[509600+(nh<<4)+12>>2]|0)+xh|0;if(vh>>>0>255)if((vh|0)<0){In=0;aa=640}else Jn=255;else{In=vh;aa=640}if((aa|0)==640){aa=0;Jn=In}c[Hc>>2]=Jn;if((Pi|0)==4){if(je){fh=oe;gh=ne;hh=me;ih=le;break f}else{Kn=yh;Ln=0}while(1){vh=d[Pe+(Sf*11|0)+Ln>>0]|0;a[Kn+3>>0]=c[M+((vh&3)<<2)>>2];a[Kn+7>>0]=c[M+((vh>>>2&3)<<2)>>2];a[Kn+11>>0]=c[M+((vh>>>4&3)<<2)>>2];a[Kn+15>>0]=c[M+(vh>>>6<<2)>>2];Ln=Ln+1|0;if((Ln|0)==(Qd|0)){fh=oe;gh=ne;hh=me;ih=le;break f}else Kn=Kn+Kc|0}}if(je){fh=oe;gh=ne;hh=me;ih=le;break f}vh=(Pi|0)==0;xh=yh;nh=0;while(1){mg=d[Pe+(Sf*11|0)+nh>>0]|0;if(!vh){Ml=0;do{a[xh+(Ml<<2|3)>>0]=c[M+((mg>>>(Ml<<1)&3)<<2)>>2];Ml=Ml+1|0}while((Ml|0)!=(ze|0))}nh=nh+1|0;if((nh|0)==(Qd|0)){fh=oe;gh=ne;hh=me;ih=le;break}else xh=xh+Kc|0}break}case 14:{if(!Ec){aa=650;break c}xh=se<<2;jb(O,Te,d[Ve+(Rf<<3)+4>>0]|0);if(je){fh=oe;gh=ne;hh=me;ih=le;break f}nh=(ba|0)==(xh|0);vh=h+(xh+ie<<2)|0;xh=0;while(1){yh=d[Pe+(Sf*11|0)+xh>>0]|0;if(!nh){Pi=0;do{Ml=O+((yh>>>(Pi<<1)&3)<<2)|0;mg=Pi<<2;a[vh+mg>>0]=a[Ml>>0]|0;a[vh+(mg|1)>>0]=a[Ml+1>>0]|0;a[vh+(mg|2)>>0]=a[Ml+2>>0]|0;Pi=Pi+1|0}while((Pi|0)!=(ze|0))}xh=xh+1|0;if((xh|0)==(Qd|0)){fh=oe;gh=ne;hh=me;ih=le;break}else vh=vh+Kc|0}break}case 15:{if(!Ec){aa=657;break c}vh=se<<2;jb(P,Te,d[Ve+(Rf<<3)+4>>0]|0);if(je){fh=oe;gh=ne;hh=me;ih=le;break f}xh=(ba|0)==(vh|0);nh=h+(vh+ie<<2)|0;vh=0;while(1){Pi=d[Pe+(Sf*11|0)+vh>>0]|0;if(!xh){yh=0;do{Ml=P+((Pi>>>(yh<<1)&3)<<2)|0;mg=yh<<2;a[nh+mg>>0]=a[Ml>>0]|0;a[nh+(mg|1)>>0]=a[Ml+1>>0]|0;a[nh+(mg|2)>>0]=a[Ml+2>>0]|0;a[nh+(mg|3)>>0]=-1;yh=yh+1|0}while((yh|0)!=(ze|0))}vh=vh+1|0;if((vh|0)==(Qd|0)){fh=oe;gh=ne;hh=me;ih=le;break}else nh=nh+Kc|0}break}case 18:case 17:{if(!Lc){aa=664;break c}nh=se<<2;jb(Q,Te,d[Ve+(Rf<<3)+4>>0]|0);if(Mc){vh=c[Q>>2]|0;b[R>>1]=vh>>>5&2016|vh<<8&63488|vh>>>19&31;vh=c[Pc>>2]|0;b[Qc>>1]=vh>>>5&2016|vh<<8&63488|vh>>>19&31;vh=c[Rc>>2]|0;b[Uc>>1]=vh>>>5&2016|vh<<8&63488|vh>>>19&31;vh=c[Vc>>2]|0;b[Wc>>1]=vh>>>5&2016|vh<<8&63488|vh>>>19&31}else{b[R>>1]=(d[Yc>>0]|0)>>>2<<5|(d[Xc>>0]|0)>>>3<<11|(d[Q>>0]|0)>>>3;b[ad>>1]=(d[$c>>0]|0)>>>2<<5|(d[_c>>0]|0)>>>3<<11|(d[Zc>>0]|0)>>>3;b[ed>>1]=(d[dd>>0]|0)>>>2<<5|(d[cd>>0]|0)>>>3<<11|(d[bd>>0]|0)>>>3;b[id>>1]=(d[hd>>0]|0)>>>2<<5|(d[gd>>0]|0)>>>3<<11|(d[fd>>0]|0)>>>3}if(je){fh=oe;gh=ne;hh=me;ih=le;break f}vh=(ba|0)==(nh|0);xh=h+(nh+ie<<1)|0;nh=0;while(1){yh=d[Pe+(Sf*11|0)+nh>>0]|0;if(!vh){Pi=0;do{b[xh+(Pi<<1)>>1]=b[R+((yh>>>(Pi<<1)&3)<<1)>>1]|0;Pi=Pi+1|0}while((Pi|0)!=(ze|0))}nh=nh+1|0;if((nh|0)==(Qd|0)){fh=oe;gh=ne;hh=me;ih=le;break}else xh=xh+Nc|0}break}case 19:{if(!Lc){aa=675;break c}xh=se<<2;jb(S,Te,d[Ve+(Rf<<3)+4>>0]|0);nh=c[S>>2]|0;b[T>>1]=nh>>>4&3840|nh<<8&61440|nh>>>16&240;nh=c[jd>>2]|0;b[kd>>1]=nh>>>4&3840|nh<<8&61440|nh>>>16&240;nh=c[ld>>2]|0;b[md>>1]=nh>>>4&3840|nh<<8&61440|nh>>>16&240;nh=c[nd>>2]|0;b[od>>1]=nh>>>4&3840|nh<<8&61440|nh>>>16&240;if(je){fh=oe;gh=ne;hh=me;ih=le;break f}nh=(ba|0)==(xh|0);vh=h+(xh+ie<<1)|0;xh=0;while(1){Pi=d[Pe+(Sf*11|0)+xh>>0]|0;if(!nh){yh=0;do{mg=vh+(yh<<1)|0;b[mg>>1]=e[mg>>1]&15|e[T+((Pi>>>(yh<<1)&3)<<1)>>1];yh=yh+1|0}while((yh|0)!=(ze|0))}xh=xh+1|0;if((xh|0)==(Qd|0)){fh=oe;gh=ne;hh=me;ih=le;break}else vh=vh+Nc|0}break}case 21:{if(!Lc){aa=683;break c}vh=se<<2;jb(U,Te,d[Ve+(Rf<<3)+4>>0]|0);xh=c[U>>2]|0;b[V>>1]=xh<<8&61440|xh>>>16&240|xh>>>4&3840|15;xh=c[pd>>2]|0;b[qd>>1]=xh<<8&61440|xh>>>16&240|xh>>>4&3840|15;xh=c[rd>>2]|0;b[sd>>1]=xh<<8&61440|xh>>>16&240|xh>>>4&3840|15;xh=c[td>>2]|0;b[ud>>1]=xh<<8&61440|xh>>>16&240|xh>>>4&3840|15;if(je){fh=oe;gh=ne;hh=me;ih=le;break f}xh=(ba|0)==(vh|0);nh=h+(vh+ie<<1)|0;vh=0;while(1){yh=d[Pe+(Sf*11|0)+vh>>0]|0;if(!xh){Pi=0;do{b[nh+(Pi<<1)>>1]=b[V+((yh>>>(Pi<<1)&3)<<1)>>1]|0;Pi=Pi+1|0}while((Pi|0)!=(ze|0))}vh=vh+1|0;if((vh|0)==(Qd|0)){fh=oe;gh=ne;hh=me;ih=le;break}else nh=nh+Nc|0}break}case 20:{if(!Lc){aa=691;break c}nh=se<<2;jb(W,Te,d[Ve+(Rf<<3)+4>>0]|0);b[X>>1]=(d[vd>>0]|0)>>>4&255;b[xd>>1]=(d[wd>>0]|0)>>>4&255;b[zd>>1]=(d[yd>>0]|0)>>>4&255;b[Bd>>1]=(d[Ad>>0]|0)>>>4&255;if(je){fh=oe;gh=ne;hh=me;ih=le;break f}vh=(ba|0)==(nh|0);xh=h+(nh+ie<<1)|0;nh=0;while(1){Pi=d[Pe+(Sf*11|0)+nh>>0]|0;if(!vh){yh=0;do{b[xh+(yh<<1)>>1]=b[X+((Pi>>>(yh<<1)&3)<<1)>>1]|0;yh=yh+1|0}while((yh|0)!=(ze|0))}nh=nh+1|0;if((nh|0)==(Qd|0)){fh=oe;gh=ne;hh=me;ih=le;break}else xh=xh+Nc|0}break}case 24:{xh=Z(se+ge|0,p)|0;nh=h+xh|0;vh=a[Pe+(Sf*11|0)+8>>0]|0;yh=vh&255;Pi=a[Pe+(Sf*11|0)+9>>0]|0;mg=d[Ve+(Rf<<3)+4>>0]|0;if(vh<<24>>24==Pi<<24>>24){if((vh&255)>=4){aa=701;break c}Ml=d[Te>>0]|0;zh=(Ml<<3|Ml>>>2)+(c[509600+(mg<<4)+(yh<<2)>>2]|0)|0;if(zh>>>0>255)if((zh|0)<0){Mn=0;aa=704}else Nn=255;else{Mn=zh;aa=704}if((aa|0)==704){aa=0;Nn=Mn}b[nh>>1]=Nn&255|7424;zh=h+(xh+2)|0;a[zh>>0]=a[953632]|0;a[zh+1>>0]=a[953633]|0;a[zh+2>>0]=a[953634]|0;a[zh+3>>0]=a[953635]|0;a[zh+4>>0]=a[953636]|0;a[zh+5>>0]=a[953637]|0;fh=oe;gh=ne;hh=me;ih=le;break f}q:do switch(vh<<24>>24){case 0:{if(Pi<<24>>24==3){On=0;break q}if(Pi<<24>>24==2)On=2;else aa=713;break}case 1:{if(Pi<<24>>24==3){On=1;break q}if(Pi<<24>>24==2)On=3;else aa=713;break}default:aa=713}while(0);if((aa|0)==713){aa=0;On=4}Pi=On>>>0>3?0:On;vh=(d[Te>>0]|0)+(mg<<5)|0;zh=a[949024+(vh<<4)+(Pi<<2)+1>>0]|0;b[nh>>1]=(zh&255)<<12&65535|d[949024+(vh<<4)+(Pi<<2)>>0]|((zh&255)>>>4&255)<<8&65535;zh=e[949024+(vh<<4)+(Pi<<2)+2>>1]|0;Pi=0;vh=0;yh=0;while(1){Ml=d[Pe+(Sf*11|0)+yh>>0]|0;Qi=Z(yh,-3)|0;qi=Tc(zh>>>((Ml>>>4&3)*3|0)&7|0,0,Qi+21|0)|0;Ah=B;Ri=Tc(zh>>>((Ml>>>2&3)*3|0)&7|0,0,Qi+33|0)|0;ri=B;Ni=Tc(zh>>>((Ml&3)*3|0)&7|0,0,Qi+45|0)|0;Si=B|vh;Eh=Tc(zh>>>((Ml>>>6)*3|0)&7|0,0,Qi+9|0)|0;Qi=Ni|Pi|Eh|Ri|qi;qi=Si|B|ri|Ah;yh=yh+1|0;if(yh>>>0>=4){Pn=Qi;Qn=qi;break}else{Pi=Qi;vh=qi}}vh=Sc(Pn|0,Qn|0,40)|0;a[h+(xh+2)>>0]=vh;a[h+(xh+3)>>0]=Qn;vh=Sc(Pn|0,Qn|0,24)|0;a[h+(xh+4)>>0]=vh;vh=Sc(Pn|0,Qn|0,16)|0;a[h+(xh+5)>>0]=vh;vh=Sc(Pn|0,Qn|0,8)|0;a[h+(xh+6)>>0]=vh;a[h+(xh+7)>>0]=Pn;fh=oe;gh=ne;hh=me;ih=le;break f;break}default:{aa=714;break c}}while(0)}while(0);se=se+1|0;if(se>>>0>=j>>>0){Sd=fh;Td=gh;Ud=hh;Vd=ih;Wd=Nf;Xd=Of;Yd=Pf;Zd=We;_d=Qf;$d=Fe;ae=Rf;be=Ge;break d}else{le=ih;me=hh;ne=gh;oe=fh;pe=Pf;qe=Of;re=Nf;te=We;ue=Qf;ve=Fe;we=we+4|0;xe=Rf;ye=Ge}}}while(0);Jd=Jd+1|0;if(Jd>>>0>=l>>>0){Rn=$d;aa=717;break}else{Cd=Vd;Dd=Ud;Ed=Td;Fd=Sd;Gd=Yd;Hd=Xd;Id=Wd;Kd=Zd;Ld=_d;Md=$d;Nd=Nd+4|0;Od=ae;Pd=be}}switch(aa|0){case 33:{na(969816,969718,435,969839);break}case 38:{na(969795,969718,445,969839);break}case 49:{na(969795,969718,322,969785);break}case 52:{na(961599,969718,425,970036);break}case 58:{if(!ja){ha=0;break a}Jc(ja);ha=0;break a;break}case 61:{if(!ja){ha=0;break a}Jc(ja);ha=0;break a;break}case 67:{if(!ja){ha=0;break a}Jc(ja);ha=0;break a;break}case 71:{na(969816,969718,435,969839);break}case 76:{na(969795,969718,445,969839);break}case 87:{na(969816,969718,435,969839);break}case 92:{na(969795,969718,445,969839);break}case 99:{na(969816,969718,435,969839);break}case 104:{na(969795,969718,445,969839);break}case 114:{na(969795,969718,322,969785);break}case 117:{if(!ja){ha=0;break a}Jc(ja);ha=0;break a;break}case 122:{na(961251,961199,8405,961235);break}case 124:{if(!ja){ha=0;break a}Jc(ja);ha=0;break a;break}case 133:{if(!ja){ha=0;break a}Jc(ja);ha=0;break a;break}case 141:{na(970063,961199,351,970047);break}case 149:{na(970104,961199,686,970131);break}case 159:{na(969854,969718,716,970023);break}case 170:{na(969854,969718,716,970023);break}case 183:{na(970063,961199,351,970047);break}case 203:{na(961283,961199,8520,961235);break}case 205:{na(961324,961199,8521,961235);break}case 207:{na(961365,961199,8522,961235);break}case 209:{na(970688,961199,3116,970150);break}case 211:{na(970721,961199,3126,970150);break}case 213:{na(970721,961199,3157,970738);break}case 216:{na(961406,961199,8539,961235);break}case 218:{na(970063,961199,351,970047);break}case 238:{na(961283,961199,8556,961235);break}case 240:{na(961324,961199,8557,961235);break}case 242:{na(961365,961199,8558,961235);break}case 250:{na(961420,961199,8571,961235);break}case 253:{na(971804,961199,3181,971787);break}case 255:{na(970721,961199,3210,971787);break}case 257:{na(971837,961199,3198,971787);break}case 259:{na(970721,961199,3210,971787);break}case 262:{na(970688,961199,3188,971787);break}case 264:{na(970721,961199,3210,971787);break}case 267:{na(971880,961199,3205,971787);break}case 269:{na(970721,961199,3210,971787);break}case 278:{na(972180,961199,3916,972208);break}case 287:{na(970104,961199,671,970114);break}case 304:{na(972759,961199,4100,972744);break}case 311:{na(972759,961199,4100,972744);break}case 318:{na(970104,961199,686,970131);break}case 340:{na(972759,961199,4100,972744);break}case 347:{na(972759,961199,4100,972744);break}case 353:{na(970104,961199,686,970131);break}case 383:{na(970104,961199,671,970114);break}case 464:{na(970104,961199,671,970114);break}case 475:{na(970688,961199,6380,977709);break}case 477:{na(977723,961199,6388,977756);break}case 482:{na(970688,961199,6380,977709);break}case 484:{na(977723,961199,6388,977756);break}case 487:{na(970688,961199,6380,977709);break}case 489:{na(977723,961199,6388,977756);break}case 502:{na(961467,961199,8673,961235);break}case 529:{na(970104,961199,671,970114);break}case 541:{na(971837,961199,7028,977791);break}case 545:{na(971837,961199,7028,977791);break}case 547:{na(971880,961199,7038,977811);break}case 551:{na(971837,961199,7028,977791);break}case 554:{na(971880,961199,7038,977811);break}case 618:{na(971837,961199,7028,977791);break}case 620:{na(971880,961199,7038,977811);break}case 628:{na(961483,961199,8690,961235);break}case 650:{na(961483,961199,8730,961235);break}case 657:{na(961483,961199,8759,961235);break}case 664:{na(961541,961199,8790,961235);break}case 675:{na(961541,961199,8825,961235);break}case 683:{na(961541,961199,8856,961235);break}case 691:{na(961541,961199,8883,961235);break}case 701:{na(970104,961199,686,970131);break}case 714:{na(961599,961199,8920,961235);break}case 717:{if(!Rn)break b;else{ha=0;break a}break}case 830:{na(961599,969718,425,970036);break}}}while(0);switch(o|0){case 3:{Pd=j+-1|0;Od=l+-1|0;if(!Pd)Sn=0;else{Nd=Pd;Md=0;while(1){Nd=Nd>>>1;Ld=Md+1|0;if(!Nd){Sn=Ld;break}else Md=Ld}}if(!Od)Tn=0;else{Md=Od;Nd=0;while(1){Md=Md>>>1;Ld=Nd+1|0;if(!Md){Tn=Ld;break}else Nd=Ld}}Nd=Sn>>>0>>0?Sn:Tn;Md=Nd<<1;Ld=(1<0){Kd=(j|0)>0;Id=(j|0)==(l|0);Hd=J+4|0;Gd=J+8|0;Fd=J+12|0;Ed=A+32|0;Dd=C+32|0;Cd=D+4|0;Jd=A+36|0;Nc=C+36|0;Ad=D+8|0;Bd=A+40|0;yd=C+40|0;zd=A+16|0;wd=A+4|0;xd=A+20|0;vd=C+16|0;Lc=C+4|0;ud=C+20|0;td=A+8|0;sd=A+24|0;rd=C+8|0;qd=C+24|0;pd=j>>>0>l>>>0;od=q?0:(Pd|0)<0?Pd:0;nd=(q?1:(Pd|0)<1?Pd:1)&Pd;md=0;ld=0;s:while(1){kd=0;do{jd=kd+ld|0;fd=jd+-1|0;if(q){Un=fd;Vn=-1}else{Un=(jd|0)<1?0:(fd|0)>(Od|0)?Od:fd;Vn=0}fd=Z(Un&Od,j)|0;c[D+(kd<<2)>>2]=ia+(fd<<2);jd=c[ia+((Vn&Pd)+fd<<2)>>2]|0;if(!(jd&32768)){aa=729;break s}gd=jd&30;c[A+(kd<<2)>>2]=((((jd>>>10&31)+(jd>>>5&31)+(gd>>>4|gd)|0)*255|0)>>>0)/31|0;gd=jd>>>16;if(!(gd&32768)){aa=731;break s}c[C+(kd<<2)>>2]=((((jd>>>26&31)+(jd>>>21&31)+(gd&31)|0)*255|0)>>>0)/31|0;gd=c[ia+(fd+od<<2)>>2]|0;if(!(gd&32768)){aa=729;break s}jd=gd&30;c[A+16+(kd<<2)>>2]=((((gd>>>10&31)+(gd>>>5&31)+(jd>>>4|jd)|0)*255|0)>>>0)/31|0;jd=gd>>>16;if(!(jd&32768)){aa=731;break s}c[C+16+(kd<<2)>>2]=((((gd>>>26&31)+(gd>>>21&31)+(jd&31)|0)*255|0)>>>0)/31|0;jd=c[ia+(fd+nd<<2)>>2]|0;if(!(jd&32768)){aa=729;break s}fd=jd&30;c[A+32+(kd<<2)>>2]=((((jd>>>10&31)+(jd>>>5&31)+(fd>>>4|fd)|0)*255|0)>>>0)/31|0;fd=jd>>>16;if(!(fd&32768)){aa=731;break s}c[C+32+(kd<<2)>>2]=((((jd>>>26&31)+(jd>>>21&31)+(fd&31)|0)*255|0)>>>0)/31|0;kd=kd+1|0}while((kd|0)<3);if(Kd){kd=e[953120+(ld>>8<<1)>>1]<<16|e[953120+((ld&255)<<1)>>1];fd=c[D>>2]|0;jd=c[Cd>>2]|0;gd=c[Ad>>2]|0;hd=ld>>Nd<>8<<1)>>1]<<17|e[953120+((bd&255)<<1)>>1]<<1;do if(!Id){dd=cd&Ld;if(pd){Wn=dd|bd>>Nd<>2]=c[ia+(id<<2)>>2];cd=ja+(id<<3)|0;dd=c[cd>>2]|0;ed=dd>>>29;Zc=(d[978918+(dd>>>11&31)>>0]|0)+(d[978918+(dd>>>3&31)>>0]|0)+(d[978918+(dd>>>19&31)>>0]|0)<<4;c[J>>2]=Zc+(c[509728+(ed<<4)+8>>2]|0);c[Hd>>2]=Zc+(c[509728+(ed<<4)+12>>2]|0);c[Gd>>2]=Zc+(c[509728+(ed<<4)+4>>2]|0);c[Fd>>2]=(c[509728+(ed<<4)>>2]|0)+Zc;bd=bd+1|0;Zc=(q?bd:(bd|0)>(Pd|0)?Pd:bd)&Pd;ed=c[fd+(Zc<<2)>>2]|0;if(!(ed&32768)){aa=740;break s}dd=ed&30;c[Ed>>2]=((((ed>>>10&31)+(ed>>>5&31)+(dd>>>4|dd)|0)*255|0)>>>0)/31|0;dd=ed>>>16;if(!(dd&32768)){aa=742;break s}c[Dd>>2]=((((ed>>>26&31)+(ed>>>21&31)+(dd&31)|0)*255|0)>>>0)/31|0;dd=c[jd+(Zc<<2)>>2]|0;if(!(dd&32768)){aa=744;break s}ed=dd&30;c[Jd>>2]=((((dd>>>10&31)+(dd>>>5&31)+(ed>>>4|ed)|0)*255|0)>>>0)/31|0;ed=dd>>>16;if(!(ed&32768)){aa=746;break s}c[Nc>>2]=((((dd>>>26&31)+(dd>>>21&31)+(ed&31)|0)*255|0)>>>0)/31|0;ed=c[gd+(Zc<<2)>>2]|0;if(!(ed&32768)){aa=748;break s}Zc=ed&30;c[Bd>>2]=((((ed>>>10&31)+(ed>>>5&31)+(Zc>>>4|Zc)|0)*255|0)>>>0)/31|0;Zc=ed>>>16;if(!(Zc&32768)){aa=750;break s}dd=((((ed>>>26&31)+(ed>>>21&31)+(Zc&31)|0)*255|0)>>>0)/31|0;c[yd>>2]=dd;Zc=d[cd+7>>0]|0;ed=d[cd+5>>0]|0;_c=ed<<4&240|Zc&15;$c=ed&240|Zc>>>4;Zc=d[cd+6>>0]|0;ed=d[cd+4>>0]|0;cd=ed<<4&240|Zc&15;ad=ed&240|Zc>>>4;Zc=c[A>>2]|0;ed=c[zd>>2]|0;Xc=c[wd>>2]|0;Yc=c[xd>>2]|0;Wc=c[C>>2]|0;Vc=c[vd>>2]|0;Uc=c[Lc>>2]|0;Rc=c[ud>>2]|0;Qc=ed+Zc+Xc+Yc<<2;Pc=Vc+Wc+Uc+Rc<<2;Mc=Pc-Qc|0;Kc=(c[J+(d[977832+_c>>0]<<2)>>2]|0)-Qc<<4;Ec=(Pc|0)<(Qc|0);Qc=Ec?0-Kc|0:Kc;Kc=Ec?0-Mc|0:Mc;Mc=Zc<<1;Ec=ed*6|0;Pc=Yc*6|0;Hc=Ec+Mc+(Xc<<1)+Pc|0;Gc=Wc<<1;Fc=Vc*6|0;Dc=Rc*6|0;Cc=Fc+Gc+(Uc<<1)+Dc|0;Sb=Cc-Hc|0;Bc=(c[J+(d[977832+$c>>0]<<2)>>2]|0)-Hc<<4;Ac=(Cc|0)<(Hc|0);Hc=Ac?0-Bc|0:Bc;Bc=Ac?0-Sb|0:Sb;Sb=(ed<<1)+Mc+(Xc*6|0)+Pc|0;Mc=(Vc<<1)+Gc+(Uc*6|0)+Dc|0;Gc=Mc-Sb|0;Ac=(c[J+(d[978088+_c>>0]<<2)>>2]|0)-Sb<<4;Cc=(Mc|0)<(Sb|0);Sb=Cc?0-Ac|0:Ac;Ac=Cc?0-Gc|0:Gc;Gc=ed*3|0;Cc=Xc*3|0;Mc=Yc*9|0;zc=Gc+Zc+Cc+Mc|0;Zc=Vc*3|0;yc=Uc*3|0;xc=Rc*9|0;wc=Zc+Wc+yc+xc|0;Wc=wc-zc|0;vc=(c[J+(d[978088+$c>>0]<<2)>>2]|0)-zc<<4;rc=(wc|0)<(zc|0);zc=rc?0-vc|0:vc;vc=rc?0-Wc|0:Wc;Wc=c[Ed>>2]|0;rc=c[Jd>>2]|0;wc=c[Dd>>2]|0;qc=c[Nc>>2]|0;pc=Yc+ed<<3;uc=Rc+Vc<<3;tc=uc-pc|0;sc=(c[J+(d[977832+cd>>0]<<2)>>2]|0)-pc<<4;tb=(uc|0)<(pc|0);pc=tb?0-sc|0:sc;sc=tb?0-tc|0:tc;tc=Pc+Ec+(Wc<<1)+(rc<<1)|0;Ec=Dc+Fc+(wc<<1)+(qc<<1)|0;Fc=Ec-tc|0;Dc=(c[J+(d[977832+ad>>0]<<2)>>2]|0)-tc<<4;Pc=(Ec|0)<(tc|0);tc=Pc?0-Dc|0:Dc;Dc=Pc?0-Fc|0:Fc;Fc=Yc*12|0;Pc=Fc+(ed<<2)|0;ed=Rc*12|0;Ec=ed+(Vc<<2)|0;Vc=Ec-Pc|0;tb=(c[J+(d[978088+cd>>0]<<2)>>2]|0)-Pc<<4;uc=(Ec|0)<(Pc|0);Pc=uc?0-tb|0:tb;tb=uc?0-Vc|0:Vc;Vc=rc*3|0;uc=Mc+Gc+Wc+Vc|0;Wc=qc*3|0;Gc=xc+Zc+wc+Wc|0;wc=Gc-uc|0;Zc=(c[J+(d[978088+ad>>0]<<2)>>2]|0)-uc<<4;Ec=(Gc|0)<(uc|0);uc=Ec?0-Zc|0:Zc;Zc=Ec?0-wc|0:wc;wc=c[td>>2]|0;Ec=c[sd>>2]|0;Gc=c[rd>>2]|0;Xa=c[qd>>2]|0;sb=Yc+Xc|0;Wa=sb<<3;rb=Rc+Uc|0;Va=rb<<3;oc=Va-Wa|0;nc=(c[J+(d[978344+_c>>0]<<2)>>2]|0)-Wa<<4;mc=(Va|0)<(Wa|0);Wa=mc?0-nc|0:nc;nc=mc?0-oc|0:oc;oc=Fc+(Xc<<2)|0;Xc=ed+(Uc<<2)|0;Uc=Xc-oc|0;mc=(c[J+(d[978344+$c>>0]<<2)>>2]|0)-oc<<4;Va=(Xc|0)<(oc|0);oc=Va?0-mc|0:mc;mc=Va?0-Uc|0:Uc;Uc=(wc<<1)+(sb*6|0)+(Ec<<1)|0;sb=(Gc<<1)+(rb*6|0)+(Xa<<1)|0;rb=sb-Uc|0;Va=(c[J+(d[978600+_c>>0]<<2)>>2]|0)-Uc<<4;_c=(sb|0)<(Uc|0);Uc=_c?0-Va|0:Va;Va=_c?0-rb|0:rb;rb=Ec*3|0;_c=Mc+Cc+wc+rb|0;wc=Xa*3|0;Cc=xc+yc+Gc+wc|0;Gc=Cc-_c|0;yc=(c[J+(d[978600+$c>>0]<<2)>>2]|0)-_c<<4;$c=(Cc|0)<(_c|0);_c=$c?0-Gc|0:Gc;Gc=$c?0-yc|0:yc;yc=Yc<<4;Yc=Rc<<4;Rc=Yc-yc|0;$c=(c[J+(d[978344+cd>>0]<<2)>>2]|0)-yc<<4;Cc=(Yc|0)<(yc|0);yc=Cc?0-Rc|0:Rc;Rc=Cc?0-$c|0:$c;$c=(rc<<2)+Fc|0;rc=(qc<<2)+ed|0;qc=rc-$c|0;Cc=(c[J+(d[978344+ad>>0]<<2)>>2]|0)-$c<<4;Yc=(rc|0)<($c|0);$c=Yc?0-qc|0:qc;qc=Yc?0-Cc|0:Cc;Cc=(Ec<<2)+Fc|0;Fc=(Xa<<2)+ed|0;ed=Fc-Cc|0;Xa=(c[J+(d[978600+cd>>0]<<2)>>2]|0)-Cc<<4;cd=(Fc|0)<(Cc|0);Cc=cd?0-ed|0:ed;ed=cd?0-Xa|0:Xa;Xa=Vc+Mc+rb+(c[Bd>>2]|0)|0;rb=xc+dd+Wc+wc|0;wc=rb-Xa|0;Wc=(c[J+(d[978600+ad>>0]<<2)>>2]|0)-Xa<<4;ad=(rb|0)<(Xa|0);Xa=ad?0-wc|0:wc;wc=ad?0-Wc|0:Wc;c[h+(Wn<<3)>>2]=((Hc|0)>(Bc*13|0)?12:(Hc|0)>(Bc<<3|0)?8:(Hc|0)>(Bc*3|0)?4:0)|((Qc|0)>(Kc*13|0)?3:(Qc|0)>(Kc<<3|0)?2:(Qc|0)>(Kc*3|0)&1)|((Sb|0)>(Ac*13|0)?768:(Sb|0)>(Ac<<3|0)?512:(Sb|0)>(Ac*3|0)?256:0)|((zc|0)>(vc*13|0)?3072:(zc|0)>(vc<<3|0)?2048:(zc|0)>(vc*3|0)?1024:0)|((pc|0)>(sc*13|0)?48:(pc|0)>(sc<<3|0)?32:(pc|0)>(sc*3|0)?16:0)|((tc|0)>(Dc*13|0)?192:(tc|0)>(Dc<<3|0)?128:(tc|0)>(Dc*3|0)?64:0)|((Pc|0)>(tb*13|0)?12288:(Pc|0)>(tb<<3|0)?8192:(Pc|0)>(tb*3|0)?4096:0)|((uc|0)>(Zc*13|0)?49152:(uc|0)>(Zc<<3|0)?32768:(uc|0)>(Zc*3|0)?16384:0)|((Wa|0)>(nc*13|0)?196608:(Wa|0)>(nc<<3|0)?131072:(Wa|0)>(nc*3|0)?65536:0)|((oc|0)>(mc*13|0)?786432:(oc|0)>(mc<<3|0)?524288:(oc|0)>(mc*3|0)?262144:0)|((Uc|0)>(Va*13|0)?50331648:(Uc|0)>(Va<<3|0)?33554432:(Uc|0)>(Va*3|0)?16777216:0)|((Gc|0)>(_c*13|0)?201326592:(Gc|0)>(_c<<3|0)?134217728:(Gc|0)>(_c*3|0)?67108864:0)|((Rc|0)>(yc*13|0)?3145728:(Rc|0)>(yc<<3|0)?2097152:(Rc|0)>(yc*3|0)?1048576:0)|((qc|0)>($c*13|0)?12582912:(qc|0)>($c<<3|0)?8388608:(qc|0)>($c*3|0)?4194304:0)|((ed|0)>(Cc*13|0)?805306368:(ed|0)>(Cc<<3|0)?536870912:(ed|0)>(Cc*3|0)?268435456:0)|((wc|0)>(Xa*13|0)?-1073741824:(wc|0)>(Xa<<3|0)?-2147483648:(wc|0)>(Xa*3|0)?1073741824:0);c[A>>2]=c[zd>>2];c[zd>>2]=c[Ed>>2];c[wd>>2]=c[xd>>2];c[xd>>2]=c[Jd>>2];c[td>>2]=c[sd>>2];c[sd>>2]=c[Bd>>2];c[C>>2]=c[vd>>2];c[vd>>2]=c[Dd>>2];c[Lc>>2]=c[ud>>2];c[ud>>2]=c[Nc>>2];c[rd>>2]=c[qd>>2];c[qd>>2]=c[yd>>2];Xa=id+1|0;if((bd|0)>=(j|0)){Xn=Xa;break}else id=Xa}}else Xn=md;ld=ld+1|0;if((ld|0)>=(l|0))break r;else md=Xn}if((aa|0)==729)na(978856,961199,3336,978872);else if((aa|0)==731)na(978856,961199,3351,978895);else if((aa|0)==740)na(978856,961199,3336,978872);else if((aa|0)==742)na(978856,961199,3351,978895);else if((aa|0)==744)na(978856,961199,3336,978872);else if((aa|0)==746)na(978856,961199,3351,978895);else if((aa|0)==748)na(978856,961199,3336,978872);else if((aa|0)==750)na(978856,961199,3351,978895)}while(0);break}case 4:{Pd=c[f>>2]|0;Md=c[u>>2]|0;Nd=j+-1|0;Ld=l+-1|0;if(!Nd)Yn=0;else{Od=Nd;md=0;while(1){Od=Od>>>1;ld=md+1|0;if(!Od){Yn=ld;break}else md=ld}}if(!Ld)Zn=0;else{md=Ld;Od=0;while(1){md=md>>>1;ld=Od+1|0;if(!md){Zn=ld;break}else Od=ld}}Od=Yn>>>0>>0?Yn:Zn;md=Od<<1;ld=(1<0){yd=(j|0)>0;qd=(j|0)==(l|0);rd=J+4|0;Nc=J+8|0;ud=J+12|0;Lc=K+4|0;Dd=K+8|0;vd=K+12|0;Bd=A+32|0;sd=C+32|0;td=D+4|0;Jd=A+36|0;xd=C+36|0;wd=D+8|0;Ed=A+40|0;zd=C+40|0;Fd=A+16|0;Gd=A+4|0;Hd=A+20|0;pd=C+16|0;Id=C+4|0;Ad=C+20|0;Cd=A+8|0;Kd=A+24|0;nd=C+8|0;od=C+24|0;id=j>>>0>l>>>0;bd=0;gd=0;while(1){jd=0;do{fd=jd+gd|0;hd=fd+-1|0;if(q)_n=hd;else _n=(fd|0)<1?0:(hd|0)>(Ld|0)?Ld:hd;hd=Z(_n&Ld,j)|0;c[D+(jd<<2)>>2]=ia+(hd<<2);fd=0;do{kd=fd+-1|0;if(q)$n=kd;else $n=(fd|0)<1?0:(kd|0)>(Nd|0)?Nd:kd;kd=c[ia+(($n&Nd)+hd<<2)>>2]|0;if(!(kd&32768)){ao=a[978974+(kd>>>12&7)>>0]|0;bo=d[978966+(kd>>>1&7)>>0]|0;co=d[978950+(kd>>>4&15)>>0]|0;eo=d[978950+(kd>>>8&15)>>0]|0}else{ao=-1;bo=d[978950+(kd>>>1&15)>>0]|0;co=d[978918+(kd>>>5&31)>>0]|0;eo=d[978918+(kd>>>10&31)>>0]|0}c[A+(fd<<4)+(jd<<2)>>2]=co+eo+bo+(ao&255);Xa=kd>>>16;if(!(Xa&32768)){fo=a[978974+(kd>>>28&7)>>0]|0;go=d[978950+(Xa&15)>>0]|0;ho=d[978950+(kd>>>20&15)>>0]|0;io=d[978950+(kd>>>24&15)>>0]|0}else{fo=-1;go=d[978918+(Xa&31)>>0]|0;ho=d[978918+(kd>>>21&31)>>0]|0;io=d[978918+(kd>>>26&31)>>0]|0}c[C+(fd<<4)+(jd<<2)>>2]=ho+io+go+(fo&255);fd=fd+1|0}while((fd|0)!=3);jd=jd+1|0}while((jd|0)!=3);if(yd){jd=Z(gd,j)|0;fd=e[953120+(gd>>8<<1)>>1]<<16|e[953120+((gd&255)<<1)>>1];hd=c[D>>2]|0;kd=c[td>>2]|0;Xa=c[wd>>2]|0;wc=gd>>Od<>2]|0;ed=c[Hd>>2]|0;$c=c[Fd>>2]|0;qc=c[A>>2]|0;yc=c[Id>>2]|0;Rc=c[Ad>>2]|0;_c=c[pd>>2]|0;Gc=c[C>>2]|0;Va=c[Cd>>2]|0;Uc=c[Kd>>2]|0;mc=c[nd>>2]|0;oc=c[od>>2]|0;nc=bd;Wa=0;while(1){Zc=x+(Wa+jd<<2)|0;uc=e[Zc>>1]|0;tb=Pd+(uc<<3)|0;Pc=e[Zc+2>>1]|0;Zc=fd|e[953120+(Wa>>8<<1)>>1]<<17|e[953120+((Wa&255)<<1)>>1]<<1;do if(!qd){Dc=Zc&ld;if(id){jo=Dc|Wa>>Od<>2]=c[ia+(nc<<2)>>2];Zc=ja+(nc<<3)|0;Dc=c[Zc>>2]|0;tc=Dc>>>29;sc=(d[978918+(Dc>>>11&31)>>0]|0)+(d[978918+(Dc>>>3&31)>>0]|0)+(d[978918+(Dc>>>19&31)>>0]|0)<<4;Dc=sc+(c[509728+(tc<<4)>>2]|0)|0;c[J>>2]=(Dc|0)<0?0:(Dc|0)>12240?12240:Dc;Dc=sc+(c[509728+(tc<<4)+4>>2]|0)|0;c[rd>>2]=(Dc|0)<0?0:(Dc|0)>12240?12240:Dc;Dc=sc+(c[509728+(tc<<4)+8>>2]|0)|0;c[Nc>>2]=(Dc|0)<0?0:(Dc|0)>12240?12240:Dc;Dc=(c[509728+(tc<<4)+12>>2]|0)+sc|0;c[ud>>2]=(Dc|0)<0?0:(Dc|0)>12240?12240:Dc;Dc=d[978918+(d[tb+1>>0]|0)>>0]<<4;sc=d[Pd+(uc<<3)+4>>0]|0;tc=Dc+(c[509856+(sc<<4)>>2]|0)|0;c[K>>2]=(tc|0)<0?0:(tc|0)>4080?4080:tc;tc=(c[509856+(sc<<4)+4>>2]|0)+Dc|0;c[Lc>>2]=(tc|0)<0?0:(tc|0)>4080?4080:tc;tc=(c[509856+(sc<<4)+8>>2]|0)+Dc|0;c[Dd>>2]=(tc|0)<0?0:(tc|0)>4080?4080:tc;tc=(c[509856+(sc<<4)+12>>2]|0)+Dc|0;c[vd>>2]=(tc|0)<0?0:(tc|0)>4080?4080:tc;Wa=Wa+1|0;tc=(q?Wa:(Wa|0)>(Nd|0)?Nd:Wa)&Nd;Dc=c[hd+(tc<<2)>>2]|0;if(!(Dc&32768)){ko=a[978974+(Dc>>>12&7)>>0]|0;lo=d[978966+(Dc>>>1&7)>>0]|0;mo=d[978950+(Dc>>>4&15)>>0]|0;no=d[978950+(Dc>>>8&15)>>0]|0}else{ko=-1;lo=d[978950+(Dc>>>1&15)>>0]|0;mo=d[978918+(Dc>>>5&31)>>0]|0;no=d[978918+(Dc>>>10&31)>>0]|0}sc=mo+no+lo+(ko&255)|0;pc=Dc>>>16;if(!(pc&32768)){oo=a[978974+(Dc>>>28&7)>>0]|0;po=d[978950+(pc&15)>>0]|0;qo=d[978950+(Dc>>>20&15)>>0]|0;ro=d[978950+(Dc>>>24&15)>>0]|0}else{oo=-1;po=d[978918+(pc&31)>>0]|0;qo=d[978918+(Dc>>>21&31)>>0]|0;ro=d[978918+(Dc>>>26&31)>>0]|0}Dc=qo+ro+po+(oo&255)|0;pc=c[kd+(tc<<2)>>2]|0;if(!(pc&32768)){so=a[978974+(pc>>>12&7)>>0]|0;to=d[978966+(pc>>>1&7)>>0]|0;uo=d[978950+(pc>>>4&15)>>0]|0;vo=d[978950+(pc>>>8&15)>>0]|0}else{so=-1;to=d[978950+(pc>>>1&15)>>0]|0;uo=d[978918+(pc>>>5&31)>>0]|0;vo=d[978918+(pc>>>10&31)>>0]|0}vc=uo+vo+to+(so&255)|0;zc=pc>>>16;if(!(zc&32768)){wo=a[978974+(pc>>>28&7)>>0]|0;xo=d[978950+(zc&15)>>0]|0;yo=d[978950+(pc>>>20&15)>>0]|0;zo=d[978950+(pc>>>24&15)>>0]|0}else{wo=-1;xo=d[978918+(zc&31)>>0]|0;yo=d[978918+(pc>>>21&31)>>0]|0;zo=d[978918+(pc>>>26&31)>>0]|0}pc=yo+zo+xo+(wo&255)|0;zc=c[Xa+(tc<<2)>>2]|0;if(!(zc&32768)){Ao=a[978974+(zc>>>12&7)>>0]|0;Bo=d[978966+(zc>>>1&7)>>0]|0;Co=d[978950+(zc>>>4&15)>>0]|0;Do=d[978950+(zc>>>8&15)>>0]|0}else{Ao=-1;Bo=d[978950+(zc>>>1&15)>>0]|0;Co=d[978918+(zc>>>5&31)>>0]|0;Do=d[978918+(zc>>>10&31)>>0]|0}tc=Co+Do+Bo+(Ao&255)|0;Ac=zc>>>16;if(!(Ac&32768)){Eo=a[978974+(zc>>>28&7)>>0]|0;Fo=d[978950+(Ac&15)>>0]|0;Go=d[978950+(zc>>>20&15)>>0]|0;Ho=d[978950+(zc>>>24&15)>>0]|0}else{Eo=-1;Fo=d[978918+(Ac&31)>>0]|0;Go=d[978918+(zc>>>21&31)>>0]|0;Ho=d[978918+(zc>>>26&31)>>0]|0}zc=Go+Ho+Fo+(Eo&255)|0;Ac=Cc+ed|0;Sb=Ac+$c+qc<<2;Kc=yc+Rc|0;Qc=Kc+_c+Gc<<2;Bc=d[Zc+4>>0]|0;Hc=d[Md+(Pc*11|0)>>0]|0;Wc=Qc-Sb|0;ad=(c[J+((Bc&3)<<2)>>2]|0)-Sb+(c[K+((Hc&3)<<2)>>2]|0)<<4;rb=(Qc|0)<(Sb|0);Sb=rb?0-ad|0:ad;ad=rb?0-Wc|0:Wc;Wc=qc<<1;rb=$c*6|0;Qc=ed*6|0;dd=(Cc<<1)+Qc+rb+Wc|0;xc=Gc<<1;Mc=_c*6|0;Vc=Rc*6|0;cd=(yc<<1)+Vc+Mc+xc|0;Fc=cd-dd|0;Ec=(c[J+((Bc>>>2&3)<<2)>>2]|0)-dd+(c[K+((Hc>>>2&3)<<2)>>2]|0)<<4;Yc=(cd|0)<(dd|0);dd=Yc?0-Ec|0:Ec;Ec=Yc?0-Fc|0:Fc;Fc=(Cc*6|0)+Qc+($c<<1)+Wc|0;Wc=(yc*6|0)+Vc+(_c<<1)+xc|0;xc=d[Zc+5>>0]|0;Yc=d[Md+(Pc*11|0)+1>>0]|0;cd=Wc-Fc|0;rc=(c[J+((xc&3)<<2)>>2]|0)-Fc+(c[K+((Yc&3)<<2)>>2]|0)<<4;sb=(Wc|0)<(Fc|0);Fc=sb?0-rc|0:rc;rc=sb?0-cd|0:cd;cd=$c*3|0;sb=Cc*3|0;Wc=ed*9|0;Xc=sb+Wc+qc+cd|0;lc=_c*3|0;Na=yc*3|0;kc=Rc*9|0;jc=Na+kc+Gc+lc|0;ic=jc-Xc|0;hc=(c[J+((xc>>>2&3)<<2)>>2]|0)-Xc+(c[K+((Yc>>>2&3)<<2)>>2]|0)<<4;gc=(jc|0)<(Xc|0);Xc=gc?0-hc|0:hc;hc=gc?0-ic|0:ic;ic=$c+ed<<3;gc=_c+Rc<<3;jc=gc-ic|0;fc=(c[J+((Bc>>>4&3)<<2)>>2]|0)-ic+(c[K+((Hc>>>4&3)<<2)>>2]|0)<<4;ec=(gc|0)<(ic|0);ic=ec?0-fc|0:fc;fc=ec?0-jc|0:jc;jc=rb+Qc+(sc<<1)+(vc<<1)|0;Qc=Mc+Vc+(Dc<<1)+(pc<<1)|0;Vc=Qc-jc|0;Mc=(c[J+(Bc>>>6<<2)>>2]|0)-jc+(c[K+(Hc>>>6<<2)>>2]|0)<<4;Hc=(Qc|0)<(jc|0);jc=Hc?0-Mc|0:Mc;Mc=Hc?0-Vc|0:Vc;Vc=ed*12|0;Hc=($c<<2)+Vc|0;Qc=Rc*12|0;Bc=(_c<<2)+Qc|0;rb=Bc-Hc|0;ec=(c[J+((xc>>>4&3)<<2)>>2]|0)-Hc+(c[K+((Yc>>>4&3)<<2)>>2]|0)<<4;gc=(Bc|0)<(Hc|0);Hc=gc?0-ec|0:ec;ec=gc?0-rb|0:rb;rb=vc*3|0;gc=cd+Wc+sc+rb|0;cd=pc*3|0;Bc=lc+kc+Dc+cd|0;lc=Bc-gc|0;dc=(c[J+(xc>>>6<<2)>>2]|0)-gc+(c[K+(Yc>>>6<<2)>>2]|0)<<4;Yc=(Bc|0)<(gc|0);gc=Yc?0-dc|0:dc;dc=Yc?0-lc|0:lc;lc=Ac<<3;Yc=Kc<<3;Bc=d[Zc+6>>0]|0;xc=d[Md+(Pc*11|0)+2>>0]|0;cc=Yc-lc|0;ac=(c[J+((Bc&3)<<2)>>2]|0)-lc+(c[K+((xc&3)<<2)>>2]|0)<<4;$b=(Yc|0)<(lc|0);lc=$b?0-ac|0:ac;ac=$b?0-cc|0:cc;cc=(Cc<<2)+Vc|0;$b=(yc<<2)+Qc|0;Yc=$b-cc|0;Ma=(c[J+((Bc>>>2&3)<<2)>>2]|0)-cc+(c[K+((xc>>>2&3)<<2)>>2]|0)<<4;La=($b|0)<(cc|0);cc=La?0-Ma|0:Ma;Ma=La?0-Yc|0:Yc;Yc=(Va+Uc<<1)+(Ac*6|0)|0;Ac=(mc+oc<<1)+(Kc*6|0)|0;Kc=d[Zc+7>>0]|0;Zc=d[Md+(Pc*11|0)+3>>0]|0;La=Ac-Yc|0;$b=(c[J+((Kc&3)<<2)>>2]|0)-Yc+(c[K+((Zc&3)<<2)>>2]|0)<<4;_b=(Ac|0)<(Yc|0);Yc=_b?0-$b|0:$b;$b=_b?0-La|0:La;La=Uc*3|0;_b=La+Va+Wc+sb|0;sb=oc*3|0;Ac=sb+mc+kc+Na|0;Na=Ac-_b|0;Zb=(c[J+((Kc>>>2&3)<<2)>>2]|0)-_b+(c[K+((Zc>>>2&3)<<2)>>2]|0)<<4;Yb=(Ac|0)<(_b|0);_b=Yb?0-Na|0:Na;Na=Yb?0-Zb|0:Zb;Zb=ed<<4;Yb=Rc<<4;Ac=Yb-Zb|0;Xb=(c[J+((Bc>>>4&3)<<2)>>2]|0)-Zb+(c[K+((xc>>>4&3)<<2)>>2]|0)<<4;Wb=(Yb|0)<(Zb|0);Zb=Wb?0-Ac|0:Ac;Ac=Wb?0-Xb|0:Xb;Xb=(vc<<2)+Vc|0;Wb=(pc<<2)+Qc|0;Yb=Wb-Xb|0;Vb=(c[J+(Bc>>>6<<2)>>2]|0)-Xb+(c[K+(xc>>>6<<2)>>2]|0)<<4;xc=(Wb|0)<(Xb|0);Xb=xc?0-Yb|0:Yb;Yb=xc?0-Vb|0:Vb;Vb=Vc+(Uc<<2)|0;Vc=Qc+(oc<<2)|0;Qc=Vc-Vb|0;xc=(c[J+((Kc>>>4&3)<<2)>>2]|0)-Vb+(c[K+((Zc>>>4&3)<<2)>>2]|0)<<4;Wb=(Vc|0)<(Vb|0);Vb=Wb?0-Qc|0:Qc;Qc=Wb?0-xc|0:xc;xc=Wc+La+rb+tc|0;rb=kc+sb+cd+zc|0;cd=rb-xc|0;sb=(c[J+(Kc>>>6<<2)>>2]|0)-xc+(c[K+(Zc>>>6<<2)>>2]|0)<<4;Zc=(rb|0)<(xc|0);xc=Zc?0-cd|0:cd;cd=Zc?0-sb|0:sb;c[h+(jo<<3)>>2]=((dd|0)>(Ec*13|0)?12:(dd|0)>(Ec<<3|0)?8:(dd|0)>(Ec*3|0)?4:0)|((Sb|0)>(ad*13|0)?3:(Sb|0)>(ad<<3|0)?2:(Sb|0)>(ad*3|0)&1)|((Fc|0)>(rc*13|0)?768:(Fc|0)>(rc<<3|0)?512:(Fc|0)>(rc*3|0)?256:0)|((Xc|0)>(hc*13|0)?3072:(Xc|0)>(hc<<3|0)?2048:(Xc|0)>(hc*3|0)?1024:0)|((ic|0)>(fc*13|0)?48:(ic|0)>(fc<<3|0)?32:(ic|0)>(fc*3|0)?16:0)|((jc|0)>(Mc*13|0)?192:(jc|0)>(Mc<<3|0)?128:(jc|0)>(Mc*3|0)?64:0)|((Hc|0)>(ec*13|0)?12288:(Hc|0)>(ec<<3|0)?8192:(Hc|0)>(ec*3|0)?4096:0)|((gc|0)>(dc*13|0)?49152:(gc|0)>(dc<<3|0)?32768:(gc|0)>(dc*3|0)?16384:0)|((lc|0)>(ac*13|0)?196608:(lc|0)>(ac<<3|0)?131072:(lc|0)>(ac*3|0)?65536:0)|((cc|0)>(Ma*13|0)?786432:(cc|0)>(Ma<<3|0)?524288:(cc|0)>(Ma*3|0)?262144:0)|((Yc|0)>($b*13|0)?50331648:(Yc|0)>($b<<3|0)?33554432:(Yc|0)>($b*3|0)?16777216:0)|((Na|0)>(_b*13|0)?201326592:(Na|0)>(_b<<3|0)?134217728:(Na|0)>(_b*3|0)?67108864:0)|((Ac|0)>(Zb*13|0)?3145728:(Ac|0)>(Zb<<3|0)?2097152:(Ac|0)>(Zb*3|0)?1048576:0)|((Yb|0)>(Xb*13|0)?12582912:(Yb|0)>(Xb<<3|0)?8388608:(Yb|0)>(Xb*3|0)?4194304:0)|((Qc|0)>(Vb*13|0)?805306368:(Qc|0)>(Vb<<3|0)?536870912:(Qc|0)>(Vb*3|0)?268435456:0)|((cd|0)>(xc*13|0)?-1073741824:(cd|0)>(xc<<3|0)?-2147483648:(cd|0)>(xc*3|0)?1073741824:0);if((Wa|0)==(j|0)){Io=oc;Jo=Uc;Ko=Rc;Lo=_c;Mo=ed;No=$c;Oo=sc;Po=Dc;Qo=vc;Ro=pc;So=tc;To=zc;break}else{xc=oc;cd=Uc;Vb=_c;Qc=Rc;Xb=$c;Yb=ed;ed=vc;$c=sc;Rc=pc;_c=Dc;Uc=tc;oc=zc;nc=nc+1|0;mc=xc;Va=cd;Gc=Vb;yc=Qc;qc=Xb;Cc=Yb}}c[Bd>>2]=Oo;c[sd>>2]=Po;c[Jd>>2]=Qo;c[xd>>2]=Ro;c[Ed>>2]=So;c[zd>>2]=To;c[A>>2]=No;c[Fd>>2]=Oo;c[Gd>>2]=Mo;c[Hd>>2]=Qo;c[C>>2]=Lo;c[pd>>2]=Po;c[Id>>2]=Ko;c[Ad>>2]=Ro;c[Cd>>2]=Jo;c[Kd>>2]=So;c[nd>>2]=Io;c[od>>2]=To;Uo=bd+j|0}else Uo=bd;gd=gd+1|0;if((gd|0)==(l|0))break;else bd=Uo}}break}default:{}}if(!ja)ha=1;else{Jc(ja);ha=1}}while(0);ja=c[L>>2]|0;if(!ja){da=ha;i=z;return da|0}L=c[y>>2]|0;if((L|0)!=(ja|0))c[y>>2]=L+(~((L+-4-ja|0)>>>2)<<2);bc(ja);da=ha;i=z;return da|0} +function hb(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;j=i;i=i+16|0;k=j;l=a[g+8>>0]|0;m=l&255;n=a[g+9>>0]|0;o=n&255;p=a[f+4>>0]|0;q=p&255;if(l<<24>>24==n<<24>>24){if((l&255)>=4)na(970104,961199,671,970114);r=d[f>>0]|0;s=d[f+1>>0]|0;t=s<<3|s>>>2;s=d[f+2>>0]|0;u=s<<3|s>>>2;s=c[509600+(q<<4)+(m<<2)>>2]|0;v=(r<<3|r>>>2)+s|0;if(v>>>0>255)if((v|0)<0){w=0;x=6}else y=255;else{w=v;x=6}if((x|0)==6)y=w;w=t+s|0;if(w>>>0>255)if((w|0)<0){z=0;x=9}else A=255;else{z=w;x=9}if((x|0)==9)A=z;z=u+s|0;if(z>>>0>255)if((z|0)<0){B=0;x=12}else C=255;else{B=z;x=12}if((x|0)==12)C=B;B=d[954663+(A<<1)>>0]<<5|d[953639+(y<<1)>>0]<<11|d[953639+(C<<1)>>0];z=d[954663+(A<<1)+1>>0]<<5|d[953639+(y<<1)+1>>0]<<11|d[953639+(C<<1)+1>>0];if((z|0)==(B|0)&(h^1))if(!B){D=1;E=0;F=0;G=0;H=85}else{I=B+-1|0;J=0;x=16}else{I=z;J=170;x=16}if((x|0)==16){z=B>>>0>>0;C=z?I:B;y=z?B:I;D=C&255;E=y&255;F=(C&65535)>>>8&255;G=(y&65535)>>>8&255;H=(z?J|85:J)&255}a[b>>0]=D;a[b+1>>0]=F;a[b+2>>0]=E;a[b+3>>0]=G;Rc(b+4|0,H|0,4)|0;i=j;return}if((p&255)>6?n<<24>>24==3&(l<<24>>24==0&(a[g+10>>0]|0)==2):0){jb(k,f,q);l=c[k>>2]|0;n=c[k+12>>2]|0;k=d[955175+((l>>>8&255)<<1)>>0]<<5|d[954151+((l&255)<<1)>>0]<<11|d[954151+((l>>>16&255)<<1)>>0];l=d[955175+((n>>>8&255)<<1)>>0]<<5|d[954151+((n&255)<<1)>>0]<<11|d[954151+((n>>>16&255)<<1)>>0];if((l|0)==(k|0))if(!k){K=1;L=0;M=0;N=0;O=1;P=1}else{Q=k+-1|0;R=0;x=23}else{Q=l;R=1;x=23}if((x|0)==23){l=k>>>0>>0;n=l?Q:k;p=l?k:Q;K=n&255;L=p&255;M=(n&65535)>>>8&255;N=(p&65535)>>>8&255;O=l?0:R;P=l&1}a[b>>0]=K;a[b+1>>0]=M;a[b+2>>0]=L;a[b+3>>0]=N;N=0;while(1){L=g+N|0;M=b+4+N|0;K=(a[L>>0]&3)==3?O:P;if((K|N)>>>0>=4){x=27;break}l=d[M>>0]&252|K;a[M>>0]=l;K=(a[L>>0]&12)==12?O:P;if((K|N)>>>0>=4){x=27;break}R=l&243|K<<2;a[M>>0]=R;K=(a[L>>0]&48)==48?O:P;if((K|N)>>>0>=4){x=27;break}l=R&207|K<<4;a[M>>0]=l;if((N|3|0)!=3){x=25;break}K=(d[L>>0]|0)>191?O:P;if((K|N)>>>0>=4){x=27;break}a[M>>0]=l&63|K<<6;N=N+1|0;if(N>>>0>=4){x=33;break}}if((x|0)==25)na(969854,969718,716,970023);else if((x|0)==27)na(970069,961199,801,970010);else if((x|0)==33){i=j;return}}x=q<<5;q=(c[509024+(m<<4)+(o<<2)>>2]|0)*10|0;o=(((d[f>>0]|0)+x|0)*60|0)+q|0;m=(((d[f+1>>0]|0)+x|0)*60|0)+q|0;N=(((d[f+2>>0]|0)+x|0)*60|0)+q|0;q=(e[633632+(m<<2)+2>>1]|0)+(e[572192+(o<<2)+2>>1]|0)+(e[572192+(N<<2)+2>>1]|0)|0;x=(e[633632+((m|1)<<2)+2>>1]|0)+(e[572192+((o|1)<<2)+2>>1]|0)+(e[572192+((N|1)<<2)+2>>1]|0)|0;f=x>>>0>>0;P=f?x:q;q=(e[633632+(m+2<<2)+2>>1]|0)+(e[572192+(o+2<<2)+2>>1]|0)+(e[572192+(N+2<<2)+2>>1]|0)|0;x=q>>>0

    >>0;O=x?q:P;P=(e[633632+(m+3<<2)+2>>1]|0)+(e[572192+(o+3<<2)+2>>1]|0)+(e[572192+(N+3<<2)+2>>1]|0)|0;q=P>>>0>>0;K=q?P:O;O=(e[633632+(m+4<<2)+2>>1]|0)+(e[572192+(o+4<<2)+2>>1]|0)+(e[572192+(N+4<<2)+2>>1]|0)|0;P=O>>>0>>0;l=P?O:K;K=(e[633632+(m+5<<2)+2>>1]|0)+(e[572192+(o+5<<2)+2>>1]|0)+(e[572192+(N+5<<2)+2>>1]|0)|0;O=K>>>0>>0;M=O?K:l;l=(e[633632+(m+6<<2)+2>>1]|0)+(e[572192+(o+6<<2)+2>>1]|0)+(e[572192+(N+6<<2)+2>>1]|0)|0;K=l>>>0>>0;L=K?l:M;M=(e[633632+(m+7<<2)+2>>1]|0)+(e[572192+(o+7<<2)+2>>1]|0)+(e[572192+(N+7<<2)+2>>1]|0)|0;l=M>>>0>>0;R=l?M:L;L=(e[633632+(m+8<<2)+2>>1]|0)+(e[572192+(o+8<<2)+2>>1]|0)+(e[572192+(N+8<<2)+2>>1]|0)|0;M=L>>>0>>0;p=((e[633632+(m+9<<2)+2>>1]|0)+(e[572192+(o+9<<2)+2>>1]|0)+(e[572192+(N+9<<2)+2>>1]|0)|0)>>>0<(M?L:R)>>>0?9:M?8:l?7:K?6:O?5:P?4:q?3:x?2:f&1;f=p+o|0;o=p+m|0;m=p+N|0;N=d[572192+(f<<2)>>0]<<11&63488|d[572192+(m<<2)>>0]|d[633632+(o<<2)>>0]<<5;x=d[572192+(f<<2)+1>>0]<<11&63488|d[572192+(m<<2)+1>>0]|d[633632+(o<<2)+1>>0]<<5;o=N>>>0>>0;m=o?x:N;f=o?N:x;x=o?958255:955695;a[b>>0]=m;o=b+1|0;a[o>>0]=(m&65535)>>>8;N=b+2|0;a[N>>0]=f;q=b+3|0;a[q>>0]=(f&65535)>>>8;if((m|0)!=(f|0)){a[b+4>>0]=a[(d[g>>0]|0)+(x+(p<<8))>>0]|0;a[b+5>>0]=a[(d[g+1>>0]|0)+(x+(p<<8))>>0]|0;a[b+6>>0]=a[(d[g+2>>0]|0)+(x+(p<<8))>>0]|0;a[b+7>>0]=a[(d[g+3>>0]|0)+(x+(p<<8))>>0]|0;i=j;return}if(h)S=0;else{h=(m|0)==0;p=h?0:m+-1|0;x=h?1:m;a[b>>0]=x;a[o>>0]=(x&65535)>>>8;a[N>>0]=p;a[q>>0]=(p&65535)>>>8;S=h?85:0}Rc(b+4|0,S|0,4)|0;i=j;return}function ib(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;h=i;i=i+16|0;j=h;k=b+4|0;l=c[k>>2]&2147450878|-2147450880;c[k>>2]=l;m=a[g+8>>0]|0;n=m&255;o=a[g+9>>0]|0;p=o&255;q=a[f+4>>0]|0;r=q&255;if(m<<24>>24!=o<<24>>24){if((q&255)>6?o<<24>>24==3&(m<<24>>24==0&(a[g+10>>0]|0)==2):0){jb(j,f,r);o=c[j>>2]|0;q=j+12|0;j=a[966098+((o&255)<<1)+1>>0]|0;s=a[966098+((o>>>8&255)<<1)+1>>0]|0;t=a[965586+((o>>>16&255)<<1)+1>>0]|0;if(!(((s|j)&255)<32&(t&255)<16))na(971804,961199,7010,977709);o=d[q+2>>0]|0;u=d[q+1>>0]|0;v=d[q>>0]|0;q=(s&255)<<5&992|(j&255)<<10&31744|(t&255)<<1&30|c[k>>2]&-32767;c[k>>2]=q;t=a[966098+(v<<1)+1>>0]|0;v=a[966098+(u<<1)+1>>0]|0;u=a[966098+(o<<1)+1>>0]|0;if(((v|t|u)&255)>=32)na(970688,961199,7019,977756);c[k>>2]=(t&255)<<26&2080374784|q&-2147418113|(v&255)<<21&65011712|(u&255)<<16&2031616;a[b>>0]=a[g>>0]|0;a[b+1>>0]=a[g+1>>0]|0;a[b+2>>0]=a[g+2>>0]|0;a[b+3>>0]=a[g+3>>0]|0;i=h;return}u=r<<5;v=(c[509536+(n<<4)+(p<<2)>>2]|0)*10|0;p=(((d[f>>0]|0)+u|0)*60|0)+v|0;q=(((d[f+1>>0]|0)+u|0)*60|0)+v|0;t=(((d[f+2>>0]|0)+u|0)*60|0)+v|0;v=(e[764704+(q<<2)+2>>1]|0)+(e[764704+(p<<2)+2>>1]|0)+(e[887584+(t<<2)+2>>1]|0)|0;u=(e[764704+((q|1)<<2)+2>>1]|0)+(e[764704+((p|1)<<2)+2>>1]|0)+(e[887584+((t|1)<<2)+2>>1]|0)|0;o=u>>>0>>0;j=o?u:v;v=(e[764704+(q+2<<2)+2>>1]|0)+(e[764704+(p+2<<2)+2>>1]|0)+(e[887584+(t+2<<2)+2>>1]|0)|0;u=v>>>0>>0;s=u?v:j;j=(e[764704+(q+3<<2)+2>>1]|0)+(e[764704+(p+3<<2)+2>>1]|0)+(e[887584+(t+3<<2)+2>>1]|0)|0;v=j>>>0>>0;w=v?j:s;s=(e[764704+(q+4<<2)+2>>1]|0)+(e[764704+(p+4<<2)+2>>1]|0)+(e[887584+(t+4<<2)+2>>1]|0)|0;j=s>>>0>>0;x=j?s:w;w=(e[764704+(q+5<<2)+2>>1]|0)+(e[764704+(p+5<<2)+2>>1]|0)+(e[887584+(t+5<<2)+2>>1]|0)|0;s=w>>>0>>0;y=s?w:x;x=(e[764704+(q+6<<2)+2>>1]|0)+(e[764704+(p+6<<2)+2>>1]|0)+(e[887584+(t+6<<2)+2>>1]|0)|0;w=x>>>0>>0;z=w?x:y;y=(e[764704+(q+7<<2)+2>>1]|0)+(e[764704+(p+7<<2)+2>>1]|0)+(e[887584+(t+7<<2)+2>>1]|0)|0;x=y>>>0>>0;A=x?y:z;z=(e[764704+(q+8<<2)+2>>1]|0)+(e[764704+(p+8<<2)+2>>1]|0)+(e[887584+(t+8<<2)+2>>1]|0)|0;y=z>>>0>>0;B=((e[764704+(q+9<<2)+2>>1]|0)+(e[764704+(p+9<<2)+2>>1]|0)+(e[887584+(t+9<<2)+2>>1]|0)|0)>>>0<(y?z:A)>>>0?9:y?8:x?7:w?6:s?5:j?4:v?3:u?2:o&1;o=B+p|0;p=a[764704+(o<<2)>>0]|0;u=B+q|0;q=a[764704+(u<<2)>>0]|0;v=B+t|0;t=a[887584+(v<<2)>>0]|0;if(!(((q|p)&255)<32&(t&255)<16))na(971804,961199,7010,977709);j=(q&255)<<5&992|(p&255)<<10&31744|(t&255)<<1&30|c[k>>2]&-32767;c[k>>2]=j;t=a[764704+(o<<2)+1>>0]|0;o=a[764704+(u<<2)+1>>0]|0;u=a[887584+(v<<2)+1>>0]|0;if(((o|t|u)&255)>=32)na(970688,961199,7019,977756);c[k>>2]=(t&255)<<26&2080374784|j&-2147418113|(o&255)<<21&65011712|(u&255)<<16&2031616;u=a[g>>0]|0;if((B|0)==6){a[b>>0]=u;a[b+1>>0]=a[g+1>>0]|0;a[b+2>>0]=a[g+2>>0]|0;a[b+3>>0]=a[g+3>>0]|0;i=h;return}else{o=u&255;u=d[g+1>>0]|0;j=d[g+2>>0]|0;t=d[g+3>>0]|0;g=d[(u>>>2&3)+(977669+(B<<2))>>0]<<2|d[(u&3)+(977669+(B<<2))>>0]|d[(u>>>4&3)+(977669+(B<<2))>>0]<<4|d[(u>>>6)+(977669+(B<<2))>>0]<<6;u=d[(j>>>2&3)+(977669+(B<<2))>>0]<<2|d[(j&3)+(977669+(B<<2))>>0]|d[(j>>>4&3)+(977669+(B<<2))>>0]<<4|d[(j>>>6)+(977669+(B<<2))>>0]<<6;j=d[(t>>>2&3)+(977669+(B<<2))>>0]<<2|d[(t&3)+(977669+(B<<2))>>0]|d[(t>>>4&3)+(977669+(B<<2))>>0]<<4|d[(t>>>6)+(977669+(B<<2))>>0]<<6;a[b>>0]=d[(o>>>2&3)+(977669+(B<<2))>>0]<<2|d[(o&3)+(977669+(B<<2))>>0]|d[(o>>>4&3)+(977669+(B<<2))>>0]<<4|d[(o>>>6)+(977669+(B<<2))>>0]<<6;a[b+1>>0]=g;a[b+2>>0]=u;a[b+3>>0]=j;i=h;return}}else{if((m&255)>=4)na(970104,961199,671,970114);m=d[f>>0]|0;j=d[f+1>>0]|0;u=j<<3|j>>>2;j=d[f+2>>0]|0;f=j<<3|j>>>2;j=c[509600+(r<<4)+(n<<2)>>2]|0;n=(m<<3|m>>>2)+j|0;if(n>>>0>255)if((n|0)<0){C=0;D=6}else E=255;else{C=n;D=6}if((D|0)==6)E=C;C=u+j|0;if(C>>>0>255)if((C|0)<0){F=0;D=9}else G=255;else{F=C;D=9}if((D|0)==9)G=F;F=f+j|0;if(F>>>0>255)if((F|0)<0){H=0;D=12}else I=255;else{H=F;D=12}if((D|0)==12)I=H;H=a[964562+(E<<1)>>0]|0;D=a[964562+(G<<1)>>0]|0;F=a[964050+(I<<1)>>0]|0;if(!(((D|H)&255)<32&(F&255)<16))na(971804,961199,7010,977709);j=(D&255)<<5&992|(H&255)<<10&31744|(F&255)<<1&30;c[k>>2]=j|l&-32768;l=a[964562+(E<<1)+1>>0]|0;E=a[964562+(G<<1)+1>>0]|0;G=a[964050+(I<<1)+1>>0]|0;if(((E|l|G)&255)>=32)na(970688,961199,7019,977756);c[k>>2]=(l&255)<<26|(j|-2147450880)|(E&255)<<21&65011712|(G&255)<<16&2031616;a[b>>0]=85;a[b+1>>0]=85;a[b+2>>0]=85;a[b+3>>0]=85;i=h;return}}function jb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;f=c[d>>2]|0;d=f&255;g=f>>>5;h=f>>>10&63;i=f>>>13;j=f>>>18&63;f=d<<3&248|d>>>2;d=c[509600+(e<<4)>>2]|0;k=f+d|0;if(k>>>0>255)if((k|0)<0){l=0;m=3}else n=255;else{l=k;m=3}if((m|0)==3)n=l;l=g&248|h;h=d+l|0;if(h>>>0>255)if((h|0)<0){o=0;m=6}else p=255;else{o=h;m=6}if((m|0)==6)p=o;o=i&248|j;j=d+o|0;if(j>>>0>255)if((j|0)<0){q=0;m=9}else r=255;else{q=j;m=9}if((m|0)==9)r=q;a[b>>0]=n;a[b+1>>0]=p;a[b+2>>0]=r;a[b+3>>0]=-1;r=b+4|0;p=c[509600+(e<<4)+4>>2]|0;n=p+f|0;if(n>>>0>255)if((n|0)<0){s=0;m=12}else t=255;else{s=n;m=12}if((m|0)==12)t=s;s=p+l|0;if(s>>>0>255)if((s|0)<0){u=0;m=15}else v=255;else{u=s;m=15}if((m|0)==15)v=u;u=p+o|0;if(u>>>0>255)if((u|0)<0){w=0;m=18}else x=255;else{w=u;m=18}if((m|0)==18)x=w;a[r>>0]=t;a[r+1>>0]=v;a[r+2>>0]=x;a[r+3>>0]=-1;r=b+8|0;x=c[509600+(e<<4)+8>>2]|0;v=x+f|0;if(v>>>0>255)if((v|0)<0){y=0;m=21}else z=255;else{y=v;m=21}if((m|0)==21)z=y;y=x+l|0;if(y>>>0>255)if((y|0)<0){A=0;m=24}else B=255;else{A=y;m=24}if((m|0)==24)B=A;A=x+o|0;if(A>>>0>255)if((A|0)<0){C=0;m=27}else D=255;else{C=A;m=27}if((m|0)==27)D=C;a[r>>0]=z;a[r+1>>0]=B;a[r+2>>0]=D;a[r+3>>0]=-1;r=b+12|0;b=c[509600+(e<<4)+12>>2]|0;e=b+f|0;if(e>>>0>255)if((e|0)<0){E=0;m=30}else F=255;else{E=e;m=30}if((m|0)==30)F=E;E=b+l|0;if(E>>>0>255)if((E|0)<0){G=0;m=33}else H=255;else{G=E;m=33}if((m|0)==33)H=G;G=b+o|0;if(G>>>0>255)if((G|0)<0)I=0;else{J=255;K=F&255;a[r>>0]=K;L=H&255;M=r+1|0;a[M>>0]=L;N=J&255;O=r+2|0;a[O>>0]=N;P=r+3|0;a[P>>0]=-1;return}else I=G;J=I;K=F&255;a[r>>0]=K;L=H&255;M=r+1|0;a[M>>0]=L;N=J&255;O=r+2|0;a[O>>0]=N;P=r+3|0;a[P>>0]=-1;return}function kb(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=b;Rc(a+28|0,0,148)|0;ab(a+176|0);return}function lb(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(e>>>0<78)return 0;if(((d[c+1>>0]|0)<<8|(d[c>>0]|0)|0)!=17011)return 0;if(((d[c+3>>0]|0)<<8|(d[c+2>>0]|0)|0)!=19)return 0;if(((d[c+5>>0]|0)<<8|(d[c+4>>0]|0)|0)!=77)return 0;if((((d[c+10>>0]|0)<<16|(d[c+11>>0]|0)<<24|(d[c+9>>0]|0)<<8|(d[c+8>>0]|0))+77|0)>>>0>e>>>0)return 0;b=(d[c+18>>0]|0)<<8|(d[c+19>>0]|0)<<16|(d[c+17>>0]|0);if(!b)return 0;f=d[c+14>>0]|0;g=(d[c+15>>0]|0)<<8|(d[c+16>>0]|0)<<16|f;if((g|0)==0|b>>>0>g>>>0)return 0;b=a[c+21>>0]|0;if((b&4)!=0&(f&1|0)!=0|(b&1)==0)return 0;b=(d[c+67>>0]|0)<<16|(d[c+68>>0]|0)<<24|(d[c+66>>0]|0)<<8|(d[c+65>>0]|0);if(b>>>0>>0)return (e-b|0)>>>0>=(g*23|0)>>>0|0;else return 0;return 0}function mb(a,b,c){a=a|0;b=b|0;c=c|0;var e=0;if(c>>>0<78)return 0;if(((d[b+1>>0]|0)<<8|(d[b>>0]|0)|0)!=17011)return 0;if(((d[b+3>>0]|0)<<8|(d[b+2>>0]|0)|0)!=19)return 0;if(((d[b+5>>0]|0)<<8|(d[b+4>>0]|0)|0)!=77)return 0;if((((d[b+10>>0]|0)<<16|(d[b+11>>0]|0)<<24|(d[b+9>>0]|0)<<8|(d[b+8>>0]|0))+77|0)>>>0>c>>>0)return 0;a=(d[b+15>>0]|0)<<8|(d[b+16>>0]|0)<<16|(d[b+14>>0]|0);if(!a)return 0;if(!((d[b+18>>0]|0)<<8|(d[b+19>>0]|0)<<16|(d[b+17>>0]|0)))return 0;e=(d[b+67>>0]|0)<<16|(d[b+68>>0]|0)<<24|(d[b+66>>0]|0)<<8|(d[b+65>>0]|0);if(e>>>0>>0)return (c-e|0)>>>0>=(a*23|0)>>>0|0;else return 0;return 0}function nb(a,b,c){a=a|0;b=b|0;c=c|0;var e=0;if(!(mb(0,b,c)|0)){e=0;return e|0}e=(d[b+18>>0]|0)<<8|(d[b+19>>0]|0)<<16|(d[b+17>>0]|0);return e|0}function ob(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!(mb(0,e,f)|0)){i=0;return i|0}f=d[e+15>>0]<<8|d[e+16>>0]<<16|d[e+14>>0];if(!f){i=0;return i|0}b=e+(d[e+67>>0]<<16|d[e+68>>0]<<24|d[e+66>>0]<<8|d[e+65>>0])|0;j=0;while(1){if((d[b+(j*23|0)+1>>0]<<8|d[b+(j*23|0)+2>>0]<<16|d[b+(j*23|0)>>0]|0)==(h|0)?(a[b+(j*23|0)+3>>0]|0)==0:0){k=j;break}j=j+1|0;if(j>>>0>=f>>>0){i=0;l=14;break}}if((l|0)==14)return i|0;if((k|0)<0){i=0;return i|0}if((d[e+18>>0]<<8|d[e+19>>0]<<16|d[e+17>>0])>>>0<=h>>>0){i=0;return i|0}l=k+1|0;if(l>>>0>>0){j=l;l=1;while(1){if((d[b+(j*23|0)+1>>0]<<8|d[b+(j*23|0)+2>>0]<<16|d[b+(j*23|0)>>0]|0)!=(h|0)){m=l;break}n=(d[b+(j*23|0)+3>>0]|0)+1|0;o=l>>>0>n>>>0?l:n;j=j+1|0;if(j>>>0>=f>>>0){m=o;break}else l=o}if(m>>>0>16){i=0;return i|0}else p=m}else p=1;c[g>>2]=h;c[g+4>>2]=p;a[g+40>>0]=(d[e+21>>0]|0)>>>2&1;a[g+41>>0]=(d[b+(k*23|0)+4>>0]|0)>>>1&1;e=b+(k*23|0)+10|0;p=b+(k*23|0)+9|0;c[g+16>>2]=(d[e>>0]<<8|d[p>>0])<<2;h=b+(k*23|0)+12|0;m=b+(k*23|0)+11|0;c[g+20>>2]=(d[h>>0]<<8|d[m>>0])<<2;c[g+8>>2]=d[b+(k*23|0)+6>>0]<<8|d[b+(k*23|0)+5>>0];c[g+12>>2]=d[b+(k*23|0)+8>>0]<<8|d[b+(k*23|0)+7>>0];b=d[e>>0]<<8|d[p>>0];c[g+24>>2]=b;p=d[h>>0]<<8|d[m>>0];c[g+28>>2]=p;c[g+32>>2]=Z(p,b)|0;c[g+36>>2]=k;i=1;return i|0}function pb(a,b,e,f,g,h,i,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0;if(!(mb(0,b,e)|0)){k=0;return k|0}e=(d[b+15>>0]|0)<<8|(d[b+16>>0]|0)<<16|(d[b+14>>0]|0);if(!e){k=0;return k|0}a=b+((d[b+67>>0]|0)<<16|(d[b+68>>0]|0)<<24|(d[b+66>>0]|0)<<8|(d[b+65>>0]|0))|0;l=0;while(1){if(((d[a+(l*23|0)+1>>0]|0)<<8|(d[a+(l*23|0)+2>>0]|0)<<16|(d[a+(l*23|0)>>0]|0)|0)==(f|0)?(d[a+(l*23|0)+3>>0]|0|0)==(g|0):0){m=l;break}l=l+1|0;if(l>>>0>=e>>>0){k=0;n=10;break}}if((n|0)==10)return k|0;if((m|0)<0){k=0;return k|0}if(((d[b+18>>0]|0)<<8|(d[b+19>>0]|0)<<16|(d[b+17>>0]|0))>>>0<=f>>>0){k=0;return k|0}c[h>>2]=(d[a+(m*23|0)+6>>0]|0)<<8|(d[a+(m*23|0)+5>>0]|0);c[i>>2]=(d[a+(m*23|0)+8>>0]|0)<<8|(d[a+(m*23|0)+7>>0]|0);c[j>>2]=Z((d[a+(m*23|0)+12>>0]|0)<<8|(d[a+(m*23|0)+11>>0]|0),(d[a+(m*23|0)+10>>0]|0)<<8|(d[a+(m*23|0)+9>>0]|0))|0;k=1;return k|0}function qb(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;if(!(mb(0,e,f)|0)){j=0;return j|0}f=(d[e+15>>0]|0)<<8|(d[e+16>>0]|0)<<16|(d[e+14>>0]|0);if(!f){j=0;return j|0}b=e+((d[e+67>>0]|0)<<16|(d[e+68>>0]|0)<<24|(d[e+66>>0]|0)<<8|(d[e+65>>0]|0))|0;k=0;while(1){if(((d[b+(k*23|0)+1>>0]|0)<<8|(d[b+(k*23|0)+2>>0]|0)<<16|(d[b+(k*23|0)>>0]|0)|0)==(h|0)?(d[b+(k*23|0)+3>>0]|0|0)==(i|0):0){l=k;break}k=k+1|0;if(k>>>0>=f>>>0){j=0;m=10;break}}if((m|0)==10)return j|0;if((l|0)<0){j=0;return j|0}if(((d[e+18>>0]|0)<<8|(d[e+19>>0]|0)<<16|(d[e+17>>0]|0))>>>0<=h>>>0){j=0;return j|0}c[g>>2]=h;c[g+4>>2]=i;a[g+40>>0]=(d[e+21>>0]|0)>>>2&1;a[g+41>>0]=(d[b+(l*23|0)+4>>0]|0)>>>1&1;e=b+(l*23|0)+10|0;i=b+(l*23|0)+9|0;c[g+16>>2]=((d[e>>0]|0)<<8|(d[i>>0]|0))<<2;h=b+(l*23|0)+12|0;m=b+(l*23|0)+11|0;c[g+20>>2]=((d[h>>0]|0)<<8|(d[m>>0]|0))<<2;c[g+8>>2]=(d[b+(l*23|0)+6>>0]|0)<<8|(d[b+(l*23|0)+5>>0]|0);c[g+12>>2]=(d[b+(l*23|0)+8>>0]|0)<<8|(d[b+(l*23|0)+7>>0]|0);b=(d[e>>0]|0)<<8|(d[i>>0]|0);c[g+24>>2]=b;i=(d[h>>0]|0)<<8|(d[m>>0]|0);c[g+28>>2]=i;c[g+32>>2]=Z(i,b)|0;c[g+36>>2]=l;j=1;return j|0}function rb(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if((c[a+4>>2]|0)!=(c[a>>2]|0)){f=1;return f|0}if(!(mb(0,b,e)|0)){f=0;return f|0}g=(d[b+43>>0]|0)<<16|(d[b+44>>0]|0)<<24|(d[b+42>>0]|0)<<8|(d[b+41>>0]|0);if(g>>>0>e>>>0){f=0;return f|0}h=(d[b+52>>0]|0)<<16|(d[b+53>>0]|0)<<24|(d[b+51>>0]|0)<<8|(d[b+50>>0]|0);if(h>>>0>e>>>0){f=0;return f|0}i=b+57|0;j=b+60|0;k=b+59|0;l=b+58|0;m=(d[k>>0]|0)<<16|(d[j>>0]|0)<<24|(d[l>>0]|0)<<8|(d[i>>0]|0);if(m>>>0>e>>>0){f=0;return f|0}n=(d[b+46>>0]|0)<<8|(d[b+47>>0]|0)<<16|(d[b+45>>0]|0);if(n>>>0>(e-g|0)>>>0){f=0;return f|0}o=(d[b+55>>0]|0)<<8|(d[b+56>>0]|0)<<16|(d[b+54>>0]|0);if(o>>>0>(e-h|0)>>>0){f=0;return f|0}p=b+61|0;q=b+64|0;r=b+63|0;s=b+62|0;if(((d[r>>0]|0)<<16|(d[q>>0]|0)<<24|(d[s>>0]|0)<<8|(d[p>>0]|0))>>>0>(e-m|0)>>>0){f=0;return f|0}if(!(bb(a,(d[b+40>>0]|0)<<8|(d[b+39>>0]|0),b+g|0,n,(d[b+49>>0]|0)<<8|(d[b+48>>0]|0),b+h|0,o)|0)){f=0;return f|0}f=fb(a,b+((d[k>>0]|0)<<16|(d[j>>0]|0)<<24|(d[l>>0]|0)<<8|(d[i>>0]|0))|0,(d[r>>0]|0)<<16|(d[q>>0]|0)<<24|(d[s>>0]|0)<<8|(d[p>>0]|0))|0;return f|0}function sb(a,b,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if(!((k&2|0)==0?(c[a+4>>2]|0)!=(c[a>>2]|0):0)){p=0;return p|0}if(!(mb(0,b,e)|0)){p=0;return p|0}if(((d[b+15>>0]|0)<<8|(d[b+16>>0]|0)<<16|(d[b+14>>0]|0))>>>0<=f>>>0){p=0;return p|0}q=b+((d[b+67>>0]|0)<<16|(d[b+68>>0]|0)<<24|(d[b+66>>0]|0)<<8|(d[b+65>>0]|0))|0;r=q+(f*23|0)|0;s=(d[q+(f*23|0)+10>>0]|0)<<8|(d[q+(f*23|0)+9>>0]|0);t=(d[q+(f*23|0)+12>>0]|0)<<8|(d[q+(f*23|0)+11>>0]|0);u=Z(t,s)|0;do if((i+-14|0)>>>0<8){if(!l)v=(d[q+(f*23|0)+6>>0]|0)<<8|(d[q+(f*23|0)+5>>0]|0);else v=l;if(!o)w=(d[q+(f*23|0)+8>>0]|0)<<8|(d[q+(f*23|0)+7>>0]|0);else w=o;if((Z(w,v)|0)>>>0>h>>>0){p=0;return p|0}else{x=v;y=w;z=13}}else if((i|0)==12){if((Z((((d[q+(f*23|0)+8>>0]|0)<<8|(d[q+(f*23|0)+7>>0]|0))+3|0)>>>2,(((d[q+(f*23|0)+6>>0]|0)<<8|(d[q+(f*23|0)+5>>0]|0))+7|0)>>>3)|0)>>>0>h>>>0)p=0;else{A=l;B=o;break}return p|0}else{if(u>>>0>h>>>0)p=0;else{x=l;y=o;z=13;break}return p|0}while(0);if((z|0)==13)if((i|0)!=0&(i+-3|0)>>>0<2){z=s<<2;if(!s){p=0;return p|0}if(z+262143&z){p=0;return p|0}z=t<<2;if(!t){p=0;return p|0}if(z+262143&z){p=0;return p|0}else{A=x;B=y}}else{A=x;B=y}y=(d[q+(f*23|0)+15>>0]|0)<<16|(d[q+(f*23|0)+16>>0]|0)<<24|(d[q+(f*23|0)+14>>0]|0)<<8|(d[q+(f*23|0)+13>>0]|0);if(y>>>0>e>>>0){p=0;return p|0}x=(d[q+(f*23|0)+19>>0]|0)<<16|(d[q+(f*23|0)+20>>0]|0)<<24|(d[q+(f*23|0)+18>>0]|0)<<8|(d[q+(f*23|0)+17>>0]|0);if((e-y|0)>>>0>>0){p=0;return p|0}p=gb(a,g,s,t,b+y|0,x,i,j,(k&1|0)!=0,(k&8|0)==0,b,r,A,m,(k&16|0)!=0,n,B)|0;return p|0}function tb(b,e,f,g,h,j,k,l,m,n,o,p){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;q=i;i=i+32|0;r=q+12|0;s=q;switch(l|0){case 20:case 19:case 18:case 11:case 9:case 8:case 4:case 2:case 0:{t=8;break}case 21:case 17:case 12:case 10:case 5:case 3:case 1:case 7:case 6:{t=16;break}case 13:{t=64;break}case 16:case 15:case 14:{t=32;break}default:na(961599,961199,10305,961673)}if((c[b+4>>2]|0)==(c[b>>2]|0)){u=0;i=q;return u|0}v=m>>>2;if(m&2){u=0;i=q;return u|0}if(!(mb(0,e,f)|0)){u=0;i=q;return u|0}w=e+((d[e+67>>0]|0)<<16|(d[e+68>>0]|0)<<24|(d[e+66>>0]|0)<<8|(d[e+65>>0]|0))|0;x=(d[e+21>>0]|0)>>>2;y=(d[e+15>>0]|0)<<8|(d[e+16>>0]|0)<<16|(d[e+14>>0]|0);if(!y){u=0;i=q;return u|0}else z=0;while(1){if(((d[w+(z*23|0)+1>>0]|0)<<8|(d[w+(z*23|0)+2>>0]|0)<<16|(d[w+(z*23|0)>>0]|0)|0)==(g|0)?(d[w+(z*23|0)+3>>0]|0|0)==(h|0):0){A=z;break}z=z+1|0;if(z>>>0>=y>>>0){u=0;B=126;break}}if((B|0)==126){i=q;return u|0}if((A|0)<0){u=0;i=q;return u|0}B=x&1;x=(l|0)==9&(B|0)==0?8:l;if(a[w+(A*23|0)+4>>0]&1){u=0;i=q;return u|0}l=(B|0)!=0;if(l){z=A+1|0;if(z>>>0>=y>>>0){u=0;i=q;return u|0}if(!(a[w+(z*23|0)+4>>0]&1)){u=0;i=q;return u|0}y=w+(A*23|0)+10|0;h=a[y>>0]|0;g=w+(A*23|0)+9|0;C=a[g>>0]|0;if(((h&255)<<8|C&255|0)!=((d[w+(z*23|0)+10>>0]|0)<<8|(d[w+(z*23|0)+9>>0]|0)|0)){u=0;i=q;return u|0}D=w+(A*23|0)+12|0;E=a[D>>0]|0;F=w+(A*23|0)+11|0;G=a[F>>0]|0;if(((E&255)<<8|G&255|0)==((d[w+(z*23|0)+12>>0]|0)<<8|(d[w+(z*23|0)+11>>0]|0)|0)){H=g;I=D;J=F;K=y;L=h;M=C;N=E;O=G}else{u=0;i=q;return u|0}}else{G=w+(A*23|0)+10|0;E=w+(A*23|0)+9|0;C=w+(A*23|0)+12|0;h=w+(A*23|0)+11|0;H=E;I=C;J=h;K=G;L=a[G>>0]|0;M=a[E>>0]|0;N=a[C>>0]|0;O=a[h>>0]|0}h=Z((N&255)<<8|O&255,(L&255)<<8|M&255)|0;if((x&-2|0)==8&h>>>0>>0)Rc(j+(Z(h,t)|0)|0,0,Z(k-h|0,t)|0)|0;do switch(x|0){case 0:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,0,t,m,n,o,0,0)|0;i=q;return u|0}case 2:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,1,t,m,n,o,0,0)|0;i=q;return u|0}case 4:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,2,t,m,n,o,0,0)|0;i=q;return u|0}case 8:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,3,t,m,n,o,0,0)|0;i=q;return u|0}case 9:{if(!l)na(961601,961199,9840,961629);c[s>>2]=0;M=s+4|0;c[M>>2]=0;c[s+8>>2]=0;do if(h)if(h>>>0>1073741823)$b(s);else{L=h<<2;O=ac(L)|0;c[s>>2]=O;N=O+(h<<2)|0;c[s+8>>2]=N;Rc(O|0,0,L|0)|0;c[M>>2]=N;P=s;Q=O;break}else{P=s;Q=0}while(0);if(sb(b,e,f,A+1|0,Q,h,13,4,m,(d[K>>0]|0)<<8|(d[H>>0]|0),o,0,0)|0)R=sb(b,e,f,A,j,k,4,t,m,n,o,c[P>>2]|0,0)|0;else R=0;O=c[s>>2]|0;if(!O){u=R;i=q;return u|0}N=c[M>>2]|0;if((N|0)!=(O|0))c[M>>2]=N+(~((N+-4-O|0)>>>2)<<2);bc(O);u=R;i=q;return u|0}case 6:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,5,t,m,n,o,0,0)|0;i=q;return u|0}case 7:{if((t|0)!=16)na(961651,961199,9885,961629);O=sb(b,e,f,A,j,k,6,16,m,n,o,0,0)|0;if(!(l&O)){u=O;i=q;return u|0}u=sb(b,e,f,A+1|0,j,k,7,16,m,n,o,0,0)|0;i=q;return u|0}case 1:{if((t|0)!=16)na(961651,961199,9904,961629);if(l){if(!(sb(b,e,f,A+1|0,j,k,8,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}}else{O=(d[K>>0]|0)<<8|(d[H>>0]|0);N=(d[I>>0]|0)<<8|(d[J>>0]|0);if(N){L=((n|0)==0?O:n)<<4;C=(O|0)==0;E=0;do{if(!C){G=Z(L,E)|0;w=0;while(1){y=j+G|0;a[y>>0]=255;a[y+1>>0]=29;y=j+(G|2)|0;a[y>>0]=a[953632]|0;a[y+1>>0]=a[953633]|0;a[y+2>>0]=a[953634]|0;a[y+3>>0]=a[953635]|0;a[y+4>>0]=a[953636]|0;a[y+5>>0]=a[953637]|0;w=w+1|0;if((w|0)==(O|0))break;else G=G+16|0}}E=E+1|0}while((E|0)!=(N|0))}}u=sb(b,e,f,A,j+8|0,k,0,16,m,n,o,0,0)|0;i=q;return u|0}case 3:{if((t|0)!=16)na(961651,961199,9940,961629);if(l){if(!(sb(b,e,f,A+1|0,j,k,2,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}}else{N=(d[K>>0]|0)<<8|(d[H>>0]|0);E=(d[I>>0]|0)<<8|(d[J>>0]|0);a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;if(E){O=((n|0)==0?N:n)<<4;L=(N|0)==0;C=0;do{if(!L){M=Z(O,C)|0;G=0;while(1){a[j+M>>0]=-1;a[j+(M|1)>>0]=-1;w=j+(M|2)|0;a[w>>0]=a[r>>0]|0;a[w+1>>0]=a[r+1>>0]|0;a[w+2>>0]=a[r+2>>0]|0;a[w+3>>0]=a[r+3>>0]|0;a[w+4>>0]=a[r+4>>0]|0;a[w+5>>0]=a[r+5>>0]|0;G=G+1|0;if((G|0)==(N|0))break;else M=M+16|0}}C=C+1|0}while((C|0)!=(E|0))}}u=sb(b,e,f,A,j+8|0,k,1,16,m|8,n,o,0,0)|0;i=q;return u|0}case 5:{if((t|0)!=16)na(961651,961199,9974,961629);if(!(sb(b,e,f,A,j,k,2,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}if(l){u=sb(b,e,f,A+1|0,j+8|0,k,2,16,m,n,o,0,0)|0;i=q;return u|0}E=(d[K>>0]|0)<<8|(d[H>>0]|0);C=(d[I>>0]|0)<<8|(d[J>>0]|0);a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;if(C){N=((n|0)==0?E:n)<<4;O=(E|0)==0;L=0;do{if(!O){M=Z(N,L)|0;G=0;while(1){a[j+(M+8)>>0]=-1;a[j+((M|1)+8)>>0]=-1;w=j+((M|2)+8)|0;a[w>>0]=a[r>>0]|0;a[w+1>>0]=a[r+1>>0]|0;a[w+2>>0]=a[r+2>>0]|0;a[w+3>>0]=a[r+3>>0]|0;a[w+4>>0]=a[r+4>>0]|0;a[w+5>>0]=a[r+5>>0]|0;G=G+1|0;if((G|0)==(E|0))break;else M=M+16|0}}L=L+1|0}while((L|0)!=(C|0))}u=1;i=q;return u|0}case 10:{if((t|0)!=16)na(961651,961199,10006,961629);if(!l){u=sb(b,e,f,A,j,k,9,16,m,n,o,0,0)|0;i=q;return u|0}if(!(sb(b,e,f,A+1|0,j,k,13,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}u=sb(b,e,f,A,j,k,9,16,m|16,n,o,0,0)|0;i=q;return u|0}case 11:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,10,t,m,n,o,0,0)|0;i=q;return u|0}case 12:{if((t|0)!=16)na(961651,961199,10053,961629);if(l){if(!(sb(b,e,f,A+1|0,j,k,2,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}}else{C=(d[K>>0]|0)<<8|(d[H>>0]|0);L=(d[I>>0]|0)<<8|(d[J>>0]|0);a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;if(L){E=((n|0)==0?C:n)<<4;N=(C|0)==0;O=0;do{if(!N){M=Z(E,O)|0;G=0;while(1){a[j+M>>0]=-1;a[j+(M|1)>>0]=-1;w=j+(M|2)|0;a[w>>0]=a[r>>0]|0;a[w+1>>0]=a[r+1>>0]|0;a[w+2>>0]=a[r+2>>0]|0;a[w+3>>0]=a[r+3>>0]|0;a[w+4>>0]=a[r+4>>0]|0;a[w+5>>0]=a[r+5>>0]|0;G=G+1|0;if((G|0)==(C|0))break;else M=M+16|0}}O=O+1|0}while((O|0)!=(L|0))}}u=sb(b,e,f,A,j+8|0,k,10,16,m,n,o,0,0)|0;i=q;return u|0}case 18:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,22,t,m,n,o,0,0)|0;i=q;return u|0}case 19:{if(!l){u=sb(b,e,f,A,j,k,22,t,m,n,o,0,0)|0;i=q;return u|0}if(!(sb(b,e,f,A+1|0,j,k,13,t,m,n,o,0,0)|0)){u=0;i=q;return u|0}u=sb(b,e,f,A,j,k,23,t,m|16,n,o,0,0)|0;i=q;return u|0}case 13:{if(l?!(sb(b,e,f,A+1|0,j,k,16,4,m,n,o,0,p)|0):0){u=0;i=q;return u|0}u=sb(b,e,f,A,j,k,B^15,4,m,n,o,0,p)|0;i=q;return u|0}case 15:case 14:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,(x|0)==14?17:18,2,m,n,o,0,p)|0;i=q;return u|0}case 16:{if(l?!(sb(b,e,f,A+1|0,j,k,20,2,m,n,o,0,p)|0):0){u=0;i=q;return u|0}u=sb(b,e,f,A,j,k,(B<<1^2)+19|0,2,m,n,o,0,p)|0;i=q;return u|0}case 17:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,12,t,m,n,o,0,0)|0;i=q;return u|0}case 20:{u=sb(b,e,f,A+(((v&1|0)==0|l^1)&1^1)|0,j,k,24,t,m,n,o,0,0)|0;i=q;return u|0}case 21:{if((t|0)!=16)na(961651,961199,10234,961629);if(l){if(!(sb(b,e,f,A+1|0,j+8|0,k,24,16,m,n,o,0,0)|0)){u=0;i=q;return u|0}}else{L=(d[K>>0]|0)<<8|(d[H>>0]|0);O=(d[I>>0]|0)<<8|(d[J>>0]|0);if(O){C=((n|0)==0?L:n)<<4;E=(L|0)==0;N=0;do{if(!E){M=Z(C,N)|0;G=0;while(1){w=j+(M+8)|0;a[w>>0]=255;a[w+1>>0]=29;w=j+((M|2)+8)|0;a[w>>0]=a[953632]|0;a[w+1>>0]=a[953633]|0;a[w+2>>0]=a[953634]|0;a[w+3>>0]=a[953635]|0;a[w+4>>0]=a[953636]|0;a[w+5>>0]=a[953637]|0;G=G+1|0;if((G|0)==(L|0))break;else M=M+16|0}}N=N+1|0}while((N|0)!=(O|0))}}u=sb(b,e,f,A,j,k,24,16,m,n,o,0,0)|0;i=q;return u|0}default:na(961599,961199,10265,961629)}while(0);return 0}function ub(a){a=a|0;var b=0;switch(a|0){case 20:case 19:case 18:case 11:case 9:case 8:case 4:case 2:case 0:{b=8;break}case 21:case 17:case 12:case 10:case 5:case 3:case 1:case 7:case 6:{b=16;break}case 13:{b=64;break}case 16:case 15:case 14:{b=32;break}default:na(961599,961199,10305,961673)}return b|0}function vb(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;g=i;i=i+256|0;h=g+128|0;j=g;if(!e){k=c[d>>2]|0;l=d+4|0;if((c[l>>2]|0)!=(k|0))c[l>>2]=k;k=c[d+12>>2]|0;l=d+16|0;m=c[l>>2]|0;if((k|0)!=(m|0))c[l>>2]=m+(~((m+-4-k|0)>>>2)<<2);k=c[d+24>>2]|0;m=d+28|0;l=c[m>>2]|0;if((k|0)==(l|0)){n=1;i=g;return n|0}c[m>>2]=l+(~((l+-2-k|0)>>>1)<<1);n=1;i=g;return n|0}k=d+4|0;l=c[k>>2]|0;m=c[d>>2]|0;o=l-m|0;if(o>>>0>=e>>>0)if(o>>>0>e>>>0?(p=m+e|0,(l|0)!=(p|0)):0){c[k>>2]=p;q=m}else q=m;else{wb(d,e-o|0);q=c[d>>2]|0}Uc(q|0,f|0,e|0)|0;q=d+12|0;o=d+16|0;m=c[o>>2]|0;p=c[q>>2]|0;k=p;if((m|0)==(p|0))r=m;else{l=m+(~((m+-4-k|0)>>>2)<<2)|0;c[o>>2]=l;r=l}l=r-k>>2;if(l>>>0>=1024){if(l>>>0>1024?(k=p+4096|0,(r|0)!=(k|0)):0)c[o>>2]=r+(~((r+-4-k|0)>>>2)<<2)}else xb(q,1024-l|0);l=d+24|0;k=d+28|0;d=c[k>>2]|0;r=c[l>>2]|0;o=r;if((d|0)==(r|0))s=d;else{p=d+(~((d+-2-o|0)>>>1)<<1)|0;c[k>>2]=p;s=p}p=e<<1;d=s-o>>1;if(p>>>0<=d>>>0){if(p>>>0>>0?(o=r+(p<<1)|0,(s|0)!=(o|0)):0)c[k>>2]=s+(~((s+-2-o|0)>>>1)<<1)}else yb(l,p-d|0);d=h;p=d+128|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(p|0));d=0;while(1){p=a[f+d>>0]|0;if((p&255)>31){t=0;break}o=h+((p&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;d=d+1|0;if(d>>>0>=e>>>0){u=30;break}}if((u|0)==30){c[j+4>>2]=0;c[j>>2]=0;u=1;d=0;o=0;while(1){p=c[h+(u<<2)>>2]|0;s=p+o|0;r=p+d<<1;u=u+1|0;c[j+(u<<2)>>2]=r;if((u|0)==31){v=s;w=r;break}else{d=r;o=s}}a:do if(!((w|0)!=-2147483648&v>>>0>1))if((e|0)>0){o=0;d=-1;while(1){u=a[f+o>>0]|0;h=u&255;b:do if(!(u<<24>>24))x=d;else{s=j+(h<<2)|0;r=c[s>>2]|0;c[s>>2]=r+1;s=r;r=h;p=0;while(1){m=s&1|p<<1;r=r+-1|0;if(!r){y=m;z=p;break}else{s=s>>>1;p=m}}if((u&255)<11){p=h<<16|o;if(y>>>0>=1024){x=d;break}s=c[q>>2]|0;r=1<>2]|0){B=0;break a}c[A>>2]=p;m=m+r|0;if(m>>>0>=1024){x=d;break b}}}m=(c[q>>2]|0)+((y&1023)<<2)|0;r=c[m>>2]|0;if(!r){c[m>>2]=d;C=d;D=d+-2|0}else{C=r;D=d}if((C|0)>-1){B=0;break a}r=z>>>9;m=(r&1)-C|0;p=m+-1|0;s=(m|0)<1;if((u&255)>11){A=m;E=p;F=r&4194303;r=s;G=h;H=D;while(1){if(r){B=0;break a}I=c[k>>2]|0;J=c[l>>2]|0;K=I-J>>1;do if((A|0)>(K|0)){if(A>>>0>K>>>0){yb(l,A-K|0);L=c[l>>2]|0;break}if(A>>>0>=K>>>0){L=J;break}M=J+(A<<1)|0;if((I|0)==(M|0)){L=J;break}c[k>>2]=I+(~((I+-2-M|0)>>>1)<<1);L=J}else L=J;while(0);J=L+(E<<1)|0;I=b[J>>1]|0;if(I<<16>>16)if(I<<16>>16>-1){B=0;break a}else{N=I<<16>>16;O=H}else{b[J>>1]=H;N=H;O=H+-2|0}G=G+-1|0;F=F>>>1;J=(F&1)-N|0;I=J+-1|0;K=(J|0)<1;if((G|0)<=11){P=J;Q=I;R=K;S=O;break}else{A=J;E=I;r=K;H=O}}}else{P=m;Q=p;R=s;S=D}if(R){B=0;break a}H=c[k>>2]|0;r=c[l>>2]|0;E=H-r>>1;do if((P|0)>(E|0)){if(P>>>0>E>>>0){yb(l,P-E|0);T=c[l>>2]|0;break}if(P>>>0>=E>>>0){T=r;break}A=r+(P<<1)|0;if((H|0)==(A|0)){T=r;break}c[k>>2]=H+(~((H+-2-A|0)>>>1)<<1);T=r}else T=r;while(0);r=T+(Q<<1)|0;if(b[r>>1]|0){B=0;break a}b[r>>1]=o;x=S}while(0);o=o+1|0;if((o|0)>=(e|0)){B=1;break}else d=x}}else B=1;else B=0;while(0);t=B}n=t;i=g;return n|0}function wb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=b+8|0;f=c[e>>2]|0;g=b+4|0;h=c[g>>2]|0;i=h;if((f-i|0)>>>0>=d>>>0){j=d;k=h;do{a[k>>0]=0;k=(c[g>>2]|0)+1|0;c[g>>2]=k;j=j+-1|0}while((j|0)!=0);return}j=c[b>>2]|0;k=i-j+d|0;if((k|0)<0)$b(b);i=j;j=f-i|0;if(j>>>0<1073741823){f=j<<1;j=f>>>0>>0?k:f;f=(c[g>>2]|0)-i|0;if(!j){l=0;m=0;n=f}else{o=j;p=f;q=8}}else{o=2147483647;p=(c[g>>2]|0)-i|0;q=8}if((q|0)==8){l=o;m=ac(o)|0;n=p}p=m+n|0;o=m+l|0;l=d;d=p;q=p;while(1){a[d>>0]=0;d=q+1|0;p=d;l=l+-1|0;if(!l){r=p;break}else q=p}q=c[b>>2]|0;l=(c[g>>2]|0)-q|0;d=m+(n-l)|0;Uc(d|0,q|0,l|0)|0;c[b>>2]=d;c[g>>2]=r;c[e>>2]=o;if(!q)return;bc(q);return}function xb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+8|0;e=c[d>>2]|0;f=a+4|0;g=c[f>>2]|0;h=g;if(e-h>>2>>>0>=b>>>0){Rc(g|0,0,b<<2|0)|0;c[f>>2]=g+(b<<2);return}g=c[a>>2]|0;i=g;j=(h-i>>2)+b|0;if(j>>>0>1073741823)$b(a);h=g;k=e-h|0;if(k>>2>>>0<536870911){e=k>>1;k=e>>>0>>0?j:e;e=(c[f>>2]|0)-h|0;j=e>>2;if(!k){l=0;m=0;n=j;o=e}else{p=k;q=j;r=e;s=8}}else{e=(c[f>>2]|0)-h|0;p=1073741823;q=e>>2;r=e;s=8}if((s|0)==8){l=p;m=ac(p<<2)|0;n=q;o=r}Rc(m+(n<<2)|0,0,b<<2|0)|0;Uc(m|0,g|0,o|0)|0;c[a>>2]=m;c[f>>2]=m+(n+b<<2);c[d>>2]=m+(l<<2);if(!i)return;bc(i);return}function yb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=a+8|0;e=c[d>>2]|0;f=a+4|0;g=c[f>>2]|0;h=g;if(e-h>>1>>>0>=b>>>0){Rc(g|0,0,b<<1|0)|0;c[f>>2]=g+(b<<1);return}i=c[a>>2]|0;j=i;k=(h-j>>1)+b|0;if((k|0)<0)$b(a);h=i;l=e-h|0;e=l>>1>>>0<1073741823?(l>>>0>>0?k:l):2147483647;l=g-h|0;h=l>>1;if(!e)m=0;else m=ac(e<<1)|0;Rc(m+(h<<1)|0,0,b<<1|0)|0;Uc(m|0,i|0,l|0)|0;c[a>>2]=m;c[f>>2]=m+(h+b<<1);c[d>>2]=m+(e<<1);if(!j)return;bc(j);return}function zb(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;f=i;i=i+160|0;g=f+144|0;h=f+128|0;j=f+112|0;k=f+96|0;l=f+80|0;m=f+64|0;n=f+48|0;o=f+32|0;p=f+16|0;q=f;r=b;s=c;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0));if(a[e+8>>0]|0){r=g;c=r+15|0;do{a[r>>0]=0;r=r+1|0}while((r|0)<(c|0));t=a[b>>0]|0;a[g>>0]=t;a[g+1>>0]=t;a[g+2>>0]=a[b+1>>0]|0;a[g+3>>0]=a[b+2>>0]|0;t=a[b+4>>0]|0;a[g+4>>0]=t;a[g+5>>0]=t;a[g+6>>0]=a[b+5>>0]|0;a[g+7>>0]=a[b+6>>0]|0;t=a[b+8>>0]|0;a[g+8>>0]=t;a[g+9>>0]=t;a[g+10>>0]=a[b+9>>0]|0;a[g+11>>0]=a[b+10>>0]|0;t=a[b+12>>0]|0;a[g+12>>0]=t;a[g+13>>0]=t;a[g+14>>0]=a[b+13>>0]|0;a[g+15>>0]=a[b+14>>0]|0;r=b;s=g;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+9>>0]|0){r=h;c=r+15|0;do{a[r>>0]=0;r=r+1|0}while((r|0)<(c|0));a[h>>0]=a[b+12>>0]|0;a[h+1>>0]=a[b+13>>0]|0;a[h+2>>0]=a[b+14>>0]|0;a[h+3>>0]=a[b+15>>0]|0;a[h+4>>0]=a[b>>0]|0;a[h+5>>0]=a[b+1>>0]|0;a[h+6>>0]=a[b+2>>0]|0;a[h+7>>0]=a[b+3>>0]|0;a[h+8>>0]=a[b+4>>0]|0;a[h+9>>0]=a[b+5>>0]|0;a[h+10>>0]=a[b+6>>0]|0;a[h+11>>0]=a[b+7>>0]|0;a[h+12>>0]=a[b+8>>0]|0;a[h+13>>0]=a[b+9>>0]|0;a[h+14>>0]=a[b+10>>0]|0;a[h+15>>0]=a[b+11>>0]|0;r=b;s=h;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}Ab(j,b,(a[e+6>>0]|0)!=0,d[e+12>>0]|0);r=b;s=j;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0));if(a[e+7>>0]|0){Bb(k,b);r=b;s=k;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+10>>0]|0){Cb(l,b);r=b;s=l;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+11>>0]|0){Db(m,b);r=b;s=m;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+1>>0]|0){Eb(n,b);r=b;s=n;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+3>>0]|0){n=b+1|0;m=a[969908+(d[n>>0]|0)>>0]|0;l=b+2|0;k=a[969908+(d[l>>0]|0)>>0]|0;j=b+3|0;h=a[969908+(d[j>>0]|0)>>0]|0;g=b+4|0;t=a[969908+(d[g>>0]|0)>>0]|0;u=b+5|0;v=a[969908+(d[u>>0]|0)>>0]|0;w=b+6|0;x=a[969908+(d[w>>0]|0)>>0]|0;y=b+7|0;z=a[969908+(d[y>>0]|0)>>0]|0;A=b+8|0;B=a[969908+(d[A>>0]|0)>>0]|0;C=b+9|0;D=a[969908+(d[C>>0]|0)>>0]|0;E=b+10|0;F=a[969908+(d[E>>0]|0)>>0]|0;G=b+11|0;H=a[969908+(d[G>>0]|0)>>0]|0;I=b+12|0;J=a[969908+(d[I>>0]|0)>>0]|0;K=b+13|0;L=a[969908+(d[K>>0]|0)>>0]|0;M=b+14|0;N=a[969908+(d[M>>0]|0)>>0]|0;O=b+15|0;P=a[969908+(d[O>>0]|0)>>0]|0;a[b>>0]=a[969908+(d[b>>0]|0)>>0]|0;a[n>>0]=m;a[l>>0]=k;a[j>>0]=h;a[g>>0]=t;a[u>>0]=v;a[w>>0]=x;a[y>>0]=z;a[A>>0]=B;a[C>>0]=D;a[E>>0]=F;a[G>>0]=H;a[I>>0]=J;a[K>>0]=L;a[M>>0]=N;a[O>>0]=P}if(a[e+4>>0]|0){r=o;c=r+16|0;do{a[r>>0]=0;r=r+1|0}while((r|0)<(c|0));P=0;do{O=(d[b+P>>0]|0)+1|0;a[o+P>>0]=O>>>0>3?3:O&255;P=P+1|0}while((P|0)!=16);r=b;s=o;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}o=a[e>>0]|0;if(o<<24>>24){Fb(p,b,o&255);r=b;s=p;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0))}if(a[e+5>>0]|0){p=b+1|0;o=3-(d[p>>0]|0)&255;P=b+2|0;O=3-(d[P>>0]|0)&255;N=b+3|0;M=3-(d[N>>0]|0)&255;L=b+4|0;K=3-(d[L>>0]|0)&255;J=b+5|0;I=3-(d[J>>0]|0)&255;H=b+6|0;G=3-(d[H>>0]|0)&255;F=b+7|0;E=3-(d[F>>0]|0)&255;D=b+8|0;C=3-(d[D>>0]|0)&255;B=b+9|0;A=3-(d[B>>0]|0)&255;z=b+10|0;y=3-(d[z>>0]|0)&255;x=b+11|0;w=3-(d[x>>0]|0)&255;v=b+12|0;u=3-(d[v>>0]|0)&255;t=b+13|0;g=3-(d[t>>0]|0)&255;h=b+14|0;j=3-(d[h>>0]|0)&255;k=b+15|0;l=3-(d[k>>0]|0)&255;a[b>>0]=3-(d[b>>0]|0);a[p>>0]=o;a[P>>0]=O;a[N>>0]=M;a[L>>0]=K;a[J>>0]=I;a[H>>0]=G;a[F>>0]=E;a[D>>0]=C;a[B>>0]=A;a[z>>0]=y;a[x>>0]=w;a[v>>0]=u;a[t>>0]=g;a[h>>0]=j;a[k>>0]=l}if(!(a[e+2>>0]|0)){i=f;return}Gb(q,b);r=b;s=q;c=r+16|0;do{a[r>>0]=a[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(c|0));i=f;return}function Ab(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;g=f;h=g;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));if(d){a[g>>0]=a[c+12>>0]|0;a[g+1>>0]=a[c+13>>0]|0;a[g+2>>0]=a[c+14>>0]|0;a[g+3>>0]=a[c+15>>0]|0;a[g+4>>0]=a[c+8>>0]|0;a[g+5>>0]=a[c+9>>0]|0;a[g+6>>0]=a[c+10>>0]|0;a[g+7>>0]=a[c+11>>0]|0;a[g+8>>0]=a[c+4>>0]|0;a[g+9>>0]=a[c+5>>0]|0;a[g+10>>0]=a[c+6>>0]|0;a[g+11>>0]=a[c+7>>0]|0;a[g+12>>0]=a[c>>0]|0;a[g+13>>0]=a[c+1>>0]|0;a[g+14>>0]=a[c+2>>0]|0;a[g+15>>0]=a[c+3>>0]|0}else{h=g;k=c;j=h+16|0;do{a[h>>0]=a[k>>0]|0;h=h+1|0;k=k+1|0}while((h|0)<(j|0))}h=b;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));switch(e|0){case 0:{h=b;k=g;j=h+16|0;do{a[h>>0]=a[k>>0]|0;h=h+1|0;k=k+1|0}while((h|0)<(j|0));i=f;return}case 1:{a[b>>0]=a[g+12>>0]|0;a[b+1>>0]=a[g+8>>0]|0;a[b+2>>0]=a[g+4>>0]|0;a[b+3>>0]=a[g>>0]|0;a[b+4>>0]=a[g+13>>0]|0;a[b+5>>0]=a[g+9>>0]|0;a[b+6>>0]=a[g+5>>0]|0;a[b+7>>0]=a[g+1>>0]|0;a[b+8>>0]=a[g+14>>0]|0;a[b+9>>0]=a[g+10>>0]|0;a[b+10>>0]=a[g+6>>0]|0;a[b+11>>0]=a[g+2>>0]|0;a[b+12>>0]=a[g+15>>0]|0;a[b+13>>0]=a[g+11>>0]|0;a[b+14>>0]=a[g+7>>0]|0;a[b+15>>0]=a[g+3>>0]|0;i=f;return}case 2:{a[b>>0]=a[g+15>>0]|0;a[b+1>>0]=a[g+14>>0]|0;a[b+2>>0]=a[g+13>>0]|0;a[b+3>>0]=a[g+12>>0]|0;a[b+4>>0]=a[g+11>>0]|0;a[b+5>>0]=a[g+10>>0]|0;a[b+6>>0]=a[g+9>>0]|0;a[b+7>>0]=a[g+8>>0]|0;a[b+8>>0]=a[g+7>>0]|0;a[b+9>>0]=a[g+6>>0]|0;a[b+10>>0]=a[g+5>>0]|0;a[b+11>>0]=a[g+4>>0]|0;a[b+12>>0]=a[g+3>>0]|0;a[b+13>>0]=a[g+2>>0]|0;a[b+14>>0]=a[g+1>>0]|0;a[b+15>>0]=a[g>>0]|0;i=f;return}case 3:{a[b>>0]=a[g+3>>0]|0;a[b+1>>0]=a[g+7>>0]|0;a[b+2>>0]=a[g+11>>0]|0;a[b+3>>0]=a[g+15>>0]|0;a[b+4>>0]=a[g+2>>0]|0;a[b+5>>0]=a[g+6>>0]|0;a[b+6>>0]=a[g+10>>0]|0;a[b+7>>0]=a[g+14>>0]|0;a[b+8>>0]=a[g+1>>0]|0;a[b+9>>0]=a[g+5>>0]|0;a[b+10>>0]=a[g+9>>0]|0;a[b+11>>0]=a[g+13>>0]|0;a[b+12>>0]=a[g>>0]|0;a[b+13>>0]=a[g+4>>0]|0;a[b+14>>0]=a[g+8>>0]|0;a[b+15>>0]=a[g+12>>0]|0;i=f;return}default:na(961599,961699,487,969884)}}function Bb(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=b;f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));e=0;a:while(1){f=e<<2;g=e+-1|0;h=g>>>0>3;i=e;e=e+1|0;j=e>>>0>3;k=e<<2;l=g<<2;m=0;do{if(!h){n=m+-1|0;if(n>>>0>3)o=0;else{if((n|g)>>>0>=4){p=6;break a}o=d[c+(n+l)>>0]|0}if((m|g)>>>0>=4){p=6;break a}n=d[c+(m+l)>>0]|0;q=o>>>0>n>>>0?o:n;n=m+1|0;if(n>>>0>3)r=q;else{if((n|g)>>>0>=4){p=6;break a}s=d[c+(n+l)>>0]|0;r=q>>>0>s>>>0?q:s}}else r=0;s=m+-1|0;if(s>>>0>3)t=r;else{if((s|i)>>>0>=4){p=6;break a}q=d[c+(s+f)>>0]|0;t=r>>>0>q>>>0?r:q}if((m|i)>>>0>=4){p=6;break a}q=d[c+(m+f)>>0]|0;s=t>>>0>q>>>0?t:q;q=m+1|0;if(q>>>0>3)u=s;else{if((q|i)>>>0>=4){p=6;break a}n=d[c+(q+f)>>0]|0;u=s>>>0>n>>>0?s:n}if(!j){n=m+-1|0;if(n>>>0>3)v=u;else{if((n|e)>>>0>=4){p=6;break a}s=d[c+(n+k)>>0]|0;v=u>>>0>s>>>0?u:s}if((m|e)>>>0>=4){p=6;break a}s=d[c+(m+k)>>0]|0;n=v>>>0>s>>>0?v:s;s=m+1|0;if(s>>>0>3)w=n;else{if((s|e)>>>0>=4){p=6;break a}q=d[c+(s+k)>>0]|0;w=n>>>0>q>>>0?n:q}}else w=u;if((m|i)>>>0>=4){p=8;break a}a[b+(m+f)>>0]=w;m=m+1|0}while(m>>>0<4);if(e>>>0>=4){p=11;break}}if((p|0)==6)na(969854,961699,151,969873);else if((p|0)==8)na(969854,961699,152,969873);else if((p|0)==11)return}function Cb(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=b;f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));e=0;a:while(1){f=e<<2;g=e+-1|0;h=g>>>0>3;i=e;e=e+1|0;j=e>>>0>3;k=e<<2;l=g<<2;m=0;do{if(!h){n=m+-1|0;if(n>>>0>3)o=99;else{if((n|g)>>>0>=4){p=6;break a}q=d[c+(n+l)>>0]|0;o=q>>>0>99?99:q}if((m|g)>>>0>=4){p=6;break a}q=d[c+(m+l)>>0]|0;n=o>>>0>>0?o:q;q=m+1|0;if(q>>>0>3)r=n;else{if((q|g)>>>0>=4){p=6;break a}s=d[c+(q+l)>>0]|0;r=n>>>0>>0?n:s}}else r=99;s=m+-1|0;if(s>>>0>3)t=r;else{if((s|i)>>>0>=4){p=6;break a}n=d[c+(s+f)>>0]|0;t=r>>>0>>0?r:n}if((m|i)>>>0>=4){p=6;break a}n=d[c+(m+f)>>0]|0;s=t>>>0>>0?t:n;n=m+1|0;if(n>>>0>3)u=s;else{if((n|i)>>>0>=4){p=6;break a}q=d[c+(n+f)>>0]|0;u=s>>>0>>0?s:q}if(!j){q=m+-1|0;if(q>>>0>3)v=u;else{if((q|e)>>>0>=4){p=6;break a}s=d[c+(q+k)>>0]|0;v=u>>>0>>0?u:s}if((m|e)>>>0>=4){p=6;break a}s=d[c+(m+k)>>0]|0;q=v>>>0>>0?v:s;s=m+1|0;if(s>>>0>3)w=q;else{if((s|e)>>>0>=4){p=6;break a}n=d[c+(s+k)>>0]|0;w=q>>>0>>0?q:n}}else w=u;if((m|i)>>>0>=4){p=8;break a}a[b+(m+f)>>0]=w;m=m+1|0}while(m>>>0<4);if(e>>>0>=4){p=11;break}}if((p|0)==6)na(969854,961699,151,969873);else if((p|0)==8)na(969854,961699,152,969873);else if((p|0)==11)return}function Db(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=b;f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));e=0;a:while(1){f=e<<2;g=-1+e|0;h=(g|0)<0?0:(g|0)>3?3:g;g=h<<2;i=(e|0)<0?0:(e|0)>3?3:e;j=i<<2;k=1+e|0;l=(k|0)<0?0:(k|0)>3?3:k;k=l<<2;m=0;do{n=m+-1|0;o=(n|0)<0?0:n;n=m;m=m+1|0;p=(m|0)>3?3:m;if((p|(o|(n|h)))>>>0>=4){q=4;break a}r=Z(d[c+(n+g)>>0]|0,-1)|0;if((p|(o|(n|i)))>>>0>=4){q=4;break a}s=((d[c+(n+j)>>0]|0)<<3)+((Z(d[c+(o+j)>>0]|0,-1)|0)+r)|0;r=(Z(d[c+(p+j)>>0]|0,-1)|0)+s|0;if((p|(o|(n|l)))>>>0>=4){q=4;break a}o=(Z(d[c+(n+k)>>0]|0,-1)|0)+r|0;if((n|e)>>>0>=4){q=5;break a}a[b+(n+f)>>0]=(o|0)<-3?0:(o|0)>15?3:((o|0)/4|0)&255}while(m>>>0<4);e=e+1|0;if(e>>>0>=4){q=8;break}}if((q|0)==4)na(969854,961699,151,969873);else if((q|0)==5)na(969854,961699,152,969873);else if((q|0)==8)return}function Eb(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=(d[c+1>>0]|0)<<2|(d[c>>0]|0)|(d[c+2>>0]|0)<<4|(d[c+3>>0]|0)<<6|((d[c+5>>0]|0)<<2|(d[c+4>>0]|0)|(d[c+6>>0]|0)<<4|(d[c+7>>0]|0)<<6)<<8|((d[c+9>>0]|0)<<2|(d[c+8>>0]|0)|(d[c+10>>0]|0)<<4|(d[c+11>>0]|0)<<6)<<16|((d[c+13>>0]|0)<<2|(d[c+12>>0]|0)|(d[c+14>>0]|0)<<4|(d[c+15>>0]|0)<<6)<<24;f=b;g=f+16|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));f=e;e=0;a:while(1){g=e<<2;h=f;i=0;while(1){if((i|e)>>>0>=4){j=4;break a}k=i+g|0;l=d[c+k>>0]|0;m=((h|0)==0&1)+h|0;n=((m&65535)*36969|0)+(m>>>16)|0;m=((n|0)==0&1)+n|0;o=((m&65535)*36969|0)+(m>>>16)|0;m=(((o&65535^o>>>16)*6|0)>>>16)+(((n&65535^n>>>16)*6|0)>>>16)|0;b:do switch(m|0){case 0:{p=l+-2|0;break}case 10:{p=l+2|0;break}default:if(m>>>0<3){p=l+-1|0;break b}else{p=l+(m>>>0>7&1)|0;break b}}while(0);a[b+k>>0]=(p|0)<0?0:(p|0)>3?3:p&255;i=i+1|0;if(i>>>0>=4){q=o;break}else h=o}h=e+1|0;if(h>>>0<4){f=q;e=h}else{j=13;break}}if((j|0)==4)na(969854,961699,151,969873);else if((j|0)==13)return}function Fb(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if((e|0)<4){f=b;g=f+16|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));a[b>>0]=a[(d[c>>0]|0)+(969941+(e<<2))>>0]|0;a[b+1>>0]=a[(d[c+1>>0]|0)+(969941+(e<<2))>>0]|0;a[b+2>>0]=a[(d[c+2>>0]|0)+(969941+(e<<2))>>0]|0;a[b+3>>0]=a[(d[c+3>>0]|0)+(969941+(e<<2))>>0]|0;a[b+4>>0]=a[(d[c+4>>0]|0)+(969941+(e<<2))>>0]|0;a[b+5>>0]=a[(d[c+5>>0]|0)+(969941+(e<<2))>>0]|0;a[b+6>>0]=a[(d[c+6>>0]|0)+(969941+(e<<2))>>0]|0;a[b+7>>0]=a[(d[c+7>>0]|0)+(969941+(e<<2))>>0]|0;a[b+8>>0]=a[(d[c+8>>0]|0)+(969941+(e<<2))>>0]|0;a[b+9>>0]=a[(d[c+9>>0]|0)+(969941+(e<<2))>>0]|0;a[b+10>>0]=a[(d[c+10>>0]|0)+(969941+(e<<2))>>0]|0;a[b+11>>0]=a[(d[c+11>>0]|0)+(969941+(e<<2))>>0]|0;a[b+12>>0]=a[(d[c+12>>0]|0)+(969941+(e<<2))>>0]|0;a[b+13>>0]=a[(d[c+13>>0]|0)+(969941+(e<<2))>>0]|0;a[b+14>>0]=a[(d[c+14>>0]|0)+(969941+(e<<2))>>0]|0;a[b+15>>0]=a[(d[c+15>>0]|0)+(969941+(e<<2))>>0]|0;return}else na(969912,961699,239,969928)}function Gb(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;d=i;i=i+16|0;e=d;f=d+8|0;g=b;h=g+16|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));g=0;a:while(1){h=g<<2;j=-1+g|0;k=j>>>0>3;l=g>>>0>3;m=1+g|0;n=m>>>0>3;o=m<<2;p=g<<2;q=j<<2;r=0;do{s=r+-1|0;t=s>>>0>3;u=r+1|0;v=u>>>0>3;if(!k){if(t)w=0;else{if((s|j)>>>0>=4){x=6;break a}a[f>>0]=a[c+(s+q)>>0]|0;w=1}if((r|j)>>>0>=4){x=6;break a}y=w+1|0;a[f+w>>0]=a[c+(r+q)>>0]|0;if(v)z=y;else{if((u|j)>>>0>=4){x=6;break a}a[f+y>>0]=a[c+(u+q)>>0]|0;z=y+1|0}}else z=0;if(!l){if(t)A=z;else{if((s|g)>>>0>=4){x=6;break a}a[f+z>>0]=a[c+(s+p)>>0]|0;A=z+1|0}if(v)B=A;else{if((u|g)>>>0>=4){x=6;break a}a[f+A>>0]=a[c+(u+p)>>0]|0;B=A+1|0}}else B=z;if(!n){if(t)C=B;else{if((s|m)>>>0>=4){x=6;break a}a[f+B>>0]=a[c+(s+o)>>0]|0;C=B+1|0}if((r|m)>>>0>=4){x=6;break a}s=C+1|0;a[f+C>>0]=a[c+(r+o)>>0]|0;if(v)D=s;else{if((u|m)>>>0>=4){x=6;break a}a[f+s>>0]=a[c+(u+o)>>0]|0;D=s+1|0}}else D=B;Kc(f,f+D|0,e);if((r|g)>>>0>=4){x=9;break a}a[b+(r+h)>>0]=a[f+(D>>>1)>>0]|0;r=r+1|0}while(r>>>0<4);g=g+1|0;if(g>>>0>=4){x=12;break}}if((x|0)==6)na(969854,961699,151,969873);else if((x|0)==9)na(969854,961699,152,969873);else if((x|0)==12){i=d;return}}function Hb(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=d[e>>0]|0;h=d[e+1>>0]|0;i=d[e+2>>0]|0;j=d[e+3>>0]|0;k=d[e+4>>0]|0;e=((k>>>4)*81|0)+(((j>>>4)*27|0)+(((i>>>4)*9|0)+(((h>>>4)*3|0)+(g>>>4))))|0;if((e|0)>=243)na(977396,961199,5401,977408);l=d[977426+e>>0]|0;e=l<<4&48|g&15|h<<6&960;h=c[f>>2]|0;g=10;while(1){m=h&7;n=8-m|0;o=(n|0)<(g|0)?n:g;n=b+(h>>3)|0;a[n>>0]=d[n>>0]|0|e<>2]|0)|0;c[f>>2]=m;if((g|0)==(o|0)){p=m;break}else{e=e>>>o;h=m;g=g-o|0}}g=l<<2&64|l>>>2&3|l<<6&6144|l>>>7<<17|i<<2&60|j<<7&1920|k<<13&122880;k=p;p=18;while(1){j=k&7;i=8-j|0;l=(i|0)<(p|0)?i:p;i=b+(k>>3)|0;a[i>>0]=d[i>>0]|0|g<>2]|0)|0;c[f>>2]=k;if((p|0)==(l|0))break;else{g=g>>>l;p=p-l|0}}return}function Ib(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=b+8|0;f=c[e>>2]|0;g=b+4|0;h=c[g>>2]|0;i=h;if(f-i>>4>>>0>=d>>>0){j=d;k=h;do{l=k;m=l+16|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));k=(c[g>>2]|0)+16|0;c[g>>2]=k;j=j+-1|0}while((j|0)!=0);return}j=c[b>>2]|0;k=(i-j>>4)+d|0;if(k>>>0>268435455)$b(b);i=j;j=f-i|0;if(j>>4>>>0<134217727){f=j>>3;j=f>>>0>>0?k:f;f=(c[g>>2]|0)-i>>4;if(!j){n=0;o=0;p=f}else{q=j;r=f;s=8}}else{q=268435455;r=(c[g>>2]|0)-i>>4;s=8}if((s|0)==8){n=q;o=ac(q<<4)|0;p=r}r=o+(p<<4)|0;q=o+(n<<4)|0;n=d;d=r;s=r;while(1){l=d;m=l+16|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));d=s+16|0;r=d;n=n+-1|0;if(!n){t=r;break}else s=r}s=c[b>>2]|0;n=(c[g>>2]|0)-s|0;d=o+(p-(n>>4)<<4)|0;Uc(d|0,s|0,n|0)|0;c[b>>2]=d;c[g>>2]=t;c[e>>2]=q;if(!s)return;bc(s);return}function Jb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=a+8|0;e=c[d>>2]|0;f=a+4|0;g=c[f>>2]|0;h=g;if(e-h>>3>>>0>=b>>>0){i=b;j=g;do{g=j;c[g>>2]=0;c[g+4>>2]=0;j=(c[f>>2]|0)+8|0;c[f>>2]=j;i=i+-1|0}while((i|0)!=0);return}i=c[a>>2]|0;j=(h-i>>3)+b|0;if(j>>>0>536870911)$b(a);h=i;i=e-h|0;if(i>>3>>>0<268435455){e=i>>2;i=e>>>0>>0?j:e;e=(c[f>>2]|0)-h>>3;if(!i){k=0;l=0;m=e}else{n=i;o=e;p=8}}else{n=536870911;o=(c[f>>2]|0)-h>>3;p=8}if((p|0)==8){k=n;l=ac(n<<3)|0;m=o}o=l+(m<<3)|0;n=l+(k<<3)|0;k=b;b=o;p=o;while(1){o=b;c[o>>2]=0;c[o+4>>2]=0;b=p+8|0;o=b;k=k+-1|0;if(!k){q=o;break}else p=o}p=c[a>>2]|0;k=(c[f>>2]|0)-p|0;b=l+(m-(k>>3)<<3)|0;Uc(b|0,p|0,k|0)|0;c[a>>2]=b;c[f>>2]=q;c[d>>2]=n;if(!p)return;bc(p);return}function Kb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=b+8|0;f=c[e>>2]|0;g=b+4|0;h=c[g>>2]|0;i=h;if(((f-i|0)/11|0)>>>0>=d>>>0){j=d;k=h;do{l=k;m=l+11|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));k=(c[g>>2]|0)+11|0;c[g>>2]=k;j=j+-1|0}while((j|0)!=0);return}j=c[b>>2]|0;k=((i-j|0)/11|0)+d|0;if(k>>>0>390451572)$b(b);i=j;j=(f-i|0)/11|0;if(j>>>0<195225786){f=j<<1;j=f>>>0>>0?k:f;f=((c[g>>2]|0)-i|0)/11|0;if(!j){n=0;o=0;p=f}else{q=j;r=f;s=8}}else{q=390451572;r=((c[g>>2]|0)-i|0)/11|0;s=8}if((s|0)==8){n=q;o=ac(q*11|0)|0;p=r}r=o+(p*11|0)|0;q=o+(n*11|0)|0;n=d;d=r;s=r;while(1){l=d;m=l+11|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));d=s+11|0;r=d;n=n+-1|0;if(!n){t=r;break}else s=r}s=c[b>>2]|0;n=(c[g>>2]|0)-s|0;d=o+((((n|0)/-11|0)+p|0)*11|0)|0;Uc(d|0,s|0,n|0)|0;c[b>>2]=d;c[g>>2]=t;c[e>>2]=q;if(!s)return;bc(s);return}function Lb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+8|0;e=c[d>>2]|0;f=a+4|0;g=c[f>>2]|0;h=g;if(e-h>>2>>>0>=b>>>0){Rc(g|0,0,b<<2|0)|0;c[f>>2]=g+(b<<2);return}g=c[a>>2]|0;i=g;j=(h-i>>2)+b|0;if(j>>>0>1073741823)$b(a);h=g;k=e-h|0;if(k>>2>>>0<536870911){e=k>>1;k=e>>>0>>0?j:e;e=(c[f>>2]|0)-h|0;j=e>>2;if(!k){l=0;m=0;n=j;o=e}else{p=k;q=j;r=e;s=8}}else{e=(c[f>>2]|0)-h|0;p=1073741823;q=e>>2;r=e;s=8}if((s|0)==8){l=p;m=ac(p<<2)|0;n=q;o=r}Rc(m+(n<<2)|0,0,b<<2|0)|0;Uc(m|0,g|0,o|0)|0;c[a>>2]=m;c[f>>2]=m+(n+b<<2);c[d>>2]=m+(l<<2);if(!i)return;bc(i);return}function Mb(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=a+8|0;f=c[e>>2]|0;g=a+4|0;h=c[g>>2]|0;i=h;if(f-i>>2>>>0>=d>>>0){j=d;k=h;do{b[k>>1]=0;b[k+2>>1]=0>>>16;k=(c[g>>2]|0)+4|0;c[g>>2]=k;j=j+-1|0}while((j|0)!=0);return}j=c[a>>2]|0;k=(i-j>>2)+d|0;if(k>>>0>1073741823)$b(a);i=j;j=f-i|0;if(j>>2>>>0<536870911){f=j>>1;j=f>>>0>>0?k:f;f=(c[g>>2]|0)-i>>2;if(!j){l=0;m=0;n=f}else{o=j;p=f;q=8}}else{o=1073741823;p=(c[g>>2]|0)-i>>2;q=8}if((q|0)==8){l=o;m=ac(o<<2)|0;n=p}p=m+(n<<2)|0;o=m+(l<<2)|0;l=d;d=p;q=p;while(1){b[d>>1]=0;b[d+2>>1]=0>>>16;d=q+4|0;p=d;l=l+-1|0;if(!l){r=p;break}else q=p}q=c[a>>2]|0;l=(c[g>>2]|0)-q|0;d=m+(n-(l>>2)<<2)|0;Uc(d|0,q|0,l|0)|0;c[a>>2]=d;c[g>>2]=r;c[e>>2]=o;if(!q)return;bc(q);return}function Nb(a){a=a|0;Za(a);return}function Ob(){return Ya()|0}function Pb(){var a=0,b=0;$a();if(c[127496]|0)return;a=ac(12)|0;b=c[127255]|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;_a(a,b,492636);c[127496]=a;return}function Qb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!((a|0)!=0&(b|0)!=0)){d=0;return d|0}e=ac(596)|0;f=e+4|0;kb(f,c[127496]|0);c[e+588>>2]=a;c[e+592>>2]=b;if(lb(f,a,b)|0){c[e>>2]=-559038751;d=e;return d|0}else{_b(f);bc(e);d=0;return d|0}return 0}function Rb(a){a=a|0;if(!a)return;if((c[a>>2]|0)!=-559038751)na(978983,979003,85,979022);_b(a+4|0);bc(a);return}function Sb(a){a=a|0;var b=0,e=0,f=0,g=0;b=i;i=i+48|0;e=b;if(!a){f=0;i=b;return f|0}if((c[a>>2]|0)!=-559038751)na(978983,979003,98,979034);g=qb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,e,0,0)|0;f=g?d[e+40>>0]|0:0;i=b;return f|0}function Tb(a){a=a|0;var b=0;if(!a){b=0;return b|0}if((c[a>>2]|0)!=-559038751)na(978983,979003,116,979054);b=nb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0)|0;return b|0}function Ub(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+48|0;e=d;if(!a){f=0;i=d;return f|0}if((c[a>>2]|0)!=-559038751)na(978983,979003,129,979075);g=ob(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,e,b)|0;f=g?c[e+4>>2]|0:0;i=d;return f|0}function Vb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;if(!a){i=e;return 0}if((c[a>>2]|0)==-559038751){g=pb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,b,d,f,e+4|0,e)|0;i=e;return (g?c[f>>2]|0:0)|0}else na(978983,979003,147,979096);return 0}function Wb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+4|0;if(!a){i=e;return 0}if((c[a>>2]|0)==-559038751){g=pb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,b,d,e+8|0,f,e)|0;i=e;return (g?c[f>>2]|0:0)|0}else na(978983,979003,164,979118);return 0}function Xb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f;if(!a){h=0;i=f;return h|0}if((c[a>>2]|0)!=-559038751)na(978983,979003,181,979141);if(e>>>0>21){h=0;i=f;return h|0}j=ub(e)|0;if(!(pb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,b,d,f+8|0,f+4|0,g)|0)){h=0;i=f;return h|0}h=Z(c[g>>2]|0,j)|0;i=f;return h|0}function Yb(a){a=a|0;var b=0;if(!a){b=0;return b|0}if((c[a>>2]|0)!=-559038751)na(978983,979003,203,979182);b=(rb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0)|0)&1;return b|0}function Zb(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if(!a){j=0;return j|0}if((c[a>>2]|0)!=-559038751)na(978983,979003,218,979206);if(g>>>0>21){j=0;return j|0}k=ub(g)|0;j=(tb(a+4|0,c[a+588>>2]|0,c[a+592>>2]|0,e,f,b,(d>>>0)/(k>>>0)|0,g,((i|0)!=0?4:0)|(h|0)!=0,0,0,0)|0)&1;return j|0}function _b(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+200|0;d=a+584|0;do{e=d;d=d+-12|0;f=c[d>>2]|0;g=f;if(f){h=e+-8|0;e=c[h>>2]|0;if((e|0)!=(f|0))c[h>>2]=e+(~((e+-4-g|0)>>>2)<<2);bc(f)}}while((d|0)!=(b|0));b=c[a+188>>2]|0;d=b;if(b){f=a+192|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-4-d|0)>>>2)<<2);bc(b)}b=c[a+176>>2]|0;d=b;if(b){g=a+180|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);bc(b)}b=c[a+160>>2]|0;d=b;if(b){f=a+164|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-2-d|0)>>>1)<<1);bc(b)}b=c[a+148>>2]|0;d=b;if(b){g=a+152|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);bc(b)}b=c[a+136>>2]|0;if(b){d=a+140|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;bc(b)}b=c[a+124>>2]|0;d=b;if(b){f=a+128|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-2-d|0)>>>1)<<1);bc(b)}b=c[a+112>>2]|0;d=b;if(b){g=a+116|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);bc(b)}b=c[a+100>>2]|0;if(b){d=a+104|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;bc(b)}b=c[a+88>>2]|0;d=b;if(b){f=a+92|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-2-d|0)>>>1)<<1);bc(b)}b=c[a+76>>2]|0;d=b;if(b){g=a+80|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);bc(b)}b=c[a+64>>2]|0;if(b){d=a+68|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;bc(b)}b=c[a+52>>2]|0;d=b;if(b){f=a+56|0;g=c[f>>2]|0;if((g|0)!=(b|0))c[f>>2]=g+(~((g+-2-d|0)>>>1)<<1);bc(b)}b=c[a+40>>2]|0;d=b;if(b){g=a+44|0;f=c[g>>2]|0;if((f|0)!=(b|0))c[g>>2]=f+(~((f+-4-d|0)>>>2)<<2);bc(b)}b=c[a+28>>2]|0;if(b){d=a+32|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;bc(b)}b=c[a+12>>2]|0;if(b){d=a+16|0;f=c[d>>2]|0;if((f|0)!=(b|0))c[d>>2]=f+(~(((0-b+(f+-11)|0)>>>0)/11|0)*11|0);bc(b)}b=c[a>>2]|0;if(!b)return;f=a+4|0;a=c[f>>2]|0;if((a|0)!=(b|0))c[f>>2]=a+(~((a+-8-b|0)>>>3)<<3);bc(b);return}function $b(a){a=a|0;na(979371,979394,303,979469)}function ac(a){a=a|0;var b=0,d=0,e=0;b=(a|0)==0?1:a;a=Ic(b)|0;a:do if(!a){while(1){d=fc()|0;if(!d)break;Ma[d&0]();d=Ic(b)|0;if(d){e=d;break a}}d=oa(4)|0;c[d>>2]=509996;Aa(d|0,8,1)}else e=a;while(0);return e|0}function bc(a){a=a|0;Jc(a);return}function cc(a){a=a|0;return}function dc(a){a=a|0;bc(a);return}function ec(a){a=a|0;return 979490}function fc(){var a=0;a=c[127502]|0;c[127502]=a+0;return a|0}function gc(a){a=a|0;return}function hc(a){a=a|0;return}function ic(a){a=a|0;return}function jc(a){a=a|0;return}function kc(a){a=a|0;return}function lc(a){a=a|0;bc(a);return}function mc(a){a=a|0;bc(a);return}function nc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;i=i+64|0;f=e;if((a|0)!=(b|0))if((b|0)!=0?(g=rc(b,40,56,0)|0,(g|0)!=0):0){b=f;h=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(h|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Oa[c[(c[g>>2]|0)+28>>2]&3](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];j=1}else j=0;k=j}else k=0;else k=1;i=e;return k|0}function oc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}h=d+24|0;if((c[h>>2]|0)==2)c[h>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function pc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))oc(0,b,d,e);return}function qc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((a|0)==(c[b+8>>2]|0))oc(0,b,d,e);else{f=c[a+8>>2]|0;Oa[c[(c[f>>2]|0)+28>>2]&3](f,b,d,e)}return}function rc(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=i;i=i+64|0;j=h;k=c[d>>2]|0;l=d+(c[k+-8>>2]|0)|0;m=c[k+-4>>2]|0;c[j>>2]=f;c[j+4>>2]=d;c[j+8>>2]=e;c[j+12>>2]=g;g=j+16|0;e=j+20|0;d=j+24|0;k=j+28|0;n=j+32|0;o=j+40|0;p=(m|0)==(f|0);q=g;r=q+36|0;do{c[q>>2]=0;q=q+4|0}while((q|0)<(r|0));b[g+36>>1]=0;a[g+38>>0]=0;a:do if(p){c[j+48>>2]=1;Na[c[(c[f>>2]|0)+20>>2]&3](f,j,l,l,1,0);s=(c[d>>2]|0)==1?l:0}else{Ja[c[(c[m>>2]|0)+24>>2]&3](m,j,l,1,0);switch(c[j+36>>2]|0){case 0:{s=(c[o>>2]|0)==1&(c[k>>2]|0)==1&(c[n>>2]|0)==1?c[e>>2]|0:0;break a;break}case 1:break;default:{s=0;break a}}if((c[d>>2]|0)!=1?!((c[o>>2]|0)==0&(c[k>>2]|0)==1&(c[n>>2]|0)==1):0){s=0;break}s=c[g>>2]|0}while(0);i=h;return s|0}function sc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;h=c[b>>2]|0;if(!h){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((h|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;a[d+54>>0]=1;break}h=d+24|0;b=c[h>>2]|0;if((b|0)==2){c[h>>2]=g;i=g}else i=b;if((i|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function tc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;a:do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){h=c[b+8>>2]|0;Ja[c[(c[h>>2]|0)+24>>2]&3](h,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;j=d+52|0;a[j>>0]=0;k=d+53|0;a[k>>0]=0;l=c[b+8>>2]|0;Na[c[(c[l>>2]|0)+20>>2]&3](l,d,e,e,1,g);if(a[k>>0]|0){if(!(a[j>>0]|0)){m=1;n=13}}else{m=0;n=13}do if((n|0)==13){c[h>>2]=e;j=d+40|0;c[j>>2]=(c[j>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(m)break}else n=16;if((n|0)==16?m:0)break;c[i>>2]=4;break a}while(0);c[i>>2]=3;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function uc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(g=d+28|0,(c[g>>2]|0)!=1):0)c[g>>2]=f}else if((b|0)==(c[d>>2]|0)){if((c[d+16>>2]|0)!=(e|0)?(g=d+20|0,(c[g>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[g>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function vc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;if((a|0)==(c[b+8>>2]|0))sc(0,b,d,e,f);else{h=c[a+8>>2]|0;Na[c[(c[h>>2]|0)+20>>2]&3](h,b,d,e,f,g)}return}function wc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)==(c[b+8>>2]|0))sc(0,b,d,e,f);return}function xc(){var a=0;if(!(c[127523]|0))a=510140;else a=c[(wa()|0)+60>>2]|0;return a|0}function yc(a){a=a|0;var b=0;if(a>>>0>4294963200){c[(xc()|0)>>2]=0-a;b=-1}else b=a;return b|0}function zc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;do if(a){if((c[a+76>>2]|0)<=-1){b=Gc(a)|0;break}d=(Ac(a)|0)==0;e=Gc(a)|0;if(d)b=e;else{Bc(a);b=e}}else{if(!(c[127534]|0))f=0;else f=zc(c[127534]|0)|0;Ba(510120);e=c[127529]|0;if(!e)g=f;else{d=e;e=f;while(1){if((c[d+76>>2]|0)>-1)h=Ac(d)|0;else h=0;if((c[d+20>>2]|0)>>>0>(c[d+28>>2]|0)>>>0)i=Gc(d)|0|e;else i=e;if(h)Bc(d);d=c[d+56>>2]|0;if(!d){g=i;break}else e=i}}ya(510120);b=g}while(0);return b|0}function Ac(a){a=a|0;return 0}function Bc(a){a=a|0;return}function Cc(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=yc(la(6,d|0)|0)|0;i=b;return a|0}function Dc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+32|0;f=e;g=e+20|0;c[f>>2]=c[a+60>>2];c[f+4>>2]=0;c[f+8>>2]=b;c[f+12>>2]=g;c[f+16>>2]=d;if((yc(Fa(140,f|0)|0)|0)<0){c[g>>2]=-1;h=-1}else h=c[g>>2]|0;i=e;return h|0}function Ec(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=i;i=i+48|0;f=e+16|0;g=e;h=e+32|0;j=a+28|0;k=c[j>>2]|0;c[h>>2]=k;l=a+20|0;m=(c[l>>2]|0)-k|0;c[h+4>>2]=m;c[h+8>>2]=b;c[h+12>>2]=d;b=a+60|0;k=a+44|0;n=h;h=2;o=m+d|0;while(1){if(!(c[127523]|0)){c[f>>2]=c[b>>2];c[f+4>>2]=n;c[f+8>>2]=h;p=yc(Ga(146,f|0)|0)|0}else{Da(8,a|0);c[g>>2]=c[b>>2];c[g+4>>2]=n;c[g+8>>2]=h;m=yc(Ga(146,g|0)|0)|0;ja(0);p=m}if((o|0)==(p|0)){q=6;break}if((p|0)<0){r=n;s=h;q=8;break}m=o-p|0;t=c[n+4>>2]|0;if(p>>>0<=t>>>0)if((h|0)==2){c[j>>2]=(c[j>>2]|0)+p;u=t;v=p;w=n;x=2}else{u=t;v=p;w=n;x=h}else{y=c[k>>2]|0;c[j>>2]=y;c[l>>2]=y;u=c[n+12>>2]|0;v=p-t|0;w=n+8|0;x=h+-1|0}c[w>>2]=(c[w>>2]|0)+v;c[w+4>>2]=u-v;n=w;h=x;o=m}if((q|0)==6){o=c[k>>2]|0;c[a+16>>2]=o+(c[a+48>>2]|0);k=o;c[j>>2]=k;c[l>>2]=k;z=d}else if((q|0)==8){c[a+16>>2]=0;c[j>>2]=0;c[l>>2]=0;c[a>>2]=c[a>>2]|32;if((s|0)==2)z=0;else z=d-(c[r+4>>2]|0)|0}i=e;return z|0}function Fc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+80|0;g=f;c[b+36>>2]=4;if((c[b>>2]&64|0)==0?(c[g>>2]=c[b+60>>2],c[g+4>>2]=21505,c[g+8>>2]=f+12,(ka(54,g|0)|0)!=0):0)a[b+75>>0]=-1;g=Ec(b,d,e)|0;i=f;return g|0}function Gc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+20|0;d=a+28|0;if((c[b>>2]|0)>>>0>(c[d>>2]|0)>>>0?(Ia[c[a+36>>2]&7](a,0,0)|0,(c[b>>2]|0)==0):0)e=-1;else{f=a+4|0;g=c[f>>2]|0;h=a+8|0;i=c[h>>2]|0;if(g>>>0>>0)Ia[c[a+40>>2]&7](a,g-i|0,1)|0;c[a+16>>2]=0;c[d>>2]=0;c[b>>2]=0;c[h>>2]=0;c[f>>2]=0;e=0}return e|0}function Hc(a){a=a|0;if(!(c[a+68>>2]|0))Bc(a);return}function Ic(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Da=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0;do if(a>>>0<245){b=a>>>0<11?16:a+11&-8;d=b>>>3;e=c[127564]|0;f=e>>>d;if(f&3){g=(f&1^1)+d|0;h=g<<1;i=510296+(h<<2)|0;j=510296+(h+2<<2)|0;h=c[j>>2]|0;k=h+8|0;l=c[k>>2]|0;do if((i|0)!=(l|0)){if(l>>>0<(c[127568]|0)>>>0)Ca();m=l+12|0;if((c[m>>2]|0)==(h|0)){c[m>>2]=i;c[j>>2]=l;break}else Ca()}else c[127564]=e&~(1<>2]=l|3;j=h+(l|4)|0;c[j>>2]=c[j>>2]|1;n=k;return n|0}j=c[127566]|0;if(b>>>0>j>>>0){if(f){l=2<>>12&16;m=l>>>i;l=m>>>5&8;o=m>>>l;m=o>>>2&4;p=o>>>m;o=p>>>1&2;q=p>>>o;p=q>>>1&1;r=(l|i|m|o|p)+(q>>>p)|0;p=r<<1;q=510296+(p<<2)|0;o=510296+(p+2<<2)|0;p=c[o>>2]|0;m=p+8|0;i=c[m>>2]|0;do if((q|0)!=(i|0)){if(i>>>0<(c[127568]|0)>>>0)Ca();l=i+12|0;if((c[l>>2]|0)==(p|0)){c[l>>2]=q;c[o>>2]=i;s=c[127566]|0;break}else Ca()}else{c[127564]=e&~(1<>2]=b|3;i=p+b|0;c[p+(b|4)>>2]=e|1;c[p+j>>2]=e;if(s){j=c[127569]|0;o=s>>>3;q=o<<1;d=510296+(q<<2)|0;f=c[127564]|0;k=1<>2]|0;if(h>>>0<(c[127568]|0)>>>0)Ca();else{t=o;u=h}}else{c[127564]=f|k;t=510296+(q+2<<2)|0;u=d}c[t>>2]=j;c[u+12>>2]=j;c[j+8>>2]=u;c[j+12>>2]=d}c[127566]=e;c[127569]=i;n=m;return n|0}i=c[127565]|0;if(i){e=(i&0-i)+-1|0;i=e>>>12&16;d=e>>>i;e=d>>>5&8;j=d>>>e;d=j>>>2&4;q=j>>>d;j=q>>>1&2;k=q>>>j;q=k>>>1&1;f=c[510560+((e|i|d|j|q)+(k>>>q)<<2)>>2]|0;q=(c[f+4>>2]&-8)-b|0;k=f;j=f;while(1){f=c[k+16>>2]|0;if(!f){d=c[k+20>>2]|0;if(!d){v=q;w=j;break}else x=d}else x=f;f=(c[x+4>>2]&-8)-b|0;d=f>>>0>>0;q=d?f:q;k=x;j=d?x:j}j=c[127568]|0;if(w>>>0>>0)Ca();k=w+b|0;if(w>>>0>=k>>>0)Ca();q=c[w+24>>2]|0;m=c[w+12>>2]|0;do if((m|0)==(w|0)){p=w+20|0;r=c[p>>2]|0;if(!r){d=w+16|0;f=c[d>>2]|0;if(!f){y=0;break}else{z=f;A=d}}else{z=r;A=p}while(1){p=z+20|0;r=c[p>>2]|0;if(r){z=r;A=p;continue}p=z+16|0;r=c[p>>2]|0;if(!r){B=z;C=A;break}else{z=r;A=p}}if(C>>>0>>0)Ca();else{c[C>>2]=0;y=B;break}}else{p=c[w+8>>2]|0;if(p>>>0>>0)Ca();r=p+12|0;if((c[r>>2]|0)!=(w|0))Ca();d=m+8|0;if((c[d>>2]|0)==(w|0)){c[r>>2]=m;c[d>>2]=p;y=m;break}else Ca()}while(0);do if(q){m=c[w+28>>2]|0;j=510560+(m<<2)|0;if((w|0)==(c[j>>2]|0)){c[j>>2]=y;if(!y){c[127565]=c[127565]&~(1<>>0<(c[127568]|0)>>>0)Ca();m=q+16|0;if((c[m>>2]|0)==(w|0))c[m>>2]=y;else c[q+20>>2]=y;if(!y)break}m=c[127568]|0;if(y>>>0>>0)Ca();c[y+24>>2]=q;j=c[w+16>>2]|0;do if(j)if(j>>>0>>0)Ca();else{c[y+16>>2]=j;c[j+24>>2]=y;break}while(0);j=c[w+20>>2]|0;if(j)if(j>>>0<(c[127568]|0)>>>0)Ca();else{c[y+20>>2]=j;c[j+24>>2]=y;break}}while(0);if(v>>>0<16){q=v+b|0;c[w+4>>2]=q|3;j=w+(q+4)|0;c[j>>2]=c[j>>2]|1}else{c[w+4>>2]=b|3;c[w+(b|4)>>2]=v|1;c[w+(v+b)>>2]=v;j=c[127566]|0;if(j){q=c[127569]|0;m=j>>>3;j=m<<1;p=510296+(j<<2)|0;d=c[127564]|0;r=1<>2]|0;if(f>>>0<(c[127568]|0)>>>0)Ca();else{D=m;E=f}}else{c[127564]=d|r;D=510296+(j+2<<2)|0;E=p}c[D>>2]=q;c[E+12>>2]=q;c[q+8>>2]=E;c[q+12>>2]=p}c[127566]=v;c[127569]=k}n=w+8|0;return n|0}else F=b}else F=b}else if(a>>>0<=4294967231){p=a+11|0;q=p&-8;j=c[127565]|0;if(j){r=0-q|0;d=p>>>8;if(d)if(q>>>0>16777215)G=31;else{p=(d+1048320|0)>>>16&8;f=d<>>16&4;m=f<>>16&2;i=14-(d|p|f)+(m<>>15)|0;G=q>>>(i+7|0)&1|i<<1}else G=0;i=c[510560+(G<<2)>>2]|0;a:do if(!i){H=r;I=0;J=0;K=86}else{f=r;m=0;p=q<<((G|0)==31?0:25-(G>>>1)|0);d=i;e=0;while(1){h=c[d+4>>2]&-8;o=h-q|0;if(o>>>0>>0)if((h|0)==(q|0)){L=o;M=d;N=d;K=90;break a}else{O=o;P=d}else{O=f;P=e}o=c[d+20>>2]|0;d=c[d+16+(p>>>31<<2)>>2]|0;h=(o|0)==0|(o|0)==(d|0)?m:o;if(!d){H=O;I=h;J=P;K=86;break}else{f=O;m=h;p=p<<1;e=P}}}while(0);if((K|0)==86){if((I|0)==0&(J|0)==0){i=2<>>12&16;b=i>>>r;i=b>>>5&8;k=b>>>i;b=k>>>2&4;e=k>>>b;k=e>>>1&2;p=e>>>k;e=p>>>1&1;Q=c[510560+((i|r|b|k|e)+(p>>>e)<<2)>>2]|0;R=0}else{Q=I;R=J}if(!Q){S=H;T=R}else{L=H;M=Q;N=R;K=90}}if((K|0)==90)while(1){K=0;e=(c[M+4>>2]&-8)-q|0;p=e>>>0>>0;k=p?e:L;e=p?M:N;p=c[M+16>>2]|0;if(p){L=k;M=p;N=e;K=90;continue}M=c[M+20>>2]|0;if(!M){S=k;T=e;break}else{L=k;N=e;K=90}}if((T|0)!=0?S>>>0<((c[127566]|0)-q|0)>>>0:0){j=c[127568]|0;if(T>>>0>>0)Ca();e=T+q|0;if(T>>>0>=e>>>0)Ca();k=c[T+24>>2]|0;p=c[T+12>>2]|0;do if((p|0)==(T|0)){b=T+20|0;r=c[b>>2]|0;if(!r){i=T+16|0;m=c[i>>2]|0;if(!m){U=0;break}else{V=m;W=i}}else{V=r;W=b}while(1){b=V+20|0;r=c[b>>2]|0;if(r){V=r;W=b;continue}b=V+16|0;r=c[b>>2]|0;if(!r){X=V;Y=W;break}else{V=r;W=b}}if(Y>>>0>>0)Ca();else{c[Y>>2]=0;U=X;break}}else{b=c[T+8>>2]|0;if(b>>>0>>0)Ca();r=b+12|0;if((c[r>>2]|0)!=(T|0))Ca();i=p+8|0;if((c[i>>2]|0)==(T|0)){c[r>>2]=p;c[i>>2]=b;U=p;break}else Ca()}while(0);do if(k){p=c[T+28>>2]|0;j=510560+(p<<2)|0;if((T|0)==(c[j>>2]|0)){c[j>>2]=U;if(!U){c[127565]=c[127565]&~(1<>>0<(c[127568]|0)>>>0)Ca();p=k+16|0;if((c[p>>2]|0)==(T|0))c[p>>2]=U;else c[k+20>>2]=U;if(!U)break}p=c[127568]|0;if(U>>>0

    >>0)Ca();c[U+24>>2]=k;j=c[T+16>>2]|0;do if(j)if(j>>>0

    >>0)Ca();else{c[U+16>>2]=j;c[j+24>>2]=U;break}while(0);j=c[T+20>>2]|0;if(j)if(j>>>0<(c[127568]|0)>>>0)Ca();else{c[U+20>>2]=j;c[j+24>>2]=U;break}}while(0);b:do if(S>>>0>=16){c[T+4>>2]=q|3;c[T+(q|4)>>2]=S|1;c[T+(S+q)>>2]=S;k=S>>>3;if(S>>>0<256){j=k<<1;p=510296+(j<<2)|0;b=c[127564]|0;i=1<>2]|0;if(r>>>0<(c[127568]|0)>>>0)Ca();else{Z=k;_=r}}else{c[127564]=b|i;Z=510296+(j+2<<2)|0;_=p}c[Z>>2]=e;c[_+12>>2]=e;c[T+(q+8)>>2]=_;c[T+(q+12)>>2]=p;break}p=S>>>8;if(p)if(S>>>0>16777215)$=31;else{j=(p+1048320|0)>>>16&8;i=p<>>16&4;b=i<>>16&2;r=14-(p|j|i)+(b<>>15)|0;$=S>>>(r+7|0)&1|r<<1}else $=0;r=510560+($<<2)|0;c[T+(q+28)>>2]=$;c[T+(q+20)>>2]=0;c[T+(q+16)>>2]=0;i=c[127565]|0;b=1<<$;if(!(i&b)){c[127565]=i|b;c[r>>2]=e;c[T+(q+24)>>2]=r;c[T+(q+12)>>2]=e;c[T+(q+8)>>2]=e;break}b=c[r>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(S|0)){r=S<<(($|0)==31?0:25-($>>>1)|0);i=b;while(1){j=i+16+(r>>>31<<2)|0;p=c[j>>2]|0;if(!p){aa=j;ba=i;break}if((c[p+4>>2]&-8|0)==(S|0)){ca=p;break c}else{r=r<<1;i=p}}if(aa>>>0<(c[127568]|0)>>>0)Ca();else{c[aa>>2]=e;c[T+(q+24)>>2]=ba;c[T+(q+12)>>2]=e;c[T+(q+8)>>2]=e;break b}}else ca=b;while(0);b=ca+8|0;i=c[b>>2]|0;r=c[127568]|0;if(i>>>0>=r>>>0&ca>>>0>=r>>>0){c[i+12>>2]=e;c[b>>2]=e;c[T+(q+8)>>2]=i;c[T+(q+12)>>2]=ca;c[T+(q+24)>>2]=0;break}else Ca()}else{i=S+q|0;c[T+4>>2]=i|3;b=T+(i+4)|0;c[b>>2]=c[b>>2]|1}while(0);n=T+8|0;return n|0}else F=q}else F=q}else F=-1;while(0);T=c[127566]|0;if(T>>>0>=F>>>0){S=T-F|0;ca=c[127569]|0;if(S>>>0>15){c[127569]=ca+F;c[127566]=S;c[ca+(F+4)>>2]=S|1;c[ca+T>>2]=S;c[ca+4>>2]=F|3}else{c[127566]=0;c[127569]=0;c[ca+4>>2]=T|3;S=ca+(T+4)|0;c[S>>2]=c[S>>2]|1}n=ca+8|0;return n|0}ca=c[127567]|0;if(ca>>>0>F>>>0){S=ca-F|0;c[127567]=S;ca=c[127570]|0;c[127570]=ca+F;c[ca+(F+4)>>2]=S|1;c[ca+4>>2]=F|3;n=ca+8|0;return n|0}do if(!(c[127682]|0)){ca=va(30)|0;if(!(ca+-1&ca)){c[127684]=ca;c[127683]=ca;c[127685]=-1;c[127686]=-1;c[127687]=0;c[127675]=0;c[127682]=(Ea(0)|0)&-16^1431655768;break}else Ca()}while(0);ca=F+48|0;S=c[127684]|0;T=F+47|0;ba=S+T|0;aa=0-S|0;S=ba&aa;if(S>>>0<=F>>>0){n=0;return n|0}$=c[127674]|0;if(($|0)!=0?(_=c[127672]|0,Z=_+S|0,Z>>>0<=_>>>0|Z>>>0>$>>>0):0){n=0;return n|0}d:do if(!(c[127675]&4)){$=c[127570]|0;e:do if($){Z=510704;while(1){_=c[Z>>2]|0;if(_>>>0<=$>>>0?(U=Z+4|0,(_+(c[U>>2]|0)|0)>>>0>$>>>0):0){da=Z;ea=U;break}Z=c[Z+8>>2]|0;if(!Z){K=174;break e}}Z=ba-(c[127567]|0)&aa;if(Z>>>0<2147483647){U=ra(Z|0)|0;_=(U|0)==((c[da>>2]|0)+(c[ea>>2]|0)|0);X=_?Z:0;if(_)if((U|0)==(-1|0))fa=X;else{ga=U;ha=X;K=194;break d}else{ia=U;ja=Z;ka=X;K=184}}else fa=0}else K=174;while(0);do if((K|0)==174){$=ra(0)|0;if(($|0)!=(-1|0)){q=$;X=c[127683]|0;Z=X+-1|0;if(!(Z&q))la=S;else la=S-q+(Z+q&0-X)|0;X=c[127672]|0;q=X+la|0;if(la>>>0>F>>>0&la>>>0<2147483647){Z=c[127674]|0;if((Z|0)!=0?q>>>0<=X>>>0|q>>>0>Z>>>0:0){fa=0;break}Z=ra(la|0)|0;q=(Z|0)==($|0);X=q?la:0;if(q){ga=$;ha=X;K=194;break d}else{ia=Z;ja=la;ka=X;K=184}}else fa=0}else fa=0}while(0);f:do if((K|0)==184){X=0-ja|0;do if(ca>>>0>ja>>>0&(ja>>>0<2147483647&(ia|0)!=(-1|0))?(Z=c[127684]|0,$=T-ja+Z&0-Z,$>>>0<2147483647):0)if((ra($|0)|0)==(-1|0)){ra(X|0)|0;fa=ka;break f}else{ma=$+ja|0;break}else ma=ja;while(0);if((ia|0)==(-1|0))fa=ka;else{ga=ia;ha=ma;K=194;break d}}while(0);c[127675]=c[127675]|4;na=fa;K=191}else{na=0;K=191}while(0);if((((K|0)==191?S>>>0<2147483647:0)?(fa=ra(S|0)|0,S=ra(0)|0,fa>>>0>>0&((fa|0)!=(-1|0)&(S|0)!=(-1|0))):0)?(ma=S-fa|0,S=ma>>>0>(F+40|0)>>>0,S):0){ga=fa;ha=S?ma:na;K=194}if((K|0)==194){na=(c[127672]|0)+ha|0;c[127672]=na;if(na>>>0>(c[127673]|0)>>>0)c[127673]=na;na=c[127570]|0;g:do if(na){ma=510704;do{S=c[ma>>2]|0;fa=ma+4|0;ia=c[fa>>2]|0;if((ga|0)==(S+ia|0)){oa=S;pa=fa;qa=ia;sa=ma;K=204;break}ma=c[ma+8>>2]|0}while((ma|0)!=0);if(((K|0)==204?(c[sa+12>>2]&8|0)==0:0)?na>>>0>>0&na>>>0>=oa>>>0:0){c[pa>>2]=qa+ha;ma=(c[127567]|0)+ha|0;ia=na+8|0;fa=(ia&7|0)==0?0:0-ia&7;ia=ma-fa|0;c[127570]=na+fa;c[127567]=ia;c[na+(fa+4)>>2]=ia|1;c[na+(ma+4)>>2]=40;c[127571]=c[127686];break}ma=c[127568]|0;if(ga>>>0>>0){c[127568]=ga;ta=ga}else ta=ma;ma=ga+ha|0;ia=510704;while(1){if((c[ia>>2]|0)==(ma|0)){ua=ia;wa=ia;K=212;break}ia=c[ia+8>>2]|0;if(!ia){xa=510704;break}}if((K|0)==212)if(!(c[wa+12>>2]&8)){c[ua>>2]=ga;ia=wa+4|0;c[ia>>2]=(c[ia>>2]|0)+ha;ia=ga+8|0;ma=(ia&7|0)==0?0:0-ia&7;ia=ga+(ha+8)|0;fa=(ia&7|0)==0?0:0-ia&7;ia=ga+(fa+ha)|0;S=ma+F|0;ka=ga+S|0;ja=ia-(ga+ma)-F|0;c[ga+(ma+4)>>2]=F|3;h:do if((ia|0)!=(na|0)){if((ia|0)==(c[127569]|0)){T=(c[127566]|0)+ja|0;c[127566]=T;c[127569]=ka;c[ga+(S+4)>>2]=T|1;c[ga+(T+S)>>2]=T;break}T=ha+4|0;ca=c[ga+(T+fa)>>2]|0;if((ca&3|0)==1){la=ca&-8;ea=ca>>>3;i:do if(ca>>>0>=256){da=c[ga+((fa|24)+ha)>>2]|0;aa=c[ga+(ha+12+fa)>>2]|0;do if((aa|0)==(ia|0)){ba=fa|16;X=ga+(T+ba)|0;$=c[X>>2]|0;if(!$){Z=ga+(ba+ha)|0;ba=c[Z>>2]|0;if(!ba){ya=0;break}else{za=ba;Aa=Z}}else{za=$;Aa=X}while(1){X=za+20|0;$=c[X>>2]|0;if($){za=$;Aa=X;continue}X=za+16|0;$=c[X>>2]|0;if(!$){Ba=za;Da=Aa;break}else{za=$;Aa=X}}if(Da>>>0>>0)Ca();else{c[Da>>2]=0;ya=Ba;break}}else{X=c[ga+((fa|8)+ha)>>2]|0;if(X>>>0>>0)Ca();$=X+12|0;if((c[$>>2]|0)!=(ia|0))Ca();Z=aa+8|0;if((c[Z>>2]|0)==(ia|0)){c[$>>2]=aa;c[Z>>2]=X;ya=aa;break}else Ca()}while(0);if(!da)break;aa=c[ga+(ha+28+fa)>>2]|0;X=510560+(aa<<2)|0;do if((ia|0)!=(c[X>>2]|0)){if(da>>>0<(c[127568]|0)>>>0)Ca();Z=da+16|0;if((c[Z>>2]|0)==(ia|0))c[Z>>2]=ya;else c[da+20>>2]=ya;if(!ya)break i}else{c[X>>2]=ya;if(ya)break;c[127565]=c[127565]&~(1<>>0>>0)Ca();c[ya+24>>2]=da;X=fa|16;Z=c[ga+(X+ha)>>2]|0;do if(Z)if(Z>>>0>>0)Ca();else{c[ya+16>>2]=Z;c[Z+24>>2]=ya;break}while(0);Z=c[ga+(T+X)>>2]|0;if(!Z)break;if(Z>>>0<(c[127568]|0)>>>0)Ca();else{c[ya+20>>2]=Z;c[Z+24>>2]=ya;break}}else{Z=c[ga+((fa|8)+ha)>>2]|0;aa=c[ga+(ha+12+fa)>>2]|0;da=510296+(ea<<1<<2)|0;do if((Z|0)!=(da|0)){if(Z>>>0>>0)Ca();if((c[Z+12>>2]|0)==(ia|0))break;Ca()}while(0);if((aa|0)==(Z|0)){c[127564]=c[127564]&~(1<>>0>>0)Ca();X=aa+8|0;if((c[X>>2]|0)==(ia|0)){Fa=X;break}Ca()}while(0);c[Z+12>>2]=aa;c[Fa>>2]=Z}while(0);Ga=ga+((la|fa)+ha)|0;Ha=la+ja|0}else{Ga=ia;Ha=ja}ea=Ga+4|0;c[ea>>2]=c[ea>>2]&-2;c[ga+(S+4)>>2]=Ha|1;c[ga+(Ha+S)>>2]=Ha;ea=Ha>>>3;if(Ha>>>0<256){T=ea<<1;ca=510296+(T<<2)|0;da=c[127564]|0;X=1<>2]|0;if($>>>0>=(c[127568]|0)>>>0){Ia=ea;Ja=$;break}Ca()}while(0);c[Ia>>2]=ka;c[Ja+12>>2]=ka;c[ga+(S+8)>>2]=Ja;c[ga+(S+12)>>2]=ca;break}T=Ha>>>8;do if(!T)Ka=0;else{if(Ha>>>0>16777215){Ka=31;break}X=(T+1048320|0)>>>16&8;da=T<>>16&4;$=da<>>16&2;ea=14-(la|X|da)+($<>>15)|0;Ka=Ha>>>(ea+7|0)&1|ea<<1}while(0);T=510560+(Ka<<2)|0;c[ga+(S+28)>>2]=Ka;c[ga+(S+20)>>2]=0;c[ga+(S+16)>>2]=0;ca=c[127565]|0;ea=1<>2]=ka;c[ga+(S+24)>>2]=T;c[ga+(S+12)>>2]=ka;c[ga+(S+8)>>2]=ka;break}ea=c[T>>2]|0;j:do if((c[ea+4>>2]&-8|0)!=(Ha|0)){T=Ha<<((Ka|0)==31?0:25-(Ka>>>1)|0);ca=ea;while(1){da=ca+16+(T>>>31<<2)|0;$=c[da>>2]|0;if(!$){La=da;Ma=ca;break}if((c[$+4>>2]&-8|0)==(Ha|0)){Na=$;break j}else{T=T<<1;ca=$}}if(La>>>0<(c[127568]|0)>>>0)Ca();else{c[La>>2]=ka;c[ga+(S+24)>>2]=Ma;c[ga+(S+12)>>2]=ka;c[ga+(S+8)>>2]=ka;break h}}else Na=ea;while(0);ea=Na+8|0;ca=c[ea>>2]|0;T=c[127568]|0;if(ca>>>0>=T>>>0&Na>>>0>=T>>>0){c[ca+12>>2]=ka;c[ea>>2]=ka;c[ga+(S+8)>>2]=ca;c[ga+(S+12)>>2]=Na;c[ga+(S+24)>>2]=0;break}else Ca()}else{ca=(c[127567]|0)+ja|0;c[127567]=ca;c[127570]=ka;c[ga+(S+4)>>2]=ca|1}while(0);n=ga+(ma|8)|0;return n|0}else xa=510704;while(1){S=c[xa>>2]|0;if(S>>>0<=na>>>0?(ka=c[xa+4>>2]|0,ja=S+ka|0,ja>>>0>na>>>0):0){Oa=S;Pa=ka;Qa=ja;break}xa=c[xa+8>>2]|0}ma=Oa+(Pa+-39)|0;ja=Oa+(Pa+-47+((ma&7|0)==0?0:0-ma&7))|0;ma=na+16|0;ka=ja>>>0>>0?na:ja;ja=ka+8|0;S=ga+8|0;ia=(S&7|0)==0?0:0-S&7;S=ha+-40-ia|0;c[127570]=ga+ia;c[127567]=S;c[ga+(ia+4)>>2]=S|1;c[ga+(ha+-36)>>2]=40;c[127571]=c[127686];S=ka+4|0;c[S>>2]=27;c[ja>>2]=c[127676];c[ja+4>>2]=c[127677];c[ja+8>>2]=c[127678];c[ja+12>>2]=c[127679];c[127676]=ga;c[127677]=ha;c[127679]=0;c[127678]=ja;ja=ka+28|0;c[ja>>2]=7;if((ka+32|0)>>>0>>0){ia=ja;do{ja=ia;ia=ia+4|0;c[ia>>2]=7}while((ja+8|0)>>>0>>0)}if((ka|0)!=(na|0)){ia=ka-na|0;c[S>>2]=c[S>>2]&-2;c[na+4>>2]=ia|1;c[ka>>2]=ia;ja=ia>>>3;if(ia>>>0<256){fa=ja<<1;ca=510296+(fa<<2)|0;ea=c[127564]|0;T=1<>2]|0;if(Z>>>0<(c[127568]|0)>>>0)Ca();else{Ra=ja;Sa=Z}}else{c[127564]=ea|T;Ra=510296+(fa+2<<2)|0;Sa=ca}c[Ra>>2]=na;c[Sa+12>>2]=na;c[na+8>>2]=Sa;c[na+12>>2]=ca;break}ca=ia>>>8;if(ca)if(ia>>>0>16777215)Ta=31;else{fa=(ca+1048320|0)>>>16&8;T=ca<>>16&4;ea=T<>>16&2;Z=14-(ca|fa|T)+(ea<>>15)|0;Ta=ia>>>(Z+7|0)&1|Z<<1}else Ta=0;Z=510560+(Ta<<2)|0;c[na+28>>2]=Ta;c[na+20>>2]=0;c[ma>>2]=0;T=c[127565]|0;ea=1<>2]=na;c[na+24>>2]=Z;c[na+12>>2]=na;c[na+8>>2]=na;break}ea=c[Z>>2]|0;k:do if((c[ea+4>>2]&-8|0)!=(ia|0)){Z=ia<<((Ta|0)==31?0:25-(Ta>>>1)|0);T=ea;while(1){fa=T+16+(Z>>>31<<2)|0;ca=c[fa>>2]|0;if(!ca){Ua=fa;Va=T;break}if((c[ca+4>>2]&-8|0)==(ia|0)){Wa=ca;break k}else{Z=Z<<1;T=ca}}if(Ua>>>0<(c[127568]|0)>>>0)Ca();else{c[Ua>>2]=na;c[na+24>>2]=Va;c[na+12>>2]=na;c[na+8>>2]=na;break g}}else Wa=ea;while(0);ea=Wa+8|0;ia=c[ea>>2]|0;ma=c[127568]|0;if(ia>>>0>=ma>>>0&Wa>>>0>=ma>>>0){c[ia+12>>2]=na;c[ea>>2]=na;c[na+8>>2]=ia;c[na+12>>2]=Wa;c[na+24>>2]=0;break}else Ca()}}else{ia=c[127568]|0;if((ia|0)==0|ga>>>0>>0)c[127568]=ga;c[127676]=ga;c[127677]=ha;c[127679]=0;c[127573]=c[127682];c[127572]=-1;ia=0;do{ea=ia<<1;ma=510296+(ea<<2)|0;c[510296+(ea+3<<2)>>2]=ma;c[510296+(ea+2<<2)>>2]=ma;ia=ia+1|0}while((ia|0)!=32);ia=ga+8|0;ma=(ia&7|0)==0?0:0-ia&7;ia=ha+-40-ma|0;c[127570]=ga+ma;c[127567]=ia;c[ga+(ma+4)>>2]=ia|1;c[ga+(ha+-36)>>2]=40;c[127571]=c[127686]}while(0);ha=c[127567]|0;if(ha>>>0>F>>>0){ga=ha-F|0;c[127567]=ga;ha=c[127570]|0;c[127570]=ha+F;c[ha+(F+4)>>2]=ga|1;c[ha+4>>2]=F|3;n=ha+8|0;return n|0}}c[(xc()|0)>>2]=12;n=0;return n|0}function Jc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;if(!a)return;b=a+-8|0;d=c[127568]|0;if(b>>>0>>0)Ca();e=c[a+-4>>2]|0;f=e&3;if((f|0)==1)Ca();g=e&-8;h=a+(g+-8)|0;do if(!(e&1)){i=c[b>>2]|0;if(!f)return;j=-8-i|0;k=a+j|0;l=i+g|0;if(k>>>0>>0)Ca();if((k|0)==(c[127569]|0)){m=a+(g+-4)|0;n=c[m>>2]|0;if((n&3|0)!=3){o=k;p=l;break}c[127566]=l;c[m>>2]=n&-2;c[a+(j+4)>>2]=l|1;c[h>>2]=l;return}n=i>>>3;if(i>>>0<256){i=c[a+(j+8)>>2]|0;m=c[a+(j+12)>>2]|0;q=510296+(n<<1<<2)|0;if((i|0)!=(q|0)){if(i>>>0>>0)Ca();if((c[i+12>>2]|0)!=(k|0))Ca()}if((m|0)==(i|0)){c[127564]=c[127564]&~(1<>>0>>0)Ca();q=m+8|0;if((c[q>>2]|0)==(k|0))r=q;else Ca()}else r=m+8|0;c[i+12>>2]=m;c[r>>2]=i;o=k;p=l;break}i=c[a+(j+24)>>2]|0;m=c[a+(j+12)>>2]|0;do if((m|0)==(k|0)){q=a+(j+20)|0;n=c[q>>2]|0;if(!n){s=a+(j+16)|0;t=c[s>>2]|0;if(!t){u=0;break}else{v=t;w=s}}else{v=n;w=q}while(1){q=v+20|0;n=c[q>>2]|0;if(n){v=n;w=q;continue}q=v+16|0;n=c[q>>2]|0;if(!n){x=v;y=w;break}else{v=n;w=q}}if(y>>>0>>0)Ca();else{c[y>>2]=0;u=x;break}}else{q=c[a+(j+8)>>2]|0;if(q>>>0>>0)Ca();n=q+12|0;if((c[n>>2]|0)!=(k|0))Ca();s=m+8|0;if((c[s>>2]|0)==(k|0)){c[n>>2]=m;c[s>>2]=q;u=m;break}else Ca()}while(0);if(i){m=c[a+(j+28)>>2]|0;q=510560+(m<<2)|0;if((k|0)==(c[q>>2]|0)){c[q>>2]=u;if(!u){c[127565]=c[127565]&~(1<>>0<(c[127568]|0)>>>0)Ca();m=i+16|0;if((c[m>>2]|0)==(k|0))c[m>>2]=u;else c[i+20>>2]=u;if(!u){o=k;p=l;break}}m=c[127568]|0;if(u>>>0>>0)Ca();c[u+24>>2]=i;q=c[a+(j+16)>>2]|0;do if(q)if(q>>>0>>0)Ca();else{c[u+16>>2]=q;c[q+24>>2]=u;break}while(0);q=c[a+(j+20)>>2]|0;if(q)if(q>>>0<(c[127568]|0)>>>0)Ca();else{c[u+20>>2]=q;c[q+24>>2]=u;o=k;p=l;break}else{o=k;p=l}}else{o=k;p=l}}else{o=b;p=g}while(0);if(o>>>0>=h>>>0)Ca();b=a+(g+-4)|0;u=c[b>>2]|0;if(!(u&1))Ca();if(!(u&2)){if((h|0)==(c[127570]|0)){d=(c[127567]|0)+p|0;c[127567]=d;c[127570]=o;c[o+4>>2]=d|1;if((o|0)!=(c[127569]|0))return;c[127569]=0;c[127566]=0;return}if((h|0)==(c[127569]|0)){d=(c[127566]|0)+p|0;c[127566]=d;c[127569]=o;c[o+4>>2]=d|1;c[o+d>>2]=d;return}d=(u&-8)+p|0;x=u>>>3;do if(u>>>0>=256){y=c[a+(g+16)>>2]|0;w=c[a+(g|4)>>2]|0;do if((w|0)==(h|0)){v=a+(g+12)|0;r=c[v>>2]|0;if(!r){f=a+(g+8)|0;e=c[f>>2]|0;if(!e){z=0;break}else{A=e;B=f}}else{A=r;B=v}while(1){v=A+20|0;r=c[v>>2]|0;if(r){A=r;B=v;continue}v=A+16|0;r=c[v>>2]|0;if(!r){C=A;D=B;break}else{A=r;B=v}}if(D>>>0<(c[127568]|0)>>>0)Ca();else{c[D>>2]=0;z=C;break}}else{v=c[a+g>>2]|0;if(v>>>0<(c[127568]|0)>>>0)Ca();r=v+12|0;if((c[r>>2]|0)!=(h|0))Ca();f=w+8|0;if((c[f>>2]|0)==(h|0)){c[r>>2]=w;c[f>>2]=v;z=w;break}else Ca()}while(0);if(y){w=c[a+(g+20)>>2]|0;l=510560+(w<<2)|0;if((h|0)==(c[l>>2]|0)){c[l>>2]=z;if(!z){c[127565]=c[127565]&~(1<>>0<(c[127568]|0)>>>0)Ca();w=y+16|0;if((c[w>>2]|0)==(h|0))c[w>>2]=z;else c[y+20>>2]=z;if(!z)break}w=c[127568]|0;if(z>>>0>>0)Ca();c[z+24>>2]=y;l=c[a+(g+8)>>2]|0;do if(l)if(l>>>0>>0)Ca();else{c[z+16>>2]=l;c[l+24>>2]=z;break}while(0);l=c[a+(g+12)>>2]|0;if(l)if(l>>>0<(c[127568]|0)>>>0)Ca();else{c[z+20>>2]=l;c[l+24>>2]=z;break}}}else{l=c[a+g>>2]|0;w=c[a+(g|4)>>2]|0;y=510296+(x<<1<<2)|0;if((l|0)!=(y|0)){if(l>>>0<(c[127568]|0)>>>0)Ca();if((c[l+12>>2]|0)!=(h|0))Ca()}if((w|0)==(l|0)){c[127564]=c[127564]&~(1<>>0<(c[127568]|0)>>>0)Ca();y=w+8|0;if((c[y>>2]|0)==(h|0))E=y;else Ca()}else E=w+8|0;c[l+12>>2]=w;c[E>>2]=l}while(0);c[o+4>>2]=d|1;c[o+d>>2]=d;if((o|0)==(c[127569]|0)){c[127566]=d;return}else F=d}else{c[b>>2]=u&-2;c[o+4>>2]=p|1;c[o+p>>2]=p;F=p}p=F>>>3;if(F>>>0<256){u=p<<1;b=510296+(u<<2)|0;d=c[127564]|0;E=1<>2]|0;if(h>>>0<(c[127568]|0)>>>0)Ca();else{G=p;H=h}}else{c[127564]=d|E;G=510296+(u+2<<2)|0;H=b}c[G>>2]=o;c[H+12>>2]=o;c[o+8>>2]=H;c[o+12>>2]=b;return}b=F>>>8;if(b)if(F>>>0>16777215)I=31;else{H=(b+1048320|0)>>>16&8;G=b<>>16&4;u=G<>>16&2;E=14-(b|H|G)+(u<>>15)|0;I=F>>>(E+7|0)&1|E<<1}else I=0;E=510560+(I<<2)|0;c[o+28>>2]=I;c[o+20>>2]=0;c[o+16>>2]=0;G=c[127565]|0;u=1<>2]|0;b:do if((c[H+4>>2]&-8|0)!=(F|0)){b=F<<((I|0)==31?0:25-(I>>>1)|0);d=H;while(1){h=d+16+(b>>>31<<2)|0;p=c[h>>2]|0;if(!p){J=h;K=d;break}if((c[p+4>>2]&-8|0)==(F|0)){L=p;break b}else{b=b<<1;d=p}}if(J>>>0<(c[127568]|0)>>>0)Ca();else{c[J>>2]=o;c[o+24>>2]=K;c[o+12>>2]=o;c[o+8>>2]=o;break a}}else L=H;while(0);H=L+8|0;d=c[H>>2]|0;b=c[127568]|0;if(d>>>0>=b>>>0&L>>>0>=b>>>0){c[d+12>>2]=o;c[H>>2]=o;c[o+8>>2]=d;c[o+12>>2]=L;c[o+24>>2]=0;break}else Ca()}else{c[127565]=G|u;c[E>>2]=o;c[o+24>>2]=E;c[o+12>>2]=o;c[o+8>>2]=o}while(0);o=(c[127572]|0)+-1|0;c[127572]=o;if(!o)M=510712;else return;while(1){o=c[M>>2]|0;if(!o)break;else M=o+8|0}c[127572]=-1;return}function Kc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=b;b=c;a:while(1){c=b;f=b+-1|0;g=e;b:while(1){h=g;i=c-h|0;switch(i|0){case 1:case 0:{break a;break}case 2:{j=g;k=f;l=4;break a;break}case 3:{m=g;n=f;l=6;break a;break}case 4:{o=g;p=f;l=7;break a;break}case 5:{q=g;r=f;l=8;break a;break}default:{}}if((i|0)<31){s=g;t=b;l=10;break a}u=(i|0)/2|0;v=g+u|0;if((i|0)>999){w=(i|0)/4|0;x=Oc(g,g+w|0,v,g+(w+u)|0,f,d)|0}else x=Mc(g,v,f,d)|0;u=a[g>>0]|0;w=a[v>>0]|0;do if((u&255)<(w&255)){y=f;z=x}else{i=f;while(1){A=i+-1|0;if((g|0)==(A|0))break;B=a[A>>0]|0;if((B&255)<(w&255)){C=B;D=A;l=29;break}else i=A}if((l|0)==29){l=0;a[g>>0]=C;a[D>>0]=u;y=D;z=x+1|0;break}i=g+1|0;A=a[f>>0]|0;if((u&255)<(A&255))E=i;else{if((i|0)==(f|0))break a;else{F=g;G=i}while(1){i=a[G>>0]|0;if((u&255)<(i&255)){H=F;I=i;J=G;break}i=G+1|0;if((i|0)==(f|0))break a;else{B=G;G=i;F=B}}a[J>>0]=A;a[f>>0]=I;E=H+2|0}if((E|0)==(f|0))break a;else{K=E;L=f}while(1){B=a[g>>0]|0;i=K;while(1){M=a[i>>0]|0;N=i+1|0;if((B&255)<(M&255)){O=M;P=N;Q=i;break}else i=N}i=L;while(1){N=i+-1|0;M=a[N>>0]|0;if((B&255)<(M&255))i=N;else{R=N;S=M;break}}if(Q>>>0>=R>>>0){g=Q;continue b}a[Q>>0]=S;a[R>>0]=O;K=P;L=R}}while(0);u=g+1|0;c:do if(u>>>0>>0){w=u;A=y;i=v;B=z;while(1){M=a[i>>0]|0;N=w;while(1){T=a[N>>0]|0;U=N+1|0;if((T&255)<(M&255))N=U;else{V=T;W=U;X=N;break}}N=A;while(1){U=N+-1|0;T=a[U>>0]|0;if((T&255)<(M&255)){Y=U;Z=T;break}else N=U}if(X>>>0>Y>>>0){_=X;$=i;aa=B;break c}a[X>>0]=Z;a[Y>>0]=V;w=W;A=Y;i=(i|0)==(X|0)?Y:i;B=B+1|0}}else{_=u;$=v;aa=z}while(0);if((_|0)!=($|0)?(v=a[$>>0]|0,u=a[_>>0]|0,(v&255)<(u&255)):0){a[_>>0]=v;a[$>>0]=u;ba=aa+1|0}else ba=aa;if(!ba){ca=Lc(g,_,d)|0;u=_+1|0;if(Lc(u,b,d)|0){l=42;break}if(ca){g=u;continue}}u=_;if((u-h|0)>=(c-u|0)){da=g;ea=_;l=46;break}Kc(g,_,d);g=_+1|0}if((l|0)==42){l=0;if(ca)break;else{e=g;b=_;continue}}else if((l|0)==46){l=0;Kc(ea+1|0,b,d);e=da;b=ea;continue}}if((l|0)==4){ea=a[k>>0]|0;b=a[j>>0]|0;if((ea&255)<(b&255)){a[j>>0]=ea;a[k>>0]=b}}else if((l|0)==6)Mc(m,m+1|0,n,d)|0;else if((l|0)==7)Nc(o,o+1|0,o+2|0,p,d)|0;else if((l|0)==8)Oc(q,q+1|0,q+2|0,q+3|0,r,d)|0;else if((l|0)==10)Pc(s,t,d);return}function Lc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do switch(c-b|0){case 1:case 0:{e=1;break}case 2:{f=c+-1|0;g=a[f>>0]|0;h=a[b>>0]|0;if((g&255)<(h&255)){a[b>>0]=g;a[f>>0]=h;e=1}else e=1;break}case 3:{Mc(b,b+1|0,c+-1|0,d)|0;e=1;break}case 4:{Nc(b,b+1|0,b+2|0,c+-1|0,d)|0;e=1;break}case 5:{Oc(b,b+1|0,b+2|0,b+3|0,c+-1|0,d)|0;e=1;break}default:{h=b+2|0;Mc(b,b+1|0,h,d)|0;f=b+3|0;if((f|0)==(c|0))e=1;else{g=0;i=f;f=h;while(1){h=a[i>>0]|0;j=a[f>>0]|0;if((h&255)<(j&255)){k=j;j=i;l=f;while(1){a[j>>0]=k;if((l|0)==(b|0)){m=b;break}n=l+-1|0;k=a[n>>0]|0;if((h&255)>=(k&255)){m=l;break}else{o=l;l=n;j=o}}a[m>>0]=h;j=g+1|0;if((j|0)==8){p=i;break}else q=j}else q=g;j=i+1|0;if((j|0)==(c|0)){e=1;break a}else{l=i;g=q;i=j;f=l}}e=(p+1|0)==(c|0)}}}while(0);return e|0}function Mc(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;e=a[c>>0]|0;f=a[b>>0]|0;g=a[d>>0]|0;h=(g&255)<(e&255);do if((e&255)<(f&255)){if(h){a[b>>0]=g;a[d>>0]=f;i=1;break}a[b>>0]=e;a[c>>0]=f;j=a[d>>0]|0;if((j&255)<(f&255)){a[c>>0]=j;a[d>>0]=f;i=2}else i=1}else if(h){a[c>>0]=g;a[d>>0]=e;j=a[c>>0]|0;k=a[b>>0]|0;if((j&255)<(k&255)){a[b>>0]=j;a[c>>0]=k;i=2}else i=1}else i=0;while(0);return i|0}function Nc(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Mc(b,c,d,f)|0;f=a[e>>0]|0;h=a[d>>0]|0;if((f&255)<(h&255)){a[d>>0]=f;a[e>>0]=h;h=g+1|0;e=a[d>>0]|0;f=a[c>>0]|0;if((e&255)<(f&255)){a[c>>0]=e;a[d>>0]=f;f=a[c>>0]|0;d=a[b>>0]|0;if((f&255)<(d&255)){a[b>>0]=f;a[c>>0]=d;i=g+3|0}else i=g+2|0}else i=h}else i=g;return i|0}function Oc(b,c,d,e,f,g){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=Nc(b,c,d,e,g)|0;g=a[f>>0]|0;i=a[e>>0]|0;if((g&255)<(i&255)){a[e>>0]=g;a[f>>0]=i;i=h+1|0;f=a[e>>0]|0;g=a[d>>0]|0;if((f&255)<(g&255)){a[d>>0]=f;a[e>>0]=g;g=h+2|0;e=a[d>>0]|0;f=a[c>>0]|0;if((e&255)<(f&255)){a[c>>0]=e;a[d>>0]=f;f=a[c>>0]|0;d=a[b>>0]|0;if((f&255)<(d&255)){a[b>>0]=f;a[c>>0]=d;j=h+4|0}else j=h+3|0}else j=g}else j=i}else j=h;return j|0}function Pc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=b+2|0;Mc(b,b+1|0,e,d)|0;d=b+3|0;if((d|0)!=(c|0)){f=d;d=e;while(1){e=a[f>>0]|0;g=a[d>>0]|0;if((e&255)<(g&255)){h=g;g=f;i=d;while(1){a[g>>0]=h;if((i|0)==(b|0)){j=b;break}k=i+-1|0;h=a[k>>0]|0;if((e&255)>=(h&255)){j=i;break}else{l=i;i=k;g=l}}a[j>>0]=e}g=f+1|0;if((g|0)==(c|0))break;else{i=f;f=g;d=i}}}return}function Qc(){}function Rc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;g=b&3;h=d|d<<8|d<<16|d<<24;i=f&~3;if(g){g=b+4-g|0;while((b|0)<(g|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(i|0)){c[b>>2]=h;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function Sc(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){B=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Tc(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){B=b<>>32-c;return a<=4096)return sa(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function Vc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ia[a&7](b|0,c|0,d|0)|0}function Wc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ja[a&3](b|0,c|0,d|0,e|0,f|0)}function Xc(a,b){a=a|0;b=b|0;Ka[a&15](b|0)}function Yc(a,b){a=a|0;b=b|0;return La[a&3](b|0)|0}function Zc(a){a=a|0;Ma[a&0]()}function _c(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Na[a&3](b|0,c|0,d|0,e|0,f|0,g|0)}function $c(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Oa[a&3](b|0,c|0,d|0,e|0)}function ad(a,b,c){a=a|0;b=b|0;c=c|0;aa(0);return 0}function bd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;aa(1)}function cd(a){a=a|0;aa(2)}function dd(a){a=a|0;aa(3);return 0}function ed(){aa(4)}function fd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;aa(5)}function gd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;aa(6)} +function Pa(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function Qa(){return i|0}function Ra(a){a=a|0;i=a}function Sa(a,b){a=a|0;b=b|0;i=a;j=b}function Ta(a,b){a=a|0;b=b|0;if(!m){m=a;n=b}}function Ua(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function Va(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function Wa(a){a=a|0;B=a}function Xa(){return B|0}function Ya(){return c[123158]|0}function Za(a){a=a|0;c[123158]=a;return}function _a(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=b+4|0;g=c[f>>2]|0;h=c[b>>2]|0;i=g-h>>4;if(i>>>0>=d>>>0){if(i>>>0>d>>>0?(j=h+(d<<4)|0,(g|0)!=(j|0)):0)c[f>>2]=g+(~((0-j+(g+-16)|0)>>>4)<<4)}else Ib(b,d-i|0);if(!d)return;else k=0;do{i=c[b>>2]|0;g=c[e+(k<<2)>>2]|0;a[i+(k<<4)>>0]=g&3;a[i+(k<<4)+1>>0]=g>>>2&3;a[i+(k<<4)+2>>0]=g>>>4&3;a[i+(k<<4)+3>>0]=g>>>6&3;a[i+(k<<4)+4>>0]=g>>>8&3;a[i+(k<<4)+5>>0]=g>>>10&3;a[i+(k<<4)+6>>0]=g>>>12&3;a[i+(k<<4)+7>>0]=g>>>14&3;a[i+(k<<4)+8>>0]=g>>>16&3;a[i+(k<<4)+9>>0]=g>>>18&3;a[i+(k<<4)+10>>0]=g>>>20&3;a[i+(k<<4)+11>>0]=g>>>22&3;a[i+(k<<4)+12>>0]=g>>>24&3;a[i+(k<<4)+13>>0]=g>>>26&3;a[i+(k<<4)+14>>0]=g>>>28&3;a[i+(k<<4)+15>>0]=g>>>30;k=k+1|0}while((k|0)!=(d|0));return}function $a(){var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;f=i;i=i+112|0;g=f+72|0;h=f+8|0;j=f+4|0;k=f;if(!(a[953638]|0))l=0;else{i=f;return}do{m=0;do{n=((m<<5)+l|0)*60|0;o=0;do{p=(o*10|0)+n|0;q=b[510752+(p<<2)+2>>1]|0;r=b[510752+((p|1)<<2)+2>>1]|0;s=(r&65535)<(q&65535);t=s?r:q;q=b[510752+(p+2<<2)+2>>1]|0;r=(q&65535)<(t&65535);u=r?q:t;t=b[510752+(p+3<<2)+2>>1]|0;q=(t&65535)<(u&65535);v=q?t:u;u=b[510752+(p+4<<2)+2>>1]|0;t=(u&65535)<(v&65535);w=t?u:v;v=b[510752+(p+5<<2)+2>>1]|0;u=(v&65535)<(w&65535);x=u?v:w;w=b[510752+(p+6<<2)+2>>1]|0;v=(w&65535)<(x&65535);y=v?w:x;x=b[510752+(p+7<<2)+2>>1]|0;w=(x&65535)<(y&65535);z=w?x:y;y=b[510752+(p+8<<2)+2>>1]|0;x=(y&65535)<(z&65535);a[961746+(l*48|0)+(m*6|0)+o>>0]=(e[510752+(p+9<<2)+2>>1]|0)<((x?y:z)&65535)?9:x?8:w?7:v?6:u?5:t?4:q?3:r?2:s&1;o=o+1|0}while((o|0)!=6);m=m+1|0}while((m|0)!=8);l=l+1|0}while((l|0)!=32);c[127323]=0;c[127327]=1;c[127322]=2;c[127326]=3;c[127331]=4;c[127321]=5;l=0;do{m=(l&1|0)!=0?511:0;o=l>>>1;c[509344+(l<<2)>>2]=((o<<6|o)^m)>>>2|m&128;l=l+1|0}while((l|0)!=16);A=0;do{l=(A&1|0)!=0?511:0;m=A>>>1;c[509344+((A|16)<<2)>>2]=((m<<6|m)+22^l)>>>2|l&128;A=A+1|0}while((A|0)!=16);B=0;do{A=(B&1|0)!=0?511:0;l=B>>>1;c[509344+((B|32)<<2)>>2]=((l<<6|l)+44^A)>>>2|A&128;B=B+1|0}while((B|0)!=16);C=0;do{B=963282+(C<<1)+1|0;A=963282+(C<<1)|0;l=0;m=2147483647;while(1){o=c[509344+(l<<2)>>2]|0;n=((o<<8|o)*43|0)+32|0;o=l&255;s=0;r=m;while(1){q=c[509344+(s<<2)>>2]|0;t=(((n+((q<<8|q)*21|0)|0)/64|0)>>8)-C|0;q=(t|0)>-1?t:0-t|0;if((q|0)<(r|0)){a[B>>0]=s;a[A>>0]=o;D=q}else D=r;s=s+1|0;if((s|0)==48){E=D;break}else r=D}r=l+1|0;if((r|0)==48)break;else{l=r;m=E}}C=C+1|0}while((C|0)!=256);F=0;do{C=963794+F|0;E=0;D=2147483647;while(1){m=(c[509344+(E<<2)>>2]|0)-F|0;l=(m|0)>-1?m:0-m|0;if((l|0)<(D|0)){a[C>>0]=E;G=l}else G=D;E=E+1|0;if((E|0)==48)break;else D=G}F=F+1|0}while((F|0)!=256);H=0;do{a[g+H>>0]=H<<3|H>>>2;H=H+1|0}while((H|0)!=32);I=0;do{H=953639+(I<<1)|0;F=953639+(I<<1)+1|0;G=0;D=256;while(1){E=G&255;C=d[g+G>>0]|0;l=0;m=D;while(1){A=d[g+l>>0]|0;B=((((A<<1)+C|0)>>>0)/3|0)-I|0;r=A-C|0;A=(((r|0)>-1?r:0-r|0)>>5)+((B|0)>-1?B:0-B|0)|0;if((A|0)<(m|0)){a[H>>0]=l;a[F>>0]=E;J=A}else J=m;l=l+1|0;if((l|0)==32){K=J;break}else m=J}m=G+1|0;if((m|0)==32)break;else{G=m;D=K}}I=I+1|0}while((I|0)!=256);L=0;do{I=954151+(L<<1)|0;K=954151+(L<<1)+1|0;J=0;D=256;while(1){G=(d[g+J>>0]|0)-L|0;F=(G|0)>-1?G:0-G|0;if((F|0)<(D|0)){a[I>>0]=J;a[K>>0]=0;M=F}else M=D;J=J+1|0;if((J|0)==32)break;else D=M}L=L+1|0}while((L|0)!=256);L=0;do{a[h+L>>0]=L<<2|L>>>4;L=L+1|0}while((L|0)!=64);N=0;do{L=954663+(N<<1)|0;M=954663+(N<<1)+1|0;g=0;D=256;while(1){J=g&255;K=d[h+g>>0]|0;I=0;F=D;while(1){G=d[h+I>>0]|0;H=((((G<<1)+K|0)>>>0)/3|0)-N|0;m=G-K|0;G=(((m|0)>-1?m:0-m|0)>>5)+((H|0)>-1?H:0-H|0)|0;if((G|0)<(F|0)){a[L>>0]=I;a[M>>0]=J;O=G}else O=F;I=I+1|0;if((I|0)==64){P=O;break}else F=O}F=g+1|0;if((F|0)==64)break;else{g=F;D=P}}N=N+1|0}while((N|0)!=256);Q=0;do{N=955175+(Q<<1)|0;P=955175+(Q<<1)+1|0;O=0;D=256;while(1){g=(d[h+O>>0]|0)-Q|0;M=(g|0)>-1?g:0-g|0;if((M|0)<(D|0)){a[N>>0]=O;a[P>>0]=0;R=M}else R=D;O=O+1|0;if((O|0)==64)break;else D=R}Q=Q+1|0}while((Q|0)!=256);c[127259]=0;c[127263]=1;c[127258]=2;c[127262]=3;c[127267]=4;c[127257]=5;Q=j+1|0;R=k+1|0;h=j+2|0;D=k+2|0;O=j+3|0;P=k+3|0;N=0;do{M=a[955687+(d[977669+(N<<2)>>0]|0)>>0]|0;a[j>>0]=M;a[k>>0]=a[955691+(M&255)>>0]|0;M=a[955687+(d[977669+(N<<2)+1>>0]|0)>>0]|0;a[Q>>0]=M;a[R>>0]=a[955691+(M&255)>>0]|0;M=a[955687+(d[977669+(N<<2)+2>>0]|0)>>0]|0;a[h>>0]=M;a[D>>0]=a[955691+(M&255)>>0]|0;M=a[955687+(d[977669+(N<<2)+3>>0]|0)>>0]|0;a[O>>0]=M;a[P>>0]=a[955691+(M&255)>>0]|0;M=0;do{g=M&3;L=M>>>2&3;F=M>>>4&3;I=M>>>6&3;J=d[k+I>>0]<<6|(d[k+F>>0]<<4|(d[k+L>>0]<<2|d[k+g>>0]));a[955695+(N<<8)+M>>0]=d[j+I>>0]<<6|(d[j+F>>0]<<4|(d[j+L>>0]<<2|d[j+g>>0]));a[958255+(N<<8)+M>>0]=J;M=M+1|0}while((M|0)!=256);N=N+1|0}while((N|0)!=10);c[127272]=0;c[127277]=1;c[127282]=2;c[127287]=3;c[127275]=4;c[127279]=5;c[127274]=6;c[127278]=7;c[127283]=8;c[127273]=9;N=0;do{a[961007+(N<<2)>>0]=15-(d[960815+(N<<2)>>0]|0);a[961007+(N<<2)+1>>0]=15-(d[960815+(N<<2)+1>>0]|0);a[961007+(N<<2)+2>>0]=15-(d[960815+(N<<2)+2>>0]|0);a[961007+(N<<2)+3>>0]=15-(d[960815+(N<<2)+3>>0]|0);N=N+1|0}while((N|0)!=48);c[127291]=0;c[127295]=1;c[127290]=2;c[127294]=3;c[127299]=4;c[127289]=5;c[127307]=0;c[127311]=1;c[127306]=2;c[127310]=3;c[127315]=4;c[127305]=5;N=0;do{j=964050+(N<<1)|0;k=964050+(N<<1)+1|0;P=0;O=256;while(1){D=P<<1|P>>3;h=(D<<3|D>>2)*5|0;D=P&255;R=0;Q=O;while(1){M=((((R<<3|R>>2)*3|0)+h|0)/8|0)-N|0;J=(M|0)>-1?M:0-M|0;if((J|0)<(Q|0)){a[j>>0]=D;a[k>>0]=R;S=J}else S=Q;R=R+1|0;if((R|0)==32){T=S;break}else Q=S}Q=P+1|0;if((Q|0)==16)break;else{P=Q;O=T}}N=N+1|0}while((N|0)!=256);U=0;do{N=964562+(U<<1)|0;T=964562+(U<<1)+1|0;S=0;O=256;while(1){P=(S<<3|S>>2)*5|0;k=S&255;j=0;Q=O;while(1){R=((((j<<3|j>>2)*3|0)+P|0)/8|0)-U|0;D=(R|0)>-1?R:0-R|0;if((D|0)<(Q|0)){a[N>>0]=k;a[T>>0]=j;V=D}else V=Q;j=j+1|0;if((j|0)==32){W=V;break}else Q=V}Q=S+1|0;if((Q|0)==32)break;else{S=Q;O=W}}U=U+1|0}while((U|0)!=256);X=0;do{U=965074+(X<<1)|0;W=965074+(X<<1)+1|0;V=0;O=256;while(1){S=(V<<3|V>>2)*5|0;T=V&255;N=0;Q=O;while(1){j=((((N<<2|N>>4)*3|0)+S|0)/8|0)-X|0;k=(j|0)>-1?j:0-j|0;if((k|0)<(Q|0)){a[U>>0]=T;a[W>>0]=N;Y=k}else Y=Q;N=N+1|0;if((N|0)==64){Z=Y;break}else Q=Y}Q=V+1|0;if((Q|0)==32)break;else{V=Q;O=Z}}X=X+1|0}while((X|0)!=256);_=0;do{X=965586+(_<<1)|0;Z=965586+(_<<1)+1|0;Y=0;O=256;while(1){V=Y<<1|Y>>3;W=(V<<3|V>>2)-_|0;V=(W|0)>-1?W:0-W|0;if((V|0)<(O|0)){a[X>>0]=0;a[Z>>0]=Y;$=V}else $=O;Y=Y+1|0;if((Y|0)==16)break;else O=$}_=_+1|0}while((_|0)!=256);aa=0;do{_=966098+(aa<<1)|0;$=966098+(aa<<1)+1|0;O=0;Y=256;while(1){Z=(O<<3|O>>2)-aa|0;X=(Z|0)>-1?Z:0-Z|0;if((X|0)<(Y|0)){a[_>>0]=0;a[$>>0]=O;ba=X}else ba=Y;O=O+1|0;if((O|0)==32)break;else Y=ba}aa=aa+1|0}while((aa|0)!=256);ca=0;do{aa=966610+(ca<<1)|0;ba=966610+(ca<<1)+1|0;Y=0;O=256;while(1){$=(Y<<2|Y>>4)-ca|0;_=($|0)>-1?$:0-$|0;if((_|0)<(O|0)){a[aa>>0]=0;a[ba>>0]=Y;da=_}else da=O;Y=Y+1|0;if((Y|0)==64)break;else O=da}ca=ca+1|0}while((ca|0)!=256);c[127387]=0;c[127391]=1;c[127386]=2;c[127390]=3;c[127395]=4;c[127385]=5;ca=0;do{da=0;O=0;Y=0;ba=2147483647;while(1){aa=(Y<<5|Y<<1)*5|0;_=ca-((aa+51|0)>>>3)|0;$=(_|0)>-1?_:0-_|0;_=($|0)<(ba|0);X=_?$:ba;$=ca-((aa+153|0)>>>3)|0;Z=($|0)>-1?$:0-$|0;$=(Z|0)<(X|0);V=$?Z:X;X=ca-((aa+255|0)>>>3)|0;Z=(X|0)>-1?X:0-X|0;X=(Z|0)<(V|0);W=X?Z:V;V=ca-((aa+357|0)>>>3)|0;Z=(V|0)>-1?V:0-V|0;V=(Z|0)<(W|0);U=V?Z:W;W=ca-((aa+459|0)>>>3)|0;Z=(W|0)>-1?W:0-W|0;W=(Z|0)<(U|0);Q=W?Z:U;U=ca-((aa+561|0)>>>3)|0;Z=(U|0)>-1?U:0-U|0;U=(Z|0)<(Q|0);N=U?Z:Q;Q=ca-((aa+663|0)>>>3)|0;Z=(Q|0)>-1?Q:0-Q|0;Q=(Z|0)<(N|0);T=Q?Z:N;N=ca-((aa+765|0)>>>3)|0;aa=(N|0)>-1?N:0-N|0;N=(aa|0)<(T|0);Z=N?7:Q?6:U?5:W?4:V?3:X?2:$?1:_?0:da;S=_|$|X|V|W|U|Q|N?Y:O;Y=Y+1|0;if((Y|0)==8){ea=Z;fa=S;break}else{da=Z;O=S;ba=N?aa:T}}a[967122+(ca<<1)>>0]=fa;a[967122+(ca<<1)+1>>0]=ea;ca=ca+1|0}while((ca|0)!=256);ga=0;do{ca=ga+-34|0;ea=(ca|0)>-1?ca:34-ga|0;ca=(ea|0)<(ga|0);fa=ca?ea:ga;ea=ga+-68|0;ba=(ea|0)>-1?ea:68-ga|0;ea=(ba|0)<(fa|0);O=ea?ba:fa;fa=ga+-102|0;ba=(fa|0)>-1?fa:102-ga|0;fa=(ba|0)<(O|0);da=fa?ba:O;O=ga+-136|0;ba=(O|0)>-1?O:136-ga|0;O=(ba|0)<(da|0);Y=O?ba:da;da=ga+-170|0;ba=(da|0)>-1?da:170-ga|0;da=(ba|0)<(Y|0);T=da?ba:Y;Y=ga+-204|0;ba=(Y|0)>-1?Y:204-ga|0;Y=(ba|0)<(T|0);aa=ga+-238|0;N=(((aa|0)>-1?aa:238-ga|0)|0)<((Y?ba:T)|0)?7:Y?6:da?5:O?4:fa?3:ea?2:ca&1;a[967634+(ga<<1)>>0]=N;a[967634+(ga<<1)+1>>0]=N;ga=ga+1|0}while((ga|0)!=256);ha=0;do{ga=ha+-17|0;N=(ga|0)>-1?ga:17-ha|0;ga=ha+-51|0;ca=(ga|0)>-1?ga:51-ha|0;ga=(ca|0)<(N|0);ea=ga?ca:N;N=ha+-85|0;ca=(N|0)>-1?N:85-ha|0;N=(ca|0)<(ea|0);fa=N?ca:ea;ea=ha+-119|0;ca=(ea|0)>-1?ea:119-ha|0;ea=(ca|0)<(fa|0);O=ea?ca:fa;fa=ha+-153|0;ca=(fa|0)>-1?fa:153-ha|0;fa=(ca|0)<(O|0);da=fa?ca:O;O=ha+-187|0;ca=(O|0)>-1?O:187-ha|0;O=(ca|0)<(da|0);Y=O?ca:da;da=ha+-221|0;ca=(da|0)>-1?da:221-ha|0;da=(ca|0)<(Y|0);T=ha+-255|0;ba=(((T|0)>-1?T:255-ha|0)|0)<((da?ca:Y)|0)?7:da?6:O?5:fa?4:ea?3:N?2:ga&1;a[968146+(ha<<1)>>0]=ba;a[968146+(ha<<1)+1>>0]=ba;ha=ha+1|0}while((ha|0)!=256);ia=0;do{ha=0;ba=0;ga=0;N=2147483647;while(1){ea=ga<<2|ga>>>1;fa=(ea<<3|ea>>>2)*5|0;ea=ha;O=ba;da=0;Y=N;while(1){ca=da<<1|da>>>3;T=ia-((((ca<<3|ca>>>2)*3|0)+fa|0)>>>3)|0;ca=(T|0)>-1?T:0-T|0;T=(ca|0)<(Y|0);aa=T?ga:O;S=T?da:ea;Z=T?ca:Y;da=da+1|0;if((da|0)==16){ja=Z;ka=S;la=aa;break}else{ea=S;O=aa;Y=Z}}Y=ga+1|0;if((Y|0)==8){ma=ka;na=la;break}else{ha=ka;ba=la;ga=Y;N=ja}}a[968658+(ia<<1)>>0]=na;a[968658+(ia<<1)+1>>0]=ma;ia=ia+1|0}while((ia|0)!=256);oa=0;do{ia=0;ma=0;na=0;ja=2147483647;while(1){la=na<<1|na>>>3;ka=(la<<3|la>>>2)*5|0;la=ia;N=ma;ga=0;ba=ja;while(1){ha=ga<<1|ga>>>3;Y=oa-((((ha<<3|ha>>>2)*3|0)+ka|0)>>>3)|0;ha=(Y|0)>-1?Y:0-Y|0;Y=(ha|0)<(ba|0);O=Y?na:N;ea=Y?ga:la;da=Y?ha:ba;ga=ga+1|0;if((ga|0)==16){pa=da;qa=ea;ra=O;break}else{la=ea;N=O;ba=da}}ba=na+1|0;if((ba|0)==16){sa=qa;ta=ra;break}else{ia=qa;ma=ra;na=ba;ja=pa}}a[969170+(oa<<1)>>0]=ta;a[969170+(oa<<1)+1>>0]=sa;oa=oa+1|0}while((oa|0)!=256);a[953638]=1;i=f;return}function ab(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=0;c[a+28>>2]=0;c[a+32>>2]=0;c[a+36>>2]=0;c[a+40>>2]=0;c[a+44>>2]=0;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;c[a+60>>2]=0;c[a+64>>2]=0;c[a+68>>2]=0;c[a+72>>2]=0;c[a+76>>2]=0;c[a+80>>2]=0;c[a+84>>2]=0;c[a+88>>2]=0;c[a+92>>2]=0;c[a+96>>2]=0;c[a+100>>2]=0;c[a+104>>2]=0;c[a+108>>2]=0;c[a+112>>2]=0;c[a+116>>2]=0;c[a+120>>2]=0;c[a+124>>2]=0;c[a+128>>2]=0;c[a+132>>2]=0;c[a+136>>2]=0;c[a+140>>2]=0;c[a+144>>2]=0;c[a+148>>2]=0;c[a+152>>2]=0;c[a+156>>2]=0;c[a+160>>2]=0;c[a+164>>2]=0;c[a+168>>2]=0;c[a+172>>2]=0;c[a+176>>2]=0;c[a+180>>2]=0;c[a+184>>2]=0;c[a+188>>2]=0;c[a+192>>2]=0;c[a+196>>2]=0;c[a+200>>2]=0;c[a+204>>2]=0;c[a+208>>2]=0;c[a+212>>2]=0;c[a+216>>2]=0;c[a+220>>2]=0;c[a+224>>2]=0;c[a+228>>2]=0;c[a+232>>2]=0;c[a+236>>2]=0;c[a+240>>2]=0;c[a+244>>2]=0;c[a+248>>2]=0;c[a+252>>2]=0;c[a+256>>2]=0;c[a+260>>2]=0;c[a+264>>2]=0;c[a+268>>2]=0;c[a+272>>2]=0;c[a+276>>2]=0;c[a+280>>2]=0;c[a+284>>2]=0;c[a+288>>2]=0;c[a+292>>2]=0;c[a+296>>2]=0;c[a+300>>2]=0;c[a+304>>2]=0;c[a+308>>2]=0;c[a+312>>2]=0;c[a+316>>2]=0;c[a+320>>2]=0;c[a+324>>2]=0;c[a+328>>2]=0;c[a+332>>2]=0;c[a+336>>2]=0;c[a+340>>2]=0;c[a+344>>2]=0;c[a+348>>2]=0;c[a+352>>2]=0;c[a+356>>2]=0;c[a+360>>2]=0;c[a+364>>2]=0;c[a+368>>2]=0;c[a+372>>2]=0;c[a+376>>2]=0;c[a+380>>2]=0;c[a+384>>2]=0;c[a+388>>2]=0;c[a+392>>2]=0;c[a+396>>2]=0;c[a+400>>2]=0;c[a+404>>2]=0;return}function bb(e,f,g,h,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0;m=i;i=i+352|0;n=m+264|0;o=m+224|0;p=m+188|0;q=m+152|0;r=m+116|0;s=m+76|0;t=m+80|0;u=m+40|0;v=m+336|0;w=m+320|0;x=m+4|0;y=m+304|0;z=m+288|0;A=m;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;B=o;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));B=p;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));B=q;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));B=r;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));if((((((((!((g|0)==0&(h|0)!=0)?(c[n>>2]=h,D=n+4|0,c[D>>2]=g,E=n+8|0,c[E>>2]=g,F=n+12|0,c[F>>2]=g+h,h=n+16|0,c[h>>2]=0,g=n+20|0,c[g>>2]=0,cb(n,o)|0):0)?cb(n,p)|0:0)?cb(n,q)|0:0)?cb(n,r)|0:0)?(G=o+4|0,(c[G>>2]|0)!=(c[o>>2]|0)):0)?(H=p+4|0,(c[H>>2]|0)!=(c[p>>2]|0)):0)?(I=q+4|0,(c[I>>2]|0)!=(c[q>>2]|0)):0)?(J=r+4|0,(c[J>>2]|0)!=(c[r>>2]|0)):0){K=c[g>>2]|0;if(!K){L=c[D>>2]|0;if(L>>>0<(c[F>>2]|0)>>>0){c[D>>2]=L+1;M=d[L>>0]|0}else M=0;c[h>>2]=c[h>>2]|M;c[g>>2]=8;N=8}else N=K;K=c[h>>2]|0;M=K&1;c[h>>2]=K>>>1;c[g>>2]=N+-1;N=(M|0)==0;K=e+4|0;L=c[K>>2]|0;O=c[e>>2]|0;P=L-O>>3;if(P>>>0>=f>>>0){if(P>>>0>f>>>0?(Q=O+(f<<3)|0,(L|0)!=(Q|0)):0)c[K>>2]=L+(~((L+-8-Q|0)>>>3)<<3)}else Jb(e,f-P|0);a[s>>0]=16;a[s+1>>0]=16;a[s+2>>0]=16;a[s+3>>0]=0;a:do if(f){P=r+12|0;Q=M<<1^3;L=o+12|0;K=o+24|0;O=p+12|0;R=p+24|0;S=q+12|0;T=q+24|0;U=r+24|0;V=0;W=0;b:while(1){if((c[J>>2]|0)==(c[r>>2]|0)){X=23;break}Y=c[g>>2]|0;while(1){if(Y>>>0>=16){Z=Y;break}_=c[D>>2]|0;if(_>>>0<(c[F>>2]|0)>>>0){c[D>>2]=_+1;$=d[_>>0]|0}else $=0;c[h>>2]=c[h>>2]|$<>2]=Y;if(Y>>>0>=33){X=28;break b}}Y=c[h>>2]|0;_=c[(c[P>>2]|0)+((Y&1023)<<2)>>2]|0;if((_|0)>-1){aa=_>>16;ba=_&65535}else{ca=c[U>>2]|0;da=10;ea=_;while(1){_=da+1|0;fa=b[ca+((Y>>>da&1)+~ea<<1)>>1]|0;ga=fa<<16>>16;if(fa<<16>>16<0){da=_;ea=ga}else{aa=_;ba=ga;break}}}c[h>>2]=Y>>>aa;c[g>>2]=Z-aa;W=ba+W&7;a[(c[e>>2]|0)+(V<<3)+4>>0]=W;ea=0;do{da=s+ea|0;ca=a[da>>0]|0;do if((ca&255)>=10)if((ca&255)<22){if((c[H>>2]|0)==(c[p>>2]|0)){X=51;break b}ga=c[g>>2]|0;while(1){if(ga>>>0>=16){ha=ga;break}_=c[D>>2]|0;if(_>>>0<(c[F>>2]|0)>>>0){c[D>>2]=_+1;ia=d[_>>0]|0}else ia=0;c[h>>2]=c[h>>2]|ia<>2]=ga;if(ga>>>0>=33){X=56;break b}}ga=c[h>>2]|0;_=c[(c[O>>2]|0)+((ga&1023)<<2)>>2]|0;if((_|0)>-1){ja=_>>16;ka=_&65535}else{fa=c[R>>2]|0;la=10;ma=_;while(1){_=la+1|0;oa=b[fa+((ga>>>la&1)+~ma<<1)>>1]|0;pa=oa<<16>>16;if(oa<<16>>16<0){la=_;ma=pa}else{ja=_;ka=pa;break}}}c[h>>2]=ga>>>ja;c[g>>2]=ha-ja;qa=ka;break}else{if((c[I>>2]|0)==(c[q>>2]|0)){X=64;break b}ma=c[g>>2]|0;while(1){if(ma>>>0>=16){ra=ma;break}la=c[D>>2]|0;if(la>>>0<(c[F>>2]|0)>>>0){c[D>>2]=la+1;sa=d[la>>0]|0}else sa=0;c[h>>2]=c[h>>2]|sa<>2]=ma;if(ma>>>0>=33){X=69;break b}}ma=c[h>>2]|0;ga=c[(c[S>>2]|0)+((ma&1023)<<2)>>2]|0;if((ga|0)>-1){ta=ga>>16;ua=ga&65535}else{la=c[T>>2]|0;fa=10;pa=ga;while(1){ga=fa+1|0;_=b[la+((ma>>>fa&1)+~pa<<1)>>1]|0;oa=_<<16>>16;if(_<<16>>16<0){fa=ga;pa=oa}else{ta=ga;ua=oa;break}}}c[h>>2]=ma>>>ta;c[g>>2]=ra-ta;qa=ua;break}else{if((c[G>>2]|0)==(c[o>>2]|0)){X=37;break b}pa=c[g>>2]|0;while(1){if(pa>>>0>=16){va=pa;break}fa=c[D>>2]|0;if(fa>>>0<(c[F>>2]|0)>>>0){c[D>>2]=fa+1;wa=d[fa>>0]|0}else wa=0;c[h>>2]=c[h>>2]|wa<>2]=pa;if(pa>>>0>=33){X=42;break b}}pa=c[h>>2]|0;ma=c[(c[L>>2]|0)+((pa&1023)<<2)>>2]|0;if((ma|0)>-1){xa=ma>>16;ya=ma&65535}else{fa=c[K>>2]|0;la=10;oa=ma;while(1){ma=la+1|0;ga=b[fa+((pa>>>la&1)+~oa<<1)>>1]|0;_=ga<<16>>16;if(ga<<16>>16<0){la=ma;oa=_}else{xa=ma;ya=_;break}}}c[h>>2]=pa>>>xa;c[g>>2]=va-xa;qa=ya}while(0);oa=(ca&255)+qa&31;a[(c[e>>2]|0)+(V<<3)+ea>>0]=oa;a[da>>0]=oa;ea=ea+1|0}while(ea>>>0>>0);if(!N){ea=(c[e>>2]|0)+(V<<3)|0;a[ea+1>>0]=a[ea>>0]|0;ea=(c[e>>2]|0)+(V<<3)|0;a[ea+2>>0]=a[ea>>0]|0}V=V+1|0;if(V>>>0>=f>>>0)break a}if((X|0)==23)na(969816,969718,435,969839);else if((X|0)==28)na(969795,969718,445,969839);else if((X|0)==37)na(969816,969718,435,969839);else if((X|0)==42)na(969795,969718,445,969839);else if((X|0)==51)na(969816,969718,435,969839);else if((X|0)==56)na(969795,969718,445,969839);else if((X|0)==64)na(969816,969718,435,969839);else if((X|0)==69)na(969795,969718,445,969839)}while(0);f=e+12|0;N=e+16|0;qa=c[N>>2]|0;ya=c[f>>2]|0;xa=(qa-ya|0)/11|0;if(xa>>>0>=j>>>0){if(xa>>>0>j>>>0?(va=ya+(j*11|0)|0,(qa|0)!=(va|0)):0)c[N>>2]=qa+(~(((0-va+(qa+-11)|0)>>>0)/11|0)*11|0)}else Kb(f,j-xa|0);if(!((k|0)==0&(l|0)!=0)){c[n>>2]=l;c[D>>2]=k;c[E>>2]=k;E=k+l|0;c[F>>2]=E;c[h>>2]=0;c[g>>2]=0;B=t;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));if((l|0)>0){l=k+1|0;c[D>>2]=l;za=l;Aa=d[k>>0]|0}else{za=k;Aa=0}c[h>>2]=Aa;c[g>>2]=8;k=Aa>>>1;c[h>>2]=k;c[g>>2]=7;c:do if(!(Aa&1)){l=Aa>>>2;c[h>>2]=l;c[g>>2]=6;if(!(k&1)){c[h>>2]=Aa>>>3;c[g>>2]=5;if(l&1){if(!j){X=284;break}else Ba=0;d:while(1){xa=0;do{qa=c[g>>2]|0;while(1){if(qa>>>0>=8){Ca=qa;break}va=c[D>>2]|0;if(va>>>0<(c[F>>2]|0)>>>0){c[D>>2]=va+1;Da=d[va>>0]|0}else Da=0;c[h>>2]=c[h>>2]|Da<>2]=qa;if(qa>>>0>=33){X=239;break d}}qa=c[h>>2]|0;da=qa&255;c[h>>2]=qa>>>8;c[g>>2]=Ca+-8;qa=0;do{ca=c[f>>2]|0;va=qa<<1;N=da>>>va&3;if((qa|xa)>>>0>=4){X=242;break d}ya=ca+(Ba*11|0)+xa|0;a[ya>>0]=(d[ya>>0]|0)&(3<>>3)|0;wa=ca+(Ba*11|0)+4+ya|0;G=va&7;va=d[969988+N>>0]|0;N=~(1<>0]=(d[wa>>0]|0)&N|(va&1)<>0]=(d[wa>>0]|0)&N|va>>>1<>>0<4);xa=xa+1|0}while(xa>>>0<4);eb((c[f>>2]|0)+(Ba*11|0)|0);Ba=Ba+1|0;if(Ba>>>0>=j>>>0){X=284;break c}}if((X|0)==239)na(969795,969718,322,969785);else if((X|0)==242)na(969992,969718,724,970010)}if(!(cb(n,t)|0)){Ea=0;break}if(j>>>0<=1){c[A>>2]=0;if(!j){X=284;break}}else{if((c[t+4>>2]|0)==(c[t>>2]|0)){Ea=0;break}c[A>>2]=0}xa=t+4|0;qa=t+12|0;da=t+24|0;G=0;e:while(1){if(!G){va=0;do{N=c[g>>2]|0;while(1){if(N>>>0>=8){Fa=N;break}wa=c[D>>2]|0;if(wa>>>0<(c[F>>2]|0)>>>0){c[D>>2]=wa+1;Ga=d[wa>>0]|0}else Ga=0;c[h>>2]=c[h>>2]|Ga<>2]=N;if(N>>>0>=33){X=258;break e}}N=c[h>>2]|0;wa=N&255;c[h>>2]=N>>>8;c[g>>2]=Fa+-8;a[A+va>>0]=N;N=0;do{ca=c[f>>2]|0;ya=N<<1;ua=wa>>>ya&3;if((N|va)>>>0>=4){X=261;break e}ta=ca+va|0;a[ta>>0]=(d[ta>>0]|0)&(3<>>3)|0;ra=ca+4+ta|0;sa=ya&7;ya=d[969988+ua>>0]|0;ua=~(1<>0]=(d[ra>>0]|0)&ua|(ya&1)<>0]=(d[ra>>0]|0)&ua|ya>>>1<>>0<4);va=va+1|0}while(va>>>0<4);eb(c[f>>2]|0)}else{va=0;do{if((c[xa>>2]|0)==(c[t>>2]|0)){X=267;break e}N=c[g>>2]|0;while(1){if(N>>>0>=16){Ha=N;break}wa=c[D>>2]|0;if(wa>>>0<(c[F>>2]|0)>>>0){c[D>>2]=wa+1;Ia=d[wa>>0]|0}else Ia=0;c[h>>2]=c[h>>2]|Ia<>2]=N;if(N>>>0>=33){X=272;break e}}N=c[h>>2]|0;wa=c[(c[qa>>2]|0)+((N&1023)<<2)>>2]|0;if((wa|0)>-1){Ja=wa>>16;Ka=wa&65535}else{sa=c[da>>2]|0;ya=10;ua=wa;while(1){wa=ya+1|0;ra=b[sa+((N>>>ya&1)+~ua<<1)>>1]|0;ca=ra<<16>>16;if(ra<<16>>16<0){ya=wa;ua=ca}else{Ja=wa;Ka=ca;break}}}c[h>>2]=N>>>Ja;c[g>>2]=Ha-Ja;ua=A+va|0;ya=(d[ua>>0]|0)^Ka;a[ua>>0]=ya;ua=0;do{sa=c[f>>2]|0;ca=ua<<1;wa=ya>>>ca&3;if((ua|va)>>>0>=4){X=279;break e}ra=sa+(G*11|0)+va|0;a[ra>>0]=(d[ra>>0]|0)&(3<>>3)|0;ta=sa+(G*11|0)+4+ra|0;I=ca&7;ca=d[969988+wa>>0]|0;wa=~(1<>0]=(d[ta>>0]|0)&wa|(ca&1)<>0]=(d[ta>>0]|0)&wa|ca>>>1<>>0<4);va=va+1|0}while(va>>>0<4);eb((c[f>>2]|0)+(G*11|0)|0)}G=G+1|0;if(G>>>0>=j>>>0){X=284;break c}}if((X|0)==258)na(969795,969718,322,969785);else if((X|0)==261)na(969992,969718,724,970010);else if((X|0)==267)na(969816,969718,435,969839);else if((X|0)==272)na(969795,969718,445,969839);else if((X|0)==279)na(969992,969718,724,970010)}G=l&15;da=l>>>4;c[h>>2]=da;qa=6+-4|0;c[g>>2]=qa;xa=qa;qa=za;va=da;while(1){if(xa>>>0>=4){La=va;Ma=xa;break}if(qa>>>0>>0){da=qa+1|0;c[D>>2]=da;Na=da;Oa=d[qa>>0]|0}else{Na=qa;Oa=0}va=va|Oa<>2]=va;xa=xa+8|0;c[g>>2]=xa;if(xa>>>0>=33){X=145;break}else qa=Na}if((X|0)==145)na(969795,969718,322,969785);qa=La&15;c[h>>2]=La>>>4;c[g>>2]=Ma+-4;B=u;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));do if(cb(n,u)|0){xa=u+4|0;if((c[xa>>2]|0)==(c[u>>2]|0)){Pa=1;break}B=x;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));va=(qa|0)!=0;do if(va){if(!(cb(n,x)|0)){Qa=1;break}if((c[x+4>>2]|0)==(c[x>>2]|0))Qa=1;else X=151}else X=151;while(0);f:do if((X|0)==151){if(!j){Qa=0;break}l=u+12|0;da=u+24|0;ua=(G|0)==0;ya=x+4|0;N=x+12|0;I=x+24|0;ca=e+24|0;wa=z+12|0;ta=z+6|0;sa=z+5|0;ra=z+4|0;ka=z+2|0;ja=z+3|0;ha=z+1|0;ia=z+7|0;H=z+8|0;s=z+9|0;ba=z+10|0;aa=z+11|0;Z=0;$=0;J=0;g:while(1){if(!J){if((c[xa>>2]|0)==(c[u>>2]|0)){X=156;break}M=c[g>>2]|0;while(1){if(M>>>0>=16){Ra=M;break}V=c[D>>2]|0;if(V>>>0<(c[F>>2]|0)>>>0){c[D>>2]=V+1;Sa=d[V>>0]|0}else Sa=0;c[h>>2]=c[h>>2]|Sa<>2]=M;if(M>>>0>=33){X=161;break g}}M=c[h>>2]|0;pa=c[(c[l>>2]|0)+((M&1023)<<2)>>2]|0;if((pa|0)>-1){Ta=pa>>16;Ua=pa&65535}else{V=c[da>>2]|0;Q=10;K=pa;while(1){pa=Q+1|0;L=b[V+((M>>>Q&1)+~K<<1)>>1]|0;T=L<<16>>16;if(L<<16>>16<0){Q=pa;K=T}else{Ta=pa;Ua=T;break}}}c[h>>2]=M>>>Ta;c[g>>2]=Ra-Ta;Va=Ua;Wa=8}else{Va=Z;Wa=J}J=Wa+-1|0;Z=Va>>>1;if(!(Va&1)){K=0;do{Q=c[g>>2]|0;while(1){if(Q>>>0>=8){Xa=Q;break}V=c[D>>2]|0;if(V>>>0<(c[F>>2]|0)>>>0){c[D>>2]=V+1;Ya=d[V>>0]|0}else Ya=0;c[h>>2]=c[h>>2]|Ya<>2]=Q;if(Q>>>0>=33){X=198;break g}}Q=c[h>>2]|0;V=Q&255;c[h>>2]=Q>>>8;c[g>>2]=Xa+-8;Q=0;do{T=c[f>>2]|0;pa=Q<<1;L=V>>>pa&3;if((Q|K)>>>0>=4){X=201;break g}S=T+($*11|0)+K|0;a[S>>0]=(d[S>>0]|0)&(3<>>3)|0;R=T+($*11|0)+4+S|0;O=pa&7;pa=d[969988+L>>0]|0;L=~(1<>0]=(d[R>>0]|0)&L|(pa&1)<>0]=(d[R>>0]|0)&L|pa>>>1<>>0<4);K=K+1|0}while(K>>>0<4)}else{if(ua)Za=0;else Za=db(n,G)|0;if(va){if((c[ya>>2]|0)==(c[x>>2]|0)){X=173;break}K=c[g>>2]|0;while(1){if(K>>>0>=16){_a=K;break}M=c[D>>2]|0;if(M>>>0<(c[F>>2]|0)>>>0){c[D>>2]=M+1;$a=d[M>>0]|0}else $a=0;c[h>>2]=c[h>>2]|$a<>2]=K;if(K>>>0>=33){X=178;break g}}K=c[h>>2]|0;M=c[(c[N>>2]|0)+((K&1023)<<2)>>2]|0;if((M|0)>-1){ab=M>>16;bb=M&65535}else{Q=c[I>>2]|0;V=10;O=M;while(1){M=V+1|0;pa=b[Q+((K>>>V&1)+~O<<1)>>1]|0;L=pa<<16>>16;if(pa<<16>>16<0){V=M;O=L}else{ab=M;bb=L;break}}}c[h>>2]=K>>>ab;c[g>>2]=_a-ab;fb=bb}else fb=0;O=c[ca>>2]|0;V=c[O>>2]|0;if(Za>>>0>=(c[O+4>>2]|0)-V>>4>>>0){Qa=1;break f}if(fb>>>0>=32768){X=186;break}a[wa>>0]=fb&3;a[ta>>0]=fb>>>2&1;a[sa>>0]=fb>>>3&1;a[z>>0]=fb>>>4&3;a[ra>>0]=fb>>>6&1;a[ka>>0]=fb>>>7&1;a[ja>>0]=fb>>>8&1;a[ha>>0]=fb>>>9&1;a[ia>>0]=fb>>>10&1;a[H>>0]=fb>>>11&1;a[s>>0]=fb>>>12&1;a[ba>>0]=fb>>>13&1;a[aa>>0]=fb>>>14&1;zb(y,V+(Za<<4)|0,z);V=0;do{O=V<<2;Q=0;do{L=c[f>>2]|0;M=d[y+(Q+O)>>0]|0;if((Q|V|M)>>>0>=4){X=190;break g}pa=Q<<1;R=L+($*11|0)+V|0;a[R>>0]=(d[R>>0]|0)&(3<>>3)|0;T=L+($*11|0)+4+R|0;S=pa&7;pa=d[969988+M>>0]|0;M=~(1<>0]=(d[T>>0]|0)&M|(pa&1)<>0]=(d[T>>0]|0)&M|pa>>>1<>>0<4);V=V+1|0}while(V>>>0<4)}eb((c[f>>2]|0)+($*11|0)|0);$=$+1|0;if($>>>0>=j>>>0){Qa=0;break f}}if((X|0)==156)na(969816,969718,435,969839);else if((X|0)==161)na(969795,969718,445,969839);else if((X|0)==173)na(969816,969718,435,969839);else if((X|0)==178)na(969795,969718,445,969839);else if((X|0)==186)na(969957,961699,48,969978);else if((X|0)==190)na(969992,969718,724,970010);else if((X|0)==198)na(969795,969718,322,969785);else if((X|0)==201)na(969992,969718,724,970010)}while(0);va=c[x+24>>2]|0;xa=va;if(va){$=x+28|0;aa=c[$>>2]|0;if((aa|0)!=(va|0))c[$>>2]=aa+(~((aa+-2-xa|0)>>>1)<<1);bc(va)}va=c[x+12>>2]|0;xa=va;if(va){aa=x+16|0;$=c[aa>>2]|0;if(($|0)!=(va|0))c[aa>>2]=$+(~(($+-4-xa|0)>>>2)<<2);bc(va)}va=c[x>>2]|0;if(va){xa=x+4|0;if((c[xa>>2]|0)!=(va|0))c[xa>>2]=va;bc(va)}Pa=Qa}else Pa=1;while(0);G=c[u+24>>2]|0;qa=G;if(G){va=u+28|0;xa=c[va>>2]|0;if((xa|0)!=(G|0))c[va>>2]=xa+(~((xa+-2-qa|0)>>>1)<<1);bc(G)}G=c[u+12>>2]|0;qa=G;if(G){xa=u+16|0;va=c[xa>>2]|0;if((va|0)!=(G|0))c[xa>>2]=va+(~((va+-4-qa|0)>>>2)<<2);bc(G)}G=c[u>>2]|0;if(G){qa=u+4|0;if((c[qa>>2]|0)!=(G|0))c[qa>>2]=G;bc(G)}if(!Pa)X=284;else Ea=0}else{G=k&15;qa=k>>>4;c[h>>2]=qa;va=7+-4|0;c[g>>2]=va;xa=va;va=za;$=qa;while(1){if(xa>>>0>=4){gb=$;hb=xa;break}if(va>>>0>>0){qa=va+1|0;c[D>>2]=qa;ib=qa;jb=d[va>>0]|0}else{ib=va;jb=0}$=$|jb<>2]=$;xa=xa+8|0;c[g>>2]=xa;if(xa>>>0>=33){X=93;break}else va=ib}if((X|0)==93)na(969795,969718,322,969785);va=gb&15;c[h>>2]=gb>>>4;c[g>>2]=hb+-4;B=u;C=B+36|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));xa=(va|0)!=0;do if(xa){if(!(cb(n,u)|0)){$=c[u+24>>2]|0;qa=$;if($){aa=u+28|0;ba=c[aa>>2]|0;if((ba|0)!=($|0))c[aa>>2]=ba+(~((ba+-2-qa|0)>>>1)<<1);bc($)}$=c[u+12>>2]|0;qa=$;if($){ba=u+16|0;aa=c[ba>>2]|0;if((aa|0)!=($|0))c[ba>>2]=aa+(~((aa+-4-qa|0)>>>2)<<2);bc($)}$=c[u>>2]|0;if($){qa=u+4|0;if((c[qa>>2]|0)!=($|0))c[qa>>2]=$;bc($)}Ea=0;break c}$=u+4|0;if((c[$>>2]|0)!=(c[u>>2]|0))break;qa=c[u+24>>2]|0;aa=qa;if(qa){ba=u+28|0;s=c[ba>>2]|0;if((s|0)!=(qa|0))c[ba>>2]=s+(~((s+-2-aa|0)>>>1)<<1);bc(qa)}qa=c[u+12>>2]|0;aa=qa;if(qa){s=u+16|0;ba=c[s>>2]|0;if((ba|0)!=(qa|0))c[s>>2]=ba+(~((ba+-4-aa|0)>>>2)<<2);bc(qa)}qa=c[u>>2]|0;if(qa){if((c[$>>2]|0)!=(qa|0))c[$>>2]=qa;bc(qa)}Ea=0;break c}while(0);h:do if(j){va=(G|0)==0;qa=u+4|0;$=u+12|0;aa=u+24|0;ba=e+24|0;s=w+12|0;H=w+6|0;ia=w+5|0;ha=w+4|0;ja=w+2|0;ka=w+3|0;ra=w+1|0;sa=w+7|0;ta=w+8|0;wa=w+9|0;ca=w+10|0;I=w+11|0;N=0;i:while(1){if(va)kb=0;else kb=db(n,G)|0;if(xa){if((c[qa>>2]|0)==(c[u>>2]|0)){X=105;break}ya=c[g>>2]|0;while(1){if(ya>>>0>=16){lb=ya;break}ua=c[D>>2]|0;if(ua>>>0<(c[F>>2]|0)>>>0){c[D>>2]=ua+1;mb=d[ua>>0]|0}else mb=0;c[h>>2]=c[h>>2]|mb<>2]=ya;if(ya>>>0>=33){X=110;break i}}ya=c[h>>2]|0;ua=c[(c[$>>2]|0)+((ya&1023)<<2)>>2]|0;if((ua|0)>-1){nb=ua>>16;ob=ua&65535}else{Z=c[aa>>2]|0;J=10;da=ua;while(1){ua=J+1|0;l=b[Z+((ya>>>J&1)+~da<<1)>>1]|0;V=l<<16>>16;if(l<<16>>16<0){J=ua;da=V}else{nb=ua;ob=V;break}}}c[h>>2]=ya>>>nb;c[g>>2]=lb-nb;pb=ob}else pb=0;da=c[ba>>2]|0;J=c[da>>2]|0;if(kb>>>0>=(c[da+4>>2]|0)-J>>4>>>0){X=311;break}if(pb>>>0>=32768){X=118;break}a[s>>0]=pb&3;a[H>>0]=pb>>>2&1;a[ia>>0]=pb>>>3&1;a[w>>0]=pb>>>4&3;a[ha>>0]=pb>>>6&1;a[ja>>0]=pb>>>7&1;a[ka>>0]=pb>>>8&1;a[ra>>0]=pb>>>9&1;a[sa>>0]=pb>>>10&1;a[ta>>0]=pb>>>11&1;a[wa>>0]=pb>>>12&1;a[ca>>0]=pb>>>13&1;a[I>>0]=pb>>>14&1;zb(v,J+(kb<<4)|0,w);J=0;do{da=J<<2;Z=0;do{V=c[f>>2]|0;ua=d[v+(Z+da)>>0]|0;if((Z|J|ua)>>>0>=4){X=122;break i}l=Z<<1;K=V+(N*11|0)+J|0;a[K>>0]=(d[K>>0]|0)&(3<>>3)|0;Q=V+(N*11|0)+4+K|0;O=l&7;l=d[969988+ua>>0]|0;ua=~(1<>0]=(d[Q>>0]|0)&ua|(l&1)<>0]=(d[Q>>0]|0)&ua|l>>>1<>>0<4);J=J+1|0}while(J>>>0<4);eb((c[f>>2]|0)+(N*11|0)|0);N=N+1|0;if(N>>>0>=j>>>0){qb=aa;break h}}if((X|0)==105)na(969816,969718,435,969839);else if((X|0)==110)na(969795,969718,445,969839);else if((X|0)==118)na(969957,961699,48,969978);else if((X|0)==122)na(969992,969718,724,970010);else if((X|0)==311){N=c[aa>>2]|0;I=N;if(N){ca=u+28|0;wa=c[ca>>2]|0;if((wa|0)!=(N|0))c[ca>>2]=wa+(~((wa+-2-I|0)>>>1)<<1);bc(N)}N=c[$>>2]|0;I=N;if(N){wa=u+16|0;ca=c[wa>>2]|0;if((ca|0)!=(N|0))c[wa>>2]=ca+(~((ca+-4-I|0)>>>2)<<2);bc(N)}N=c[u>>2]|0;if(N){if((c[qa>>2]|0)!=(N|0))c[qa>>2]=N;bc(N)}Ea=0;break c}}else qb=u+24|0;while(0);xa=c[qb>>2]|0;G=xa;if(xa){N=u+28|0;I=c[N>>2]|0;if((I|0)!=(xa|0))c[N>>2]=I+(~((I+-2-G|0)>>>1)<<1);bc(xa)}xa=c[u+12>>2]|0;G=xa;if(xa){I=u+16|0;N=c[I>>2]|0;if((N|0)!=(xa|0))c[I>>2]=N+(~((N+-4-G|0)>>>2)<<2);bc(xa)}xa=c[u>>2]|0;if(xa){G=u+4|0;if((c[G>>2]|0)!=(xa|0))c[G>>2]=xa;bc(xa)}X=284}while(0);if((X|0)==284)Ea=1;X=c[t+24>>2]|0;u=X;if(X){qb=t+28|0;j=c[qb>>2]|0;if((j|0)!=(X|0))c[qb>>2]=j+(~((j+-2-u|0)>>>1)<<1);bc(X)}X=c[t+12>>2]|0;u=X;if(X){j=t+16|0;qb=c[j>>2]|0;if((qb|0)!=(X|0))c[j>>2]=qb+(~((qb+-4-u|0)>>>2)<<2);bc(X)}X=c[t>>2]|0;if(X){u=t+4|0;if((c[u>>2]|0)!=(X|0))c[u>>2]=X;bc(X)}rb=Ea}else rb=0}else rb=0;Ea=c[r+24>>2]|0;X=Ea;if(Ea){u=r+28|0;t=c[u>>2]|0;if((t|0)!=(Ea|0))c[u>>2]=t+(~((t+-2-X|0)>>>1)<<1);bc(Ea)}Ea=c[r+12>>2]|0;X=Ea;if(Ea){t=r+16|0;u=c[t>>2]|0;if((u|0)!=(Ea|0))c[t>>2]=u+(~((u+-4-X|0)>>>2)<<2);bc(Ea)}Ea=c[r>>2]|0;if(Ea){X=r+4|0;if((c[X>>2]|0)!=(Ea|0))c[X>>2]=Ea;bc(Ea)}Ea=c[q+24>>2]|0;X=Ea;if(Ea){r=q+28|0;u=c[r>>2]|0;if((u|0)!=(Ea|0))c[r>>2]=u+(~((u+-2-X|0)>>>1)<<1);bc(Ea)}Ea=c[q+12>>2]|0;X=Ea;if(Ea){u=q+16|0;r=c[u>>2]|0;if((r|0)!=(Ea|0))c[u>>2]=r+(~((r+-4-X|0)>>>2)<<2);bc(Ea)}Ea=c[q>>2]|0;if(Ea){X=q+4|0;if((c[X>>2]|0)!=(Ea|0))c[X>>2]=Ea;bc(Ea)}Ea=c[p+24>>2]|0;X=Ea;if(Ea){q=p+28|0;r=c[q>>2]|0;if((r|0)!=(Ea|0))c[q>>2]=r+(~((r+-2-X|0)>>>1)<<1);bc(Ea)}Ea=c[p+12>>2]|0;X=Ea;if(Ea){r=p+16|0;q=c[r>>2]|0;if((q|0)!=(Ea|0))c[r>>2]=q+(~((q+-4-X|0)>>>2)<<2);bc(Ea)}Ea=c[p>>2]|0;if(Ea){X=p+4|0;if((c[X>>2]|0)!=(Ea|0))c[X>>2]=Ea;bc(Ea)}Ea=c[o+24>>2]|0;X=Ea;if(Ea){p=o+28|0;q=c[p>>2]|0;if((q|0)!=(Ea|0))c[p>>2]=q+(~((q+-2-X|0)>>>1)<<1);bc(Ea)}Ea=c[o+12>>2]|0;X=Ea;if(Ea){q=o+16|0;p=c[q>>2]|0;if((p|0)!=(Ea|0))c[q>>2]=p+(~((p+-4-X|0)>>>2)<<2);bc(Ea)}Ea=c[o>>2]|0;if(!Ea){i=m;return rb|0}X=o+4|0;if((c[X>>2]|0)!=(Ea|0))c[X>>2]=Ea;bc(Ea);i=m;return rb|0}function cb(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;g=i;i=i+64|0;h=g+36|0;j=g;k=c[f>>2]|0;l=f+4|0;if((c[l>>2]|0)!=(k|0))c[l>>2]=k;k=c[f+12>>2]|0;l=f+16|0;m=c[l>>2]|0;if((k|0)!=(m|0))c[l>>2]=m+(~((m+-4-k|0)>>>2)<<2);k=c[f+24>>2]|0;m=f+28|0;l=c[m>>2]|0;if((k|0)!=(l|0))c[m>>2]=l+(~((l+-2-k|0)>>>1)<<1);k=e+20|0;l=e+4|0;m=e+12|0;n=e+16|0;e=c[k>>2]|0;while(1){if(e>>>0>=14){o=e;break}p=c[l>>2]|0;if(p>>>0<(c[m>>2]|0)>>>0){c[l>>2]=p+1;q=d[p>>0]|0}else q=0;c[n>>2]=c[n>>2]|q<>2]=e;if(e>>>0>=33){r=12;break}}if((r|0)==12)na(969795,969718,322,969785);e=c[n>>2]|0;q=e&16383;p=e>>>14;c[n>>2]=p;s=o+-14|0;c[k>>2]=s;if(!q){t=1;i=g;return t|0}o=h;u=o+21|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(u|0));v=s;s=p;while(1){if(v>>>0>=5){w=s;x=v;break}p=c[l>>2]|0;if(p>>>0<(c[m>>2]|0)>>>0){c[l>>2]=p+1;y=d[p>>0]|0}else y=0;s=s|y<>2]=s;v=v+8|0;c[k>>2]=v;if(v>>>0>=33){r=19;break}}if((r|0)==19)na(969795,969718,322,969785);v=w&31;s=w>>>5;c[n>>2]=s;w=x+-5|0;c[k>>2]=w;if((v+-1|0)>>>0>20){t=0;i=g;return t|0}a:do if(v){x=w;y=s;p=0;b:while(1){z=x;A=y;while(1){if(z>>>0>=3){B=A;C=z;break}D=c[l>>2]|0;if(D>>>0<(c[m>>2]|0)>>>0){c[l>>2]=D+1;E=d[D>>0]|0}else E=0;A=A|E<>2]=A;z=z+8|0;c[k>>2]=z;if(z>>>0>=33)break b}y=B>>>3;c[n>>2]=y;x=C+-3|0;c[k>>2]=x;a[h+(d[969682+p>>0]|0)>>0]=B&7;p=p+1|0;if(p>>>0>=v>>>0)break a}na(969795,969718,322,969785)}while(0);o=j;u=o+36|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(u|0));if(vb(j,21,h)|0?(c[j+4>>2]|0)!=(c[j>>2]|0):0){h=ac(q)|0;Rc(h|0,0,e&16383|0)|0;e=j+12|0;o=j+24|0;u=0;c:while(1){v=c[k>>2]|0;while(1){if(v>>>0>=16){F=v;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;G=d[B>>0]|0}else G=0;c[n>>2]=c[n>>2]|G<>2]=v;if(v>>>0>=33){r=37;break c}}v=c[n>>2]|0;B=c[(c[e>>2]|0)+((v&1023)<<2)>>2]|0;if((B|0)>-1){H=B>>16;I=B&65535}else{C=c[o>>2]|0;E=10;s=B;while(1){B=E+1|0;w=b[C+((v>>>E&1)+~s<<1)>>1]|0;p=w<<16>>16;if(w<<16>>16<0){E=B;s=p}else{H=B;I=p;break}}}s=v>>>H;c[n>>2]=s;E=F-H|0;c[k>>2]=E;d:do if((I|0)<17){a[h+u>>0]=I;J=u+1|0}else switch(I|0){case 17:{C=E;p=s;while(1){if(C>>>0>=3){K=p;L=C;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;M=d[B>>0]|0}else M=0;p=p|M<>2]=p;C=C+8|0;c[k>>2]=C;if(C>>>0>=33){r=49;break c}}c[n>>2]=K>>>3;c[k>>2]=L+-3;J=u+3+(K&7)|0;break d;break}case 18:{C=E;p=s;while(1){if(C>>>0>=7){N=p;O=C;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;P=d[B>>0]|0}else P=0;p=p|P<>2]=p;C=C+8|0;c[k>>2]=C;if(C>>>0>=33){r=56;break c}}c[n>>2]=N>>>7;c[k>>2]=O+-7;J=u+11+(N&127)|0;break d;break}default:{if(!u){Q=0;break c}if((I|0)==19){C=E;p=s;while(1){if(C>>>0>=2){R=p;S=C;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;T=d[B>>0]|0}else T=0;p=p|T<>2]=p;C=C+8|0;c[k>>2]=C;if(C>>>0>=33){r=64;break c}}c[n>>2]=R>>>2;c[k>>2]=S+-2;U=(R&3)+3|0}else{C=E;p=s;while(1){if(C>>>0>=7){V=p;W=C;break}B=c[l>>2]|0;if(B>>>0<(c[m>>2]|0)>>>0){c[l>>2]=B+1;X=d[B>>0]|0}else X=0;p=p|X<>2]=p;C=C+8|0;c[k>>2]=C;if(C>>>0>=33){r=70;break c}}c[n>>2]=V>>>7;c[k>>2]=W+-7;U=(V&127)+7|0}C=a[h+(u+-1)>>0]|0;if(!(C<<24>>24)){Q=0;break c}else{Y=u;Z=U}while(1){if(Y>>>0>=q>>>0){Q=0;break c}p=Y+1|0;a[h+Y>>0]=C;Z=Z+-1|0;if(!Z){J=p;break}else Y=p}}}while(0);if(J>>>0>>0)u=J;else{_=J;r=75;break}}if((r|0)==37)na(969795,969718,445,969839);else if((r|0)==49)na(969795,969718,322,969785);else if((r|0)==56)na(969795,969718,322,969785);else if((r|0)==64)na(969795,969718,322,969785);else if((r|0)==70)na(969795,969718,322,969785);else if((r|0)==75)if((_|0)==(q|0))Q=vb(f,q,h)|0;else Q=0;bc(h);$=Q}else $=0;Q=c[j+24>>2]|0;h=Q;if(Q){q=j+28|0;f=c[q>>2]|0;if((f|0)!=(Q|0))c[q>>2]=f+(~((f+-2-h|0)>>>1)<<1);bc(Q)}Q=c[j+12>>2]|0;h=Q;if(Q){f=j+16|0;q=c[f>>2]|0;if((q|0)!=(Q|0))c[f>>2]=q+(~((q+-4-h|0)>>>2)<<2);bc(Q)}Q=c[j>>2]|0;if(Q){h=j+4|0;if((c[h>>2]|0)!=(Q|0))c[h>>2]=Q;bc(Q)}t=$;i=g;return t|0}function db(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(b>>>0<=25){do if(b){e=a+20|0;f=a+4|0;g=a+12|0;h=a+16|0;i=c[e>>2]|0;while(1){if(i>>>0>=b>>>0){j=i;k=28;break}l=c[f>>2]|0;if(l>>>0<(c[g>>2]|0)>>>0){c[f>>2]=l+1;m=d[l>>0]|0}else m=0;c[h>>2]=c[h>>2]|m<>2]=i;if(i>>>0>=33){k=27;break}}if((k|0)==27)na(969795,969718,322,969785);else if((k|0)==28){i=c[h>>2]|0;n=i&(1<>2]|0;r=c[f>>2]|0}while(0);c[p>>2]=q>>>b;c[o>>2]=r-b;s=n;return s|0}if(b>>>0>=33)na(969703,969718,340,969761);n=a+20|0;r=a+4|0;o=a+12|0;q=a+16|0;a=c[n>>2]|0;while(1){if(a>>>0>=25){t=a;break}p=c[r>>2]|0;if(p>>>0<(c[o>>2]|0)>>>0){c[r>>2]=p+1;u=d[p>>0]|0}else u=0;c[q>>2]=c[q>>2]|u<>2]=a;if(a>>>0>=33){k=9;break}}if((k|0)==9)na(969795,969718,322,969785);a=c[q>>2]|0;u=a&33554431;p=a>>>25;c[q>>2]=p;a=t+-25|0;c[n>>2]=a;t=b+-25|0;do if(t){if(t>>>0<26){v=a;w=p}else na(969770,969718,312,969785);while(1){if(v>>>0>=t>>>0){x=w;y=v;k=18;break}b=c[r>>2]|0;if(b>>>0<(c[o>>2]|0)>>>0){c[r>>2]=b+1;z=d[b>>0]|0}else z=0;w=w|z<>2]=w;v=v+8|0;c[n>>2]=v;if(v>>>0>=33){k=17;break}}if((k|0)==17)na(969795,969718,322,969785);else if((k|0)==18){A=(x&(1<>2]=B>>>t;c[n>>2]=C-t;s=A|u;return s|0}function eb(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=i;i=i+16|0;f=e;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;g=d[b>>0]|0;h=f+((g&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+((g>>>2&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+((g>>>4&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+(g>>>6<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=d[b+1>>0]|0;g=f+((h&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+((h>>>2&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+((h>>>4&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+(h>>>6<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=d[b+2>>0]|0;h=f+((g&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+((g>>>2&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+((g>>>4&3)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=f+(g>>>6<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=d[b+3>>0]|0;g=f+((h&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+((h>>>2&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+((h>>>4&3)<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=f+(h>>>6<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=b+8|0;a[g>>0]=3;h=b+9|0;a[h>>0]=0;j=b+10|0;a[j>>0]=0;if(!(c[f>>2]|0)){k=0;l=3}else{a[j>>0]=1;a[g>>0]=0;k=1;l=0}if(!(c[f+4>>2]|0)){m=l;n=k}else{b=k+1<<24>>24;a[j>>0]=b;if((l&255)>1){a[g>>0]=1;o=1}else o=l;a[h>>0]=1;m=o;n=b}if(!(c[f+8>>2]|0))p=n;else{b=n+1<<24>>24;a[j>>0]=b;if((m&255)>2)a[g>>0]=2;a[h>>0]=2;p=b}if(!(c[f+12>>2]|0)){i=e;return}a[j>>0]=p+1<<24>>24;a[h>>0]=3;i=e;return}function fb(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;f=i;i=i+32|0;g=f;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;if((b|0)==0&(e|0)!=0){h=0;i=f;return h|0}c[g>>2]=e;j=g+4|0;c[j>>2]=b;c[g+8>>2]=b;k=g+12|0;c[k>>2]=b+e;e=g+16|0;c[e>>2]=0;b=g+20|0;c[b>>2]=0;l=a+28|0;if(!(cb(g,l)|0)){h=0;i=f;return h|0}if((c[a+32>>2]|0)==(c[l>>2]|0)){h=0;i=f;return h|0}l=a+64|0;if(!(cb(g,l)|0)){h=0;i=f;return h|0}if((c[a+68>>2]|0)==(c[l>>2]|0)){h=0;i=f;return h|0}l=a+100|0;if(!(cb(g,l)|0)){h=0;i=f;return h|0}if((c[a+104>>2]|0)==(c[l>>2]|0)){h=0;i=f;return h|0}l=a+136|0;if(!(cb(g,l)|0)){h=0;i=f;return h|0}if((c[a+140>>2]|0)==(c[l>>2]|0)){h=0;i=f;return h|0}l=c[b>>2]|0;while(1){if(l>>>0>=13){m=l;break}g=c[j>>2]|0;if(g>>>0<(c[k>>2]|0)>>>0){c[j>>2]=g+1;n=d[g>>0]|0}else n=0;c[e>>2]=c[e>>2]|n<>2]=l;if(l>>>0>=33){o=15;break}}if((o|0)==15)na(969795,969718,322,969785);o=c[e>>2]|0;c[e>>2]=o>>>13;c[b>>2]=m+-13;c[a+172>>2]=o&8191;h=1;i=f;return h|0} // EMSCRIPTEN_END_FUNCS -var Ha=[$c,mc,Ec,Cc,Dc,$c,$c,$c];var Ia=[ad,tc,sc,ad];var Ja=[bd,bc,cc,hc,kc,ic,jc,lc,Gc,bd,bd,bd,bd,bd,bd,bd];var Ka=[cd,dc,Bc,cd];var La=[dd];var Ma=[ed,vc,uc,ed];var Na=[fd,oc,pc,fd];return{_basis_open:Pb,_basis_get_num_levels:Tb,_basis_transcode_image:Yb,_fflush:yc,_memset:Qc,_basis_init:Ob,_basis_get_debug_flags:Nb,_basis_start_transcoding:Xb,_basis_set_debug_flags:Mb,_basis_get_num_images:Sb,_basis_get_has_alpha:Rb,_basis_get_image_width:Ub,_malloc:Hc,_basis_close:Qb,_memcpy:Tc,_basis_get_image_height:Vb,_bitshift64Lshr:Rc,_free:Ic,_bitshift64Shl:Sc,___errno_location:wc,_basis_get_image_transcoded_size_in_bytes:Wb,runPostSets:Pc,stackAlloc:Oa,stackSave:Pa,stackRestore:Qa,establishStackSpace:Ra,setThrew:Sa,setTempRet0:Va,getTempRet0:Wa,dynCall_iiii:Uc,dynCall_viiiii:Vc,dynCall_vi:Wc,dynCall_ii:Xc,dynCall_v:Yc,dynCall_viiiiii:Zc,dynCall_viiii:_c}}) +var Ia=[ad,nc,Fc,Dc,Ec,ad,ad,ad];var Ja=[bd,uc,tc,bd];var Ka=[cd,cc,dc,ic,lc,jc,kc,mc,Hc,cd,cd,cd,cd,cd,cd,cd];var La=[dd,ec,Cc,dd];var Ma=[ed];var Na=[fd,wc,vc,fd];var Oa=[gd,pc,qc,gd];return{_basis_open:Qb,_basis_get_num_levels:Ub,_basis_transcode_image:Zb,_fflush:zc,_memset:Rc,_basis_init:Pb,_basis_get_debug_flags:Ob,_basis_start_transcoding:Yb,_basis_set_debug_flags:Nb,_basis_get_num_images:Tb,_basis_get_has_alpha:Sb,_basis_get_image_width:Vb,_malloc:Ic,_basis_close:Rb,_memcpy:Uc,_basis_get_image_height:Wb,_bitshift64Lshr:Sc,_free:Jc,_bitshift64Shl:Tc,___errno_location:xc,_basis_get_image_transcoded_size_in_bytes:Xb,runPostSets:Qc,stackAlloc:Pa,stackSave:Qa,stackRestore:Ra,establishStackSpace:Sa,setThrew:Ta,setTempRet0:Wa,getTempRet0:Xa,dynCall_iiii:Vc,dynCall_viiiii:Wc,dynCall_vi:Xc,dynCall_ii:Yc,dynCall_v:Zc,dynCall_viiiiii:_c,dynCall_viiii:$c}}) // EMSCRIPTEN_END_ASM diff --git a/webgl_videotest/basis.js.mem b/webgl_videotest/basis.js.mem index 77ef257..ce6191f 100644 Binary files a/webgl_videotest/basis.js.mem and b/webgl_videotest/basis.js.mem differ diff --git a/webgl_videotest/basis_wrappers.cpp b/webgl_videotest/basis_wrappers.cpp index f7cbc17..08433f3 100644 --- a/webgl_videotest/basis_wrappers.cpp +++ b/webgl_videotest/basis_wrappers.cpp @@ -182,7 +182,7 @@ uint basis_get_image_transcoded_size_in_bytes(void *h, uint image_index, uint le if (f->m_magic != MAGIC) return 0; - if (format >= cTFTotalTextureFormats) + if (format >= (int)transcoder_texture_format::cTFTotalTextureFormats) return 0; uint bytes_per_block = basis_get_bytes_per_block((transcoder_texture_format)format); @@ -219,7 +219,7 @@ uint basis_transcode_image(void *h, void *dst, uint dst_size_in_bytes, if (f->m_magic != MAGIC) return 0; - if (format >= cTFTotalTextureFormats) + if (format >= (int)transcoder_texture_format::cTFTotalTextureFormats) return 0; uint bytes_per_block = basis_get_bytes_per_block((transcoder_texture_format)format); diff --git a/webgl_videotest/build.bat b/webgl_videotest/build.bat index c8e97eb..f51af85 100644 --- a/webgl_videotest/build.bat +++ b/webgl_videotest/build.bat @@ -1,3 +1,3 @@ @REM -O0 -s ASSERTIONS=1 -s DEMANGLE_SUPPORT=1 @REM -O2 -s ASSERTIONS=0 -emcc -s EXPORTED_FUNCTIONS="['allocate', '_malloc', '_free', '_basis_init','_basis_open','_basis_close','_basis_get_has_alpha','_basis_get_num_images','_basis_get_num_levels','_basis_get_image_width','_basis_get_image_height','_basis_get_image_transcoded_size_in_bytes','_basis_transcode_image','_basis_start_transcoding','_basis_get_debug_flags','_basis_set_debug_flags']" -o basis.js -DBASISD_ENABLE_DEBUG_FLAGS=1 ../transcoder/basisu_transcoder.cpp basis_wrappers.cpp -s TOTAL_MEMORY=500000000 -O2 -s ASSERTIONS=0 -I ../transcoder +emcc -s EXPORTED_FUNCTIONS="['allocate', '_malloc', '_free', '_basis_init','_basis_open','_basis_close','_basis_get_has_alpha','_basis_get_num_images','_basis_get_num_levels','_basis_get_image_width','_basis_get_image_height','_basis_get_image_transcoded_size_in_bytes','_basis_transcode_image','_basis_start_transcoding','_basis_get_debug_flags','_basis_set_debug_flags']" -o basis.js -DBASISD_ENABLE_DEBUG_FLAGS=1 ../transcoder/basisu_transcoder.cpp basis_wrappers.cpp -s TOTAL_MEMORY=500000000 -std=c++11 -O2 -s ASSERTIONS=0 -I ../transcoder diff --git a/webgl_videotest/index.html b/webgl_videotest/index.html index 7636078..71743f2 100644 --- a/webgl_videotest/index.html +++ b/webgl_videotest/index.html @@ -88,7 +88,7 @@ COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3; BASIS_FORMAT = { - cTFETC1: 0, + cTFETC1: 0, cTFETC2: 1, cTFBC1: 2, cTFBC3: 3,