From 744d92ae66d5b3db0a73699a46d8217c0a2cc66c Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 00:43:12 +0700 Subject: [PATCH 01/47] feat: update assembly to allow for non-simd execution --- packages/as-sha256/assembly/common.ts | 306 ++++++++++++++++++ packages/as-sha256/assembly/index.simd.ts | 85 +++++ packages/as-sha256/assembly/index.ts | 371 +--------------------- 3 files changed, 401 insertions(+), 361 deletions(-) create mode 100644 packages/as-sha256/assembly/common.ts create mode 100644 packages/as-sha256/assembly/index.simd.ts diff --git a/packages/as-sha256/assembly/common.ts b/packages/as-sha256/assembly/common.ts new file mode 100644 index 000000000..7512d2808 --- /dev/null +++ b/packages/as-sha256/assembly/common.ts @@ -0,0 +1,306 @@ +import {K, W64} from "./utils/const"; + +// As of Mar 2024, simd support v128, and each block is 32 bits, so we can hash 4 inputs at once +export const PARALLEL_FACTOR = 4; + +// https://github.com/dchest/fast-sha256-js/blob/master/src/sha256.ts +const DIGEST_LENGTH = 32; +export const INPUT_LENGTH = 512; + +const kPtr = K.dataStart; + +const w64Ptr = W64.dataStart; + +// intermediate hash values stored in H0-H7 +var H0: u32, H1: u32, H2: u32, H3: u32, H4: u32, H5: u32, H6: u32, H7: u32; + +// hash registers + +var a: u32, b: u32, c: u32, d: u32, e: u32, f: u32, g: u32, h: u32, i: u32, t1: u32, t2: u32; + +// 16 32bit message blocks +const M = new ArrayBuffer(64); +const mPtr = changetype(M); + +// 64 32bit extended message blocks = 64 * 4 = 256 +// This value is the max length that can be used by simd but if simd is not available it will just +// be over-allocated. AssemblyScript does not support closures so there is no way to pass the +// PARALLEL_FACTOR in from the entrance file +const W = new ArrayBuffer(256 * PARALLEL_FACTOR); +export const wPtr = changetype(W); + +// input buffer +export const input = new ArrayBuffer(INPUT_LENGTH); +export const inputPtr = changetype(input); + +// output buffer +export const output = new ArrayBuffer(DIGEST_LENGTH); +const outputPtr = changetype(output); + +// number of bytes in M buffer +var mLength = 0; + +// number of total bytes hashed +var bytesHashed = 0; + +@inline +function load32(ptr: usize, offset: usize): u32 { + return load(ptr + (offset << alignof())); +} + +@inline +export function load32be(ptr: usize, offset: usize): u32 { + const firstOffset = offset << alignof(); + return ( + (load8(ptr, firstOffset + 0) << 24) | + (load8(ptr, firstOffset + 1) << 16) | + (load8(ptr, firstOffset + 2) << 8) | + (load8(ptr, firstOffset + 3) << 0) + ); +} + +@inline +export function store32(ptr: usize, offset: usize, u: u32): void { + store(ptr + (offset << alignof()), u); +} + +@inline +function store8(ptr: usize, offset: usize, u: u8): void { + store(ptr + offset, u); +} + +@inline +function load8(ptr: usize, offset: usize): u8 { + return load(ptr + offset); +} + +@inline +function fill(ptr: usize, value: u8, length: u32): void { + const finalPtr = ptr + length; + while(ptr < finalPtr) { + store(ptr, value); + ptr++; + } +} + +@inline +function CH(x: u32, y: u32, z: u32): u32 { + return((x & y) ^ (~x & z)); +} + +@inline +function MAJ(x: u32, y: u32, z: u32): u32 { + return ((x & y) ^ (x & z) ^ (y & z)); +} + +@inline +function EP0(x: u32): u32 { + return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); +} + +@inline +function EP1(x: u32): u32 { + return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); +} + +@inline +function SIG0(x: u32): u32 { + return rotr(x, 7) ^ rotr(x, 18) ^ (x >>> 3); +} + +@inline +function SIG1(x: u32): u32 { + return rotr(x, 17) ^ rotr(x, 19) ^ (x >>> 10); +} + +/** + * Expand message blocks (16 32bit blocks), into extended message blocks (64 32bit blocks), + * Apply SHA256 compression function on extended message blocks + * Update intermediate hash values + * @param wPtr pointer to expanded message block memory + * @param mPtr pointer to message block memory, pass 0 if wPtr is precomputed for e.g. in digest64 + */ +function hashBlocks(wPtr: usize, mPtr: usize): void { + a = H0; + b = H1; + c = H2; + d = H3; + e = H4; + f = H5; + g = H6; + h = H7; + + // Load message blocks into first 16 expanded message blocks + for (i = 0; i < 16; i++) { + store32(wPtr, i, + load32be(mPtr, i) + ); + } + // Expand message blocks 17-64 + for (i = 16; i < 64; i++) { + store32(wPtr, i, + SIG1(load32(wPtr, i - 2)) + + load32(wPtr, i - 7) + + SIG0(load32(wPtr, i - 15)) + + load32(wPtr, i - 16) + ); + } + + // Apply SHA256 compression function on expanded message blocks + for (i = 0; i < 64; i++) { + t1 = h + EP1(e) + CH(e, f, g) + load32(kPtr, i) + load32(wPtr, i); + t2 = EP0(a) + MAJ(a, b, c); + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + H0 += a; + H1 += b; + H2 += c; + H3 += d; + H4 += e; + H5 += f; + H6 += g; + H7 += h; +} + +function hashPreCompW(wPtr: usize): void { + a = H0; + b = H1; + c = H2; + d = H3; + e = H4; + f = H5; + g = H6; + h = H7; + + // Apply SHA256 compression function on expanded message blocks + for (i = 0; i < 64; i++) { + t1 = h + EP1(e) + CH(e, f, g) + load32(wPtr, i); + t2 = EP0(a) + MAJ(a, b, c); + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + H0 += a; + H1 += b; + H2 += c; + H3 += d; + H4 += e; + H5 += f; + H6 += g; + H7 += h; +} + +export function init(): void { + H0 = 0x6a09e667; + H1 = 0xbb67ae85; + H2 = 0x3c6ef372; + H3 = 0xa54ff53a; + H4 = 0x510e527f; + H5 = 0x9b05688c; + H6 = 0x1f83d9ab; + H7 = 0x5be0cd19; + + mLength = 0; + bytesHashed = 0; +} + +export function update(dataPtr: usize, dataLength: i32): void { + let dataPos = 0; + bytesHashed += dataLength; + // If message blocks buffer has data, fill to 64 + if (mLength) { + if (64 - mLength <= dataLength) { + // we can fully fill the buffer with data left over + memory.copy(mPtr + mLength, dataPtr, 64 - mLength); + mLength += 64 - mLength; + dataPos += 64 - mLength; + dataLength -= 64 - mLength; + hashBlocks(wPtr, mPtr); + mLength = 0; + } else { + // we can't fully fill the buffer but we exhaust the whole data buffer + memory.copy(mPtr + mLength, dataPtr, dataLength); + mLength += dataLength; + dataPos += dataLength; + dataLength -= dataLength; + return; + } + } + // If input has remaining 64-byte chunks, hash those + for (let i = 0; i < dataLength / 64; i++, dataPos += 64) { + hashBlocks(wPtr, dataPtr + dataPos); + } + // If any additional bytes remain, copy into message blocks buffer + if (dataLength & 63) { + memory.copy(mPtr + mLength, dataPtr + dataPos, dataLength & 63); + mLength += dataLength & 63; + } +} + +export function final(outPtr: usize): void { + // one additional round of hashes required + // because padding will not fit + if ((bytesHashed & 63) < 63) { + store8(mPtr, mLength, 0x80); + mLength++; + } + if ((bytesHashed & 63) >= 56) { + fill(mPtr + mLength, 0, 64 - mLength); + hashBlocks(wPtr, mPtr); + mLength = 0; + } + if ((bytesHashed & 63) >= 63) { + store8(mPtr, mLength, 0x80); + mLength++; + } + fill(mPtr + mLength, 0, 64 - mLength - 8); + + store(mPtr + 64 - 8, bswap(bytesHashed / 0x20000000)); // length -- high bits + store(mPtr + 64 - 4, bswap(bytesHashed << 3)); // length -- low bits + + // hash round for padding + hashBlocks(wPtr, mPtr); + + store32(outPtr, 0, bswap(H0)); + store32(outPtr, 1, bswap(H1)); + store32(outPtr, 2, bswap(H2)); + store32(outPtr, 3, bswap(H3)); + store32(outPtr, 4, bswap(H4)); + store32(outPtr, 5, bswap(H5)); + store32(outPtr, 6, bswap(H6)); + store32(outPtr, 7, bswap(H7)); +} + +export function digest(length: i32): void { + init(); + update(inputPtr, length); + final(outputPtr); +} + +export function digest64(inPtr: usize, outPtr: usize): void { + init(); + hashBlocks(wPtr,inPtr); + hashPreCompW(w64Ptr); + store32(outPtr, 0, bswap(H0)); + store32(outPtr, 1, bswap(H1)); + store32(outPtr, 2, bswap(H2)); + store32(outPtr, 3, bswap(H3)); + store32(outPtr, 4, bswap(H4)); + store32(outPtr, 5, bswap(H5)); + store32(outPtr, 6, bswap(H6)); + store32(outPtr, 7, bswap(H7)); +} \ No newline at end of file diff --git a/packages/as-sha256/assembly/index.simd.ts b/packages/as-sha256/assembly/index.simd.ts new file mode 100644 index 000000000..73d3edd54 --- /dev/null +++ b/packages/as-sha256/assembly/index.simd.ts @@ -0,0 +1,85 @@ +import {digest64V128} from "./simd"; +import { + INPUT_LENGTH, + input, + output, + init, + update, + final, + digest, + digest64, + PARALLEL_FACTOR, + store32, + load32be, + wPtr, + inputPtr +} from "./common"; + +export { + INPUT_LENGTH, + input, + output, + init, + update, + final, + digest, + digest64 +}; + +/** + * Hash 4 inputs of exactly 64 bytes each + * Input pointer is 256 bytes as below: + * byte u32 + * input 0 0 1 2 ... 63 <===> 0 1 ... 15 + * input 1 64 65 ... 127 <===> 16 17 ... 31 + * input 2 128 ... 191 <===> 32 33 ... 47 + * input 3 192 ... 255 <===> 48 49 ... 63 + * + * we need to transfer it to expanded message blocks, with 16 first items like: + * + * w_v128_0 0 16 32 48 + * w_v128_1 1 17 33 49 + * ... + * w_v128_15 15 31 47 63 + * + * remaining 48 items are computed inside hashBlocksV128 loop. + * @param outPtr + */ +export function batchHash4UintArray64s(outPtr: usize): void { + for (let i = 0; i < 16; i++) { + store32(wPtr, PARALLEL_FACTOR * i, load32be(inputPtr, i)); + store32(wPtr, PARALLEL_FACTOR * i + 1, load32be(inputPtr, i + 16)); + store32(wPtr, PARALLEL_FACTOR * i + 2, load32be(inputPtr, i + 32)); + store32(wPtr, PARALLEL_FACTOR * i + 3, load32be(inputPtr, i + 48)); + } + + digest64V128(wPtr, outPtr); +} + +/* + * Hash 4 HashObject inputs, 64 bytes each similar to batchHash4UintArray64s + * + * Input pointer is 64 u32 (256 bytes) as below: + * input 0 input 1 input 2 input 3 + * h0 h0 h0 h0 + * h1 h1 h1 h1 + * ... + * h7 h7 h7 h7 + * h0 h0 h0 h0 + * h1 h1 h1 h1 + * ... + * h7 h7 h7 h7 + * + * that's already the setup for wInputPtr, we only need to load be value of them to make + * it the first 16 items of expanded message blocks + * + * remaining 48 items are computed inside hashBlocksV128 loop. + * + */ +export function batchHash4HashObjectInputs(outPtr: usize): void { + for (let i = 0; i < 16 * PARALLEL_FACTOR; i++) { + store32(wPtr, i, load32be(inputPtr, i)); + } + + digest64V128(wPtr, outPtr); +} diff --git a/packages/as-sha256/assembly/index.ts b/packages/as-sha256/assembly/index.ts index 7ecde57df..0fbf74218 100644 --- a/packages/as-sha256/assembly/index.ts +++ b/packages/as-sha256/assembly/index.ts @@ -1,361 +1,10 @@ -import {digest64V128} from "./simd"; -import {K, W64} from "./utils/const"; - -// As of Mar 2024, simd support v128, and each block is 32 bits, so we can hash 4 inputs at once -export const PARALLEL_FACTOR = 4; -export const INPUT_LENGTH = 512; -//https://github.com/dchest/fast-sha256-js/blob/master/src/sha256.ts -const DIGEST_LENGTH = 32; - -const kPtr = K.dataStart; - -const w64Ptr = W64.dataStart; - -// intermediate hash values stored in H0-H7 -var H0: u32, H1: u32, H2: u32, H3: u32, H4: u32, H5: u32, H6: u32, H7: u32; - -// hash registers - -var a: u32, b: u32, c: u32, d: u32, e: u32, f: u32, g: u32, h: u32, i: u32, t1: u32, t2: u32; - -// 16 32bit message blocks -const M = new ArrayBuffer(64); -const mPtr = changetype(M); - -// 64 32bit extended message blocks = 64 * 4 = 256 -const W = new ArrayBuffer(256 * PARALLEL_FACTOR); -const wPtr = changetype(W); - -// input buffer -export const input = new ArrayBuffer(INPUT_LENGTH); -const inputPtr = changetype(input); - -// output buffer -export const output = new ArrayBuffer(DIGEST_LENGTH); -const outputPtr = changetype(output); - -// number of bytes in M buffer -var mLength = 0; - -// number of total bytes hashed -var bytesHashed = 0; - -@inline -function load32(ptr: usize, offset: usize): u32 { - return load(ptr + (offset << alignof())); -} - -@inline -function load32be(ptr: usize, offset: usize): u32 { - const firstOffset = offset << alignof(); - return ( - (load8(ptr, firstOffset + 0) << 24) | - (load8(ptr, firstOffset + 1) << 16) | - (load8(ptr, firstOffset + 2) << 8) | - (load8(ptr, firstOffset + 3) << 0) - ); -} - -@inline -function store32(ptr: usize, offset: usize, u: u32): void { - store(ptr + (offset << alignof()), u); -} - -@inline -function store8(ptr: usize, offset: usize, u: u8): void { - store(ptr + offset, u); -} - -@inline -function load8(ptr: usize, offset: usize): u8 { - return load(ptr + offset); -} - -@inline -function fill(ptr: usize, value: u8, length: u32): void { - const finalPtr = ptr + length; - while(ptr < finalPtr) { - store(ptr, value); - ptr++; - } -} - -@inline -function CH(x: u32, y: u32, z: u32): u32 { - return((x & y) ^ (~x & z)); -} - -@inline -function MAJ(x: u32, y: u32, z:u32): u32 { - return ((x & y) ^ (x & z) ^ (y & z)); -} - -@inline -function EP0(x: u32): u32 { - return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); -} - -@inline -function EP1(x: u32): u32 { - return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); -} - -@inline -function SIG0(x: u32): u32 { - return rotr(x, 7) ^ rotr(x, 18) ^ (x >>> 3); -} - -@inline -function SIG1(x: u32): u32 { - return rotr(x, 17) ^ rotr(x, 19) ^ (x >>> 10); -} - -/** - * Expand message blocks (16 32bit blocks), into extended message blocks (64 32bit blocks), - * Apply SHA256 compression function on extended message blocks - * Update intermediate hash values - * @param wPtr pointer to expanded message block memory - * @param mPtr pointer to message block memory, pass 0 if wPtr is precomputed for e.g. in digest64 - */ -function hashBlocks(wPtr: usize, mPtr: usize): void { - a = H0; - b = H1; - c = H2; - d = H3; - e = H4; - f = H5; - g = H6; - h = H7; - - // Load message blocks into first 16 expanded message blocks - for (i = 0; i < 16; i++) { - store32(wPtr, i, - load32be(mPtr, i) - ); - } - // Expand message blocks 17-64 - for (i = 16; i < 64; i++) { - store32(wPtr, i, - SIG1(load32(wPtr, i - 2)) + - load32(wPtr, i - 7) + - SIG0(load32(wPtr, i - 15)) + - load32(wPtr, i - 16) - ); - } - - // Apply SHA256 compression function on expanded message blocks - for (i = 0; i < 64; i++) { - t1 = h + EP1(e) + CH(e, f, g) + load32(kPtr, i) + load32(wPtr, i); - t2 = EP0(a) + MAJ(a, b, c); - h = g; - g = f; - f = e; - e = d + t1; - d = c; - c = b; - b = a; - a = t1 + t2; - } - - H0 += a; - H1 += b; - H2 += c; - H3 += d; - H4 += e; - H5 += f; - H6 += g; - H7 += h; -} - -function hashPreCompW(wPtr: usize): void { - a = H0; - b = H1; - c = H2; - d = H3; - e = H4; - f = H5; - g = H6; - h = H7; - - // Apply SHA256 compression function on expanded message blocks - for (i = 0; i < 64; i++) { - t1 = h + EP1(e) + CH(e, f, g) + load32(wPtr, i); - t2 = EP0(a) + MAJ(a, b, c); - h = g; - g = f; - f = e; - e = d + t1; - d = c; - c = b; - b = a; - a = t1 + t2; - } - - H0 += a; - H1 += b; - H2 += c; - H3 += d; - H4 += e; - H5 += f; - H6 += g; - H7 += h; -} - -export function init(): void { - H0 = 0x6a09e667; - H1 = 0xbb67ae85; - H2 = 0x3c6ef372; - H3 = 0xa54ff53a; - H4 = 0x510e527f; - H5 = 0x9b05688c; - H6 = 0x1f83d9ab; - H7 = 0x5be0cd19; - - mLength = 0; - bytesHashed = 0; -} - -export function update(dataPtr: usize, dataLength: i32): void { - let dataPos = 0; - bytesHashed += dataLength; - // If message blocks buffer has data, fill to 64 - if (mLength) { - if (64 - mLength <= dataLength) { - // we can fully fill the buffer with data left over - memory.copy(mPtr + mLength, dataPtr, 64 - mLength); - mLength += 64 - mLength; - dataPos += 64 - mLength; - dataLength -= 64 - mLength; - hashBlocks(wPtr, mPtr); - mLength = 0; - } else { - // we can't fully fill the buffer but we exhaust the whole data buffer - memory.copy(mPtr + mLength, dataPtr, dataLength); - mLength += dataLength; - dataPos += dataLength; - dataLength -= dataLength; - return; - } - } - // If input has remaining 64-byte chunks, hash those - for (let i = 0; i < dataLength / 64; i++, dataPos += 64) { - hashBlocks(wPtr, dataPtr + dataPos); - } - // If any additional bytes remain, copy into message blocks buffer - if (dataLength & 63) { - memory.copy(mPtr + mLength, dataPtr + dataPos, dataLength & 63); - mLength += dataLength & 63; - } -} - -export function final(outPtr: usize): void { - // one additional round of hashes required - // because padding will not fit - if ((bytesHashed & 63) < 63) { - store8(mPtr, mLength, 0x80); - mLength++; - } - if ((bytesHashed & 63) >= 56) { - fill(mPtr + mLength, 0, 64 - mLength); - hashBlocks(wPtr, mPtr); - mLength = 0; - } - if ((bytesHashed & 63) >= 63) { - store8(mPtr, mLength, 0x80); - mLength++; - } - fill(mPtr + mLength, 0, 64 - mLength - 8); - - store(mPtr + 64 - 8, bswap(bytesHashed / 0x20000000)); // length -- high bits - store(mPtr + 64 - 4, bswap(bytesHashed << 3)); // length -- low bits - - // hash round for padding - hashBlocks(wPtr, mPtr); - - store32(outPtr, 0, bswap(H0)); - store32(outPtr, 1, bswap(H1)); - store32(outPtr, 2, bswap(H2)); - store32(outPtr, 3, bswap(H3)); - store32(outPtr, 4, bswap(H4)); - store32(outPtr, 5, bswap(H5)); - store32(outPtr, 6, bswap(H6)); - store32(outPtr, 7, bswap(H7)); -} - -export function digest(length: i32): void { - init(); - update(inputPtr, length); - final(outputPtr); -} - -export function digest64(inPtr: usize, outPtr: usize): void { - init(); - hashBlocks(wPtr,inPtr); - hashPreCompW(w64Ptr); - store32(outPtr, 0, bswap(H0)); - store32(outPtr, 1, bswap(H1)); - store32(outPtr, 2, bswap(H2)); - store32(outPtr, 3, bswap(H3)); - store32(outPtr, 4, bswap(H4)); - store32(outPtr, 5, bswap(H5)); - store32(outPtr, 6, bswap(H6)); - store32(outPtr, 7, bswap(H7)); -} - -/** - * Hash 4 inputs of exactly 64 bytes each - * Input pointer is 256 bytes as below: - * byte u32 - * input 0 0 1 2 ... 63 <===> 0 1 ... 15 - * input 1 64 65 ... 127 <===> 16 17 ... 31 - * input 2 128 ... 191 <===> 32 33 ... 47 - * input 3 192 ... 255 <===> 48 49 ... 63 - * - * we need to transfer it to expanded message blocks, with 16 first items like: - * - * w_v128_0 0 16 32 48 - * w_v128_1 1 17 33 49 - * ... - * w_v128_15 15 31 47 63 - * - * remaining 48 items are computed inside hashBlocksV128 loop. - * @param outPtr - */ -export function batchHash4UintArray64s(outPtr: usize): void { - for (i = 0; i < 16; i++) { - store32(wPtr, PARALLEL_FACTOR * i, load32be(inputPtr, i)); - store32(wPtr, PARALLEL_FACTOR * i + 1, load32be(inputPtr, i + 16)); - store32(wPtr, PARALLEL_FACTOR * i + 2, load32be(inputPtr, i + 32)); - store32(wPtr, PARALLEL_FACTOR * i + 3, load32be(inputPtr, i + 48)); - } - - digest64V128(wPtr, outPtr); -} - -/* - * Hash 4 HashObject inputs, 64 bytes each similar to batchHash4UintArray64s - * - * Input pointer is 64 u32 (256 bytes) as below: - * input 0 input 1 input 2 input 3 - * h0 h0 h0 h0 - * h1 h1 h1 h1 - * ... - * h7 h7 h7 h7 - * h0 h0 h0 h0 - * h1 h1 h1 h1 - * ... - * h7 h7 h7 h7 - * - * that's already the setup for wInputPtr, we only need to load be value of them to make - * it the first 16 items of expanded message blocks - * - * remaining 48 items are computed inside hashBlocksV128 loop. - * - */ -export function batchHash4HashObjectInputs(outPtr: usize): void { - for (i = 0; i < 16 * PARALLEL_FACTOR; i++) { - store32(wPtr, i, load32be(inputPtr, i)); - } - - digest64V128(wPtr, outPtr); -} +export { + INPUT_LENGTH, + input, + output, + init, + update, + final, + digest, + digest64 +} from "./common"; From cf244191e64f150fe6bd3e9b3f38eaa7084ccca8 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 00:43:57 +0700 Subject: [PATCH 02/47] feat: update codegen to output non-simd --- packages/as-sha256/scripts/codegen.ts | 28 +++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/as-sha256/scripts/codegen.ts b/packages/as-sha256/scripts/codegen.ts index d15b813a3..4d5f56e12 100644 --- a/packages/as-sha256/scripts/codegen.ts +++ b/packages/as-sha256/scripts/codegen.ts @@ -4,16 +4,32 @@ import fs from "fs"; -const INPUT = "build/optimized.wasm"; -const OUTPUT = "src/wasmCode.ts"; +interface BinaryMeta { + input: string; + exportName: string; +} -const wasmBinary = Uint8Array.from(fs.readFileSync(INPUT)); +const binaries: BinaryMeta[] = [ + { + input: "build/optimized.simd.wasm", + exportName: "wasmSimdCode", + }, + { + input: "build/optimized.wasm", + exportName: "wasmCode", + }, +]; -const outputString = `// This file was autogenerated by scripts/codegen.ts +for (const {input, exportName} of binaries) { + const wasmBinary = Uint8Array.from(fs.readFileSync(input)); + + const outputString = `// This file was autogenerated by scripts/codegen.ts // DO NOT modify this file by hand! // eslint-disable-next-line prettier/prettier -export const wasmCode = Uint8Array.from([${wasmBinary.toString()}]); + +export const ${exportName} = Uint8Array.from([${wasmBinary.toString()}]); `; -fs.writeFileSync(OUTPUT, outputString); + fs.writeFileSync(`src/${exportName}.ts`, outputString); +} From b04976c39f9f6e7887f7df2a7b733c2c3453bf82 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 00:44:30 +0700 Subject: [PATCH 03/47] feat: update package.json scripts for non-simd --- packages/as-sha256/package.json | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/as-sha256/package.json b/packages/as-sha256/package.json index 8a6d1e85e..6edce91dd 100644 --- a/packages/as-sha256/package.json +++ b/packages/as-sha256/package.json @@ -25,13 +25,17 @@ "lint": "echo 'no linting for this package'", "check-types": "echo 'no type check for this package'", "generate": "rm -rf ./dist && node --loader ts-node/esm ./scripts/codegen.ts", - "build": "yarn asbuild:untouched && yarn asbuild:optimized && yarn build:cjs && yarn build:esm && yarn build:types", - "asbuild:untouched": "asc assembly/index.ts -o build/untouched.wasm -t build/untouched.wat --runtime minimal --target debug --enable simd", - "asbuild:optimized": "asc assembly/index.ts -o build/optimized.wasm -t build/optimized.wat --runtime minimal --target release -O3z --noAssert --enable simd", + "asbuild:untouched": "asc assembly/index.ts -o build/untouched.wasm -t build/untouched.wat --runtime minimal --target debug", + "asbuild:optimized": "asc assembly/index.ts -o build/optimized.wasm -t build/optimized.wat --runtime minimal --target release -O3z --noAssert", + "asbuild": "yarn asbuild:untouched && yarn asbuild:optimized", + "asbuild:simd:untouched": "asc assembly/index.simd.ts -o build/untouched.simd.wasm -t build/untouched.simd.wat --runtime minimal --target debug --enable simd", + "asbuild:simd:optimized": "asc assembly/index.simd.ts -o build/optimized.simd.wasm -t build/optimized.simd.wat --runtime minimal --target release -O3z --noAssert --enable simd", + "asbuild:simd": "yarn asbuild:simd:untouched && yarn asbuild:simd:optimized", "build:esm": "tsc -p tsconfig.build.esm.json", "build:cjs": "tsc -p tsconfig.build.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/cjs/package.json", "build:types": "tsc -p tsconfig.build.types.json", "build:web": "webpack --mode production --entry ./index.js --output ./dist/as-sha256.min.js", + "build": "yarn asbuild && yarn asbuild:simd && yarn generate && yarn build:cjs && yarn build:esm && yarn build:types", "test": "yarn run test:unit", "test:unit": "vitest run --dir test/unit/", "test:browsers": "yarn test:browsers:chrome && yarn test:browsers:firefox", @@ -41,9 +45,12 @@ "benchmark:local": "yarn benchmark --local", "test:ci": "yarn test:as-ci" }, + "dependencies": { + "wasm-feature-detect": "^1.8.0" + }, "devDependencies": { "@chainsafe/babel-plugin-inline-binary-import": "^1.0.3", "assemblyscript": "^0.27.24", "benchmark": "^2.1.4" } -} +} \ No newline at end of file From a3e83ffed641826c853173683a9308f54024969b Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 00:45:18 +0700 Subject: [PATCH 04/47] chore: build updated wasm --- packages/as-sha256/build/optimized.simd.wasm | Bin 0 -> 16773 bytes packages/as-sha256/build/optimized.simd.wat | 6379 +++++++++ packages/as-sha256/build/optimized.wasm | Bin 16804 -> 4159 bytes packages/as-sha256/build/optimized.wat | 5461 +------- packages/as-sha256/build/untouched.simd.wasm | Bin 0 -> 27387 bytes packages/as-sha256/build/untouched.simd.wat | 11971 +++++++++++++++++ packages/as-sha256/build/untouched.wasm | Bin 27399 -> 6604 bytes packages/as-sha256/build/untouched.wat | 11371 ++-------------- 8 files changed, 19926 insertions(+), 15256 deletions(-) create mode 100644 packages/as-sha256/build/optimized.simd.wasm create mode 100644 packages/as-sha256/build/optimized.simd.wat create mode 100644 packages/as-sha256/build/untouched.simd.wasm create mode 100644 packages/as-sha256/build/untouched.simd.wat diff --git a/packages/as-sha256/build/optimized.simd.wasm b/packages/as-sha256/build/optimized.simd.wasm new file mode 100644 index 0000000000000000000000000000000000000000..eff7299b46c8f4726af4ca7f82f38c06939d99fd GIT binary patch literal 16773 zcmeI33y>XEna59`?)%8?o|(?fjDJ}NR4ITs<`ojTR{+a$F0RhW!-VL6x4MGaBJ1gh5i4}xt$rd z;<~Hu5~`9(-}~$C)93M>bH4u0_nj+t40Jm}2xm@ayBr)8+nqsYkc3YMr$TJ^2Jug9 zcLxWr6SB^6_Z&Ww+Oe~zzbH~}+bldQMB0&3I?{2Z=Q+Z4J%JBbcq!KrPWs#4dDl4A zz@(h;;h(!WK^nmS6M+mm`Zr{3?);Vyp-Z0sThg$A*DFcpxZ_XVxudvi|K=S7`#auw z;BZm*_wTrRO~-&}ZXLhDyIngAdv+DK9PYicI3T73TQ1r9&dc6^@!KxB;Ihr`jMM>M zcUPx-t}GJPdIt_4D2l1+D|>hEDDDx{Q+p2_-f>8@q<0_Kw`ZUzTC*0`bcmVh?mgW- z{Z~tob!G+5+}vHgvnGj1M9vy1{Di#Il=Ul);|)g6d@1y`eR)@xQZM`o0V5jB$XKFYT8M6)NzQzE^QEaWL6PnYscMUZGB&%BIM zkd%=Vq+}WEC=~o?m9e}PqBMkHXgm%4rxd7KBSHu*136$*V({c^&l)%Jk${i*3#4lU0DuLD<@3(vrsAR=oyjNcMy$r4zlw46%0CO%MAacP~xni z6(Rb9BE)l#yU3GxI6Z=aEO!fal0;IbWEoN8eP zv&3(gn?&AawXE17z_5sxTmU&>&J}d2bZwswk6ynbybhDh zreQ{A$fJvhALR6lq<>7ZmxTTqRYgrIWA(Z!bQ`6jn$dVRRf~(gL5+eBniixWQm<3^ zdSnWQiKEBbwSbOtQ9C^iBMV=$h?@mo_OxhsaSP40w-P0iB-oByPNCfm%ors~A~XL* zdmX(FG zXcMDA3>Pzwh5v|S#xSI)D~%04v#`@-_7UwA^Ue&6*<2Tzj6#O~Ms#VH^n9j^Uq2LE zFu8Q)#y558G%u7s{?q5&E}b>}_&+Q&sY;*uXV0W7eLs`c{pr{7Rx`9`sGTEzCufcb>sez;)&P`( z$7YqAp+=xYP#h*hBv0i8J|m9H$TcUPe@iIkpmU8LZNUFf*1lbQ$5V7E8~X7yH7%Yl zJ5g1%ms3SeZ+CPhhhl^3I5qi9&>`_372HBEa4#;EKRs9gCz+M%V2TB6&Wl_cti#Z6CRbpf`rFpFhAjv z8_Y|1$PMNuTy}#w2@ktLoN&brRKg=}kWYBj4cZePbAu@1k{8TQc*qOd5-xketb~WX zU}nMPU|PaMsbFft4L8j=7O^kV|+p9ZX7iEFEMM zE@gsD!b6!Lop3o5q!J#^1YW|GOaLpfmVYL|+spE31`52!W5^L2w9qb$Qa97RMYY7O zcrAzt6TTG_eyHx;g!j%(c;7oW;q63v<4<@PJ(VWR>bkH&SDN*cj?U0ds^p}+Mh+?w zXO$CAQZmjdH};hm2PzfUsdQYgGI4_zaiiO*8f!*Dg9>0UrK_KDpi)|^4?5MY0N4Rd~>= zK@CG7ObuR*fG{R_GK$sfDULZ^jV#xu+)*ug&VQY}fWY`+y zVKQtDa)k_AgFHfptwA0o!`2{=kzs3)OA-uQgFHlrtwAo6VQY|w$*?uZ6*6oM@(3BW z26>bWTZ24ChOI#^xnS5D$fIP~8ssrDYz=bB z1H;xJ50PPOkjrG)8suRzYz=aS3|oUdLWZqD9wo!pAdit@YmiGRFl-I-5E-@xxlD$w zK^`W<)*x5NurX^vEY=78^LzRWrkX9$OC0e7-o;Qtajj8rZu6Bh_sY!WJgBF_vZI*>r3)N&^%tC=Vg}9LhkP<4(YeG3{62VbY zFia&S3h(r13cRAe`>wa zt<_-Pk0uo+95vQubgWtYk_QWGjSA&*sj9xzRh%;xXU-k_3n{XcHv2~%TAJAbdv0nlVlg1B)i-s*~KQwE;UJZp-HmKOp;w>lI#+b zWEYquySyaX#U-g^mX;*Duq0V4lVlf_q>5QmlI((#G-{TUB)ga-mCRC-WEYa8vROuw z>>`p>F-u62T|kmX&GM0C7mp;nbR^k@BgrlsNp{glvP(viT`-dDa*<>gizI6~lI%i} zR5r^*l3gT{DrSjDvI|7gs97G8?BbAQmxd&}FeKS!A;~TZNp?v{8Ziq(l3fmxuoz68 z4HHO91VYZuAsA1l&y1VK^qFzem_9Qu8q;USK|?w>ht85Y1W)c{8Y@yaSaU||CVO6& zm@`u6aHYEKte9x#b157D+x3S5<1kz7q zNJqE58qv{haXB5`7CY(awz!p!Zj0OL=(gBPN4G_IGvMg941We3-In3efTPU|c zTZUHyj&95FYrxTM8J-O|x-G-E0Y|sxlBA>C@{kFtTP~ZRx@ElU;OMrD$;WAE+B{-c zYlcVddd={dU9lO)N)3)~n;!lSIJzyDO;Fu3d>(LgTdtU(x@Gu1;OMqIYJ%#P;roE2 z+cLZ#aCBRS{{xP0%kY4}(QO$%5IDLm!wUjOw`KT2;OMptPY4{{mf;J5quVmPA#ikC zhCc+3Zp-k9z|n0PJ`p&&EyF7UN4I78Md0YR49^H0-In1Sfuq|pyd!XQTZVrGj&95F zkigMx89ov?x-G*?0!O!H_(|aCwhT`R9Nm`TD}kfiGQ1^lbX$hMgduR#FYuVa(QO$% z6F9mp!)pRZw`KTE;OMpt&j}pemd6-WXE4o69NkGU%~uSJNgEiGNnlLcz?jsh17p$# z#`q#;=*+~x_@D`l$%%n67yEC#*VoHwONXyB_51s2pd>uJ!UQ&!)i4A?U+`)KguWmy z2SQ&EJAu#_#H~Q+3*vSl^aZgO2z@~;Ibi4u@(>yNf?Os;Uyz5%&==$i8Tx`eLWaH| zkCLG;$YW&a3o-&@MqiK-7&H2UjKG-D7i0v+jJ_ZvFlO`x8G$jQFUSat8GS)UV9e+X za>)flUyu^V2ryc85m0?`r>q8%!M*SOuPvnCORfkwB07fnRbHCt81p?VqGRFY$Wfv?LxhdkmkM@jjJ=sk);J4xYmCjm z%Byh*PSv;>oUZY7aHhsH!N}iX{t+1Y8;-%q-|&1e@;AH~jQkBR2P1#O9bn{dcpVt| z8{QZ>y7M55kQ16<_^n8WA`EW^qX@$ngHeRxtzZ;k_%bkxF#K*XiZFZy82P)*e>)gW zFuWU#{0;91BY(q(z{uZlFBth7E`pK2;iF*WZ}?hl{lMru{kD3h7MA@wxBR=EXduFA z{F2yK$_-+!>cBX|&RKkNd#PHJPZgF3y!|5ct*7JH2Q>_f{Y+cnUVEm|*=`$tZam8Kt=C)-{hZuN3mCosQ>ZDubM`=~YK2CpXDS))KQy%t@Zk z3B@O;<2iY?Ix(l^zk5!28gg<>9JwPBVUxcLdvhU6X*b9i@#P)Wk+i?oZfCr<%wa;i zA^qgER$JtOGRzKa2$N-8DD;n?zHcNQx9Ma5c-MEYiD&DVe)Q-M+&I!-`pH)w_(0sQ zU%lsxH>cvfKK{+yp1nF&`oYhA?35G7`V*hL;h$3R9BkuRk7I-X0~b53Ra-n)&5q}( zD4ws{;{_@oFH|aCq~dt7niDTU%B2XqF17o`1%M-j8;UtDOh*EZz#)EKb<9<4r|&nX z(w-*bUyA$jQVLCnwVW%0ThVRS*b&XL4zi1|H{P6OUUMdsGi(B%j3KU@jt<~6cVxgm z+c4pNhW8uIeHZr&9Fr3&kTh*#1@ew5*HJV1t(K^TC@0N)e3MVh(SZW5sYQJXdPENn z^daLyyiCnSLdk@6CgIeh18N@9&ClaE9S-l}E0TQ!1BH0GS{yG?iy+~Jkn{qztN@|U zhw$g26Xv2bmZ{|h^vif%Rhybyh}+a`HLnoQR*{-th$Gdm78K%kl~)T3ab794s1T#? z)Z#)Mt2t^(A)ezu?BGWQY6CW(#~ajoZhaSOJ$9c*&c#@Wu2kzGHM>z=l@qwjY}YsVK1Mxfctvz`yEsNFvI?h}*@$1>PfAAU+QUNT0~gsgo3R%z;sWO@^Zg(**$oDD3ELub9OHt^;;Z1*=eA$3zvOcUy{ z2*0|b9us&1U*j`0X+rJ!P092BC38vyS*}CNe@l)lQIQh<$!;p`b*Rh+?H0)!t-vCo z+U)y6sM!SU$yX5}3uq?xz#PI%zg~n>)f!Cy>1tir;#WwNzs!Caw_XMH)-5&HJ5f3tK1{^8^HWq@;vJ7YcHoX5 z-gLo&2xvJ7<|uH zUiL>%UU18O&urWERC?cn1rbm`;4Whx);B_sczjnE*r@0c{Eozvh>NvKXhzy z|E-^X{wsfe(caekd;j#J$M4>D=!ur+Z~bPR{=~PAt*-w?Z@Caoee9l=?4h-77hkn` z-XmWg?)Y3VbNz)6JbOvkQ+Hnea?jHJKfnHC#hzXF9&JAQwHveYiQ~V1^~BIm4{g2Y z-|zm_iI_j^Bj|DIDV!%y7x?Js_H zMdK&SKdJxmBK6to@cFBsc;-t7mcPII&%XY#$qnzV{=DtE4}X4j&ijD>y-z*$i+4}G z{C(fQ>HI-a`fzsb%AaKJU3=SuJ>ibdX)k{3cwP5-4}4?oiAO8nId8`eyYAln-4!oL z|Gq1}+4Iz|TQ6O4 zGW##O?VcmES}w+~paLVfo9o5}*P9Z8M@?`K)mhQj`AXvAOdMOpVR1z45QoG8u^aEu zLt+oE>=Q+?AA&~ujrdtpoxggk3-|hL!w9Q!ZSsb)`M~)P!IlCF7w-mJoIz++2`y1IefP5HKq3BiDfu; ziEfmWl-6KNYxwV;IE3_jlP6BuCvFb?MJyx6K}qaJ`A1Qk9<-=vzW3sjt)xs)w=aiA zf?o^qQ$jq``kK0pOQcq>pCR?NLjN-K4>I*`9Bl79@YxRuFwgk{KT0zt?8X(AZRKz! z+Q*(?ExJ*g0Yf`+ErPuF;Or`VGDRd-nx|O%NURcT@T9~7n;WN9zYI7@h-s<*5TzG z;ru9`--FyKj{`XNBCj6g9HD-86yXPjsLx`Y?ZX|W)5n`lYi`FEemnUPzA&1<(Cn{b rD;DF}f%>pCO5qUdv&{56r859NQmaAIn|K~l_+|5WO*tn105$zjizK|> literal 0 HcmV?d00001 diff --git a/packages/as-sha256/build/optimized.simd.wat b/packages/as-sha256/build/optimized.simd.wat new file mode 100644 index 000000000..ddfe89172 --- /dev/null +++ b/packages/as-sha256/build/optimized.simd.wat @@ -0,0 +1,6379 @@ +(module + (type $0 (func (param i32 i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32))) + (type $4 (func)) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i64))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $assembly/simd/H0V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H1V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H2V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H3V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H4V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H5V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H6V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H7V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/aV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/bV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/cV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/dV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/eV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/fV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/gV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/hV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/t1V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/t2V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/i (mut i32) (i32.const 0)) + (global $assembly/simd/tmpW (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/tcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tcms/total (mut i32) (i32.const 0)) + (global $assembly/simd/kV128ArrayBuffer (mut i32) (i32.const 0)) + (global $assembly/simd/kV128Ptr (mut i32) (i32.const 0)) + (global $assembly/simd/w64V12ArrayBuffer (mut i32) (i32.const 0)) + (global $assembly/simd/w64V128Ptr (mut i32) (i32.const 0)) + (global $assembly/common/INPUT_LENGTH i32 (i32.const 512)) + (global $assembly/common/kPtr (mut i32) (i32.const 0)) + (global $assembly/common/w64Ptr (mut i32) (i32.const 0)) + (global $assembly/common/H0 (mut i32) (i32.const 0)) + (global $assembly/common/H1 (mut i32) (i32.const 0)) + (global $assembly/common/H2 (mut i32) (i32.const 0)) + (global $assembly/common/H3 (mut i32) (i32.const 0)) + (global $assembly/common/H4 (mut i32) (i32.const 0)) + (global $assembly/common/H5 (mut i32) (i32.const 0)) + (global $assembly/common/H6 (mut i32) (i32.const 0)) + (global $assembly/common/H7 (mut i32) (i32.const 0)) + (global $assembly/common/a (mut i32) (i32.const 0)) + (global $assembly/common/b (mut i32) (i32.const 0)) + (global $assembly/common/c (mut i32) (i32.const 0)) + (global $assembly/common/d (mut i32) (i32.const 0)) + (global $assembly/common/e (mut i32) (i32.const 0)) + (global $assembly/common/f (mut i32) (i32.const 0)) + (global $assembly/common/g (mut i32) (i32.const 0)) + (global $assembly/common/h (mut i32) (i32.const 0)) + (global $assembly/common/i (mut i32) (i32.const 0)) + (global $assembly/common/t1 (mut i32) (i32.const 0)) + (global $assembly/common/t2 (mut i32) (i32.const 0)) + (global $assembly/common/M (mut i32) (i32.const 0)) + (global $assembly/common/mPtr (mut i32) (i32.const 0)) + (global $assembly/common/W (mut i32) (i32.const 0)) + (global $assembly/common/wPtr (mut i32) (i32.const 0)) + (global $assembly/common/input (mut i32) (i32.const 0)) + (global $assembly/common/inputPtr (mut i32) (i32.const 0)) + (global $assembly/common/output (mut i32) (i32.const 0)) + (global $assembly/common/outputPtr (mut i32) (i32.const 0)) + (global $assembly/common/mLength (mut i32) (i32.const 0)) + (global $assembly/common/bytesHashed (mut i32) (i32.const 0)) + (memory $0 1) + (data $0 (i32.const 1036) "\1c\01") + (data $0.1 (i32.const 1048) "\01\00\00\00\00\01\00\00\98/\8aB\91D7q\cf\fb\c0\b5\a5\db\b5\e9[\c2V9\f1\11\f1Y\a4\82?\92\d5^\1c\ab\98\aa\07\d8\01[\83\12\be\851$\c3}\0cUt]\ber\fe\b1\de\80\a7\06\dc\9bt\f1\9b\c1\c1i\9b\e4\86G\be\ef\c6\9d\c1\0f\cc\a1\0c$o,\e9-\aa\84tJ\dc\a9\b0\\\da\88\f9vRQ>\98m\c61\a8\c8\'\03\b0\c7\7fY\bf\f3\0b\e0\c6G\91\a7\d5Qc\ca\06g))\14\85\n\b7\'8!\1b.\fcm,M\13\r8STs\ne\bb\njv.\c9\c2\81\85,r\92\a1\e8\bf\a2Kf\1a\a8p\8bK\c2\a3Ql\c7\19\e8\92\d1$\06\99\d6\855\0e\f4p\a0j\10\16\c1\a4\19\08l7\1eLwH\'\b5\bc\b04\b3\0c\1c9J\aa\d8NO\ca\9c[\f3o.h\ee\82\8ftoc\a5x\14x\c8\84\08\02\c7\8c\fa\ff\be\90\eblP\a4\f7\a3\f9\be\f2xq\c6") + (data $1 (i32.const 1324) ",") + (data $1.1 (i32.const 1336) "\04\00\00\00\10\00\00\00 \04\00\00 \04\00\00\00\01\00\00@") + (data $2 (i32.const 1372) "\1c\01") + (data $2.1 (i32.const 1384) "\01\00\00\00\00\01\00\00\98/\8a\c2\91D7q\cf\fb\c0\b5\a5\db\b5\e9[\c2V9\f1\11\f1Y\a4\82?\92\d5^\1c\ab\98\aa\07\d8\01[\83\12\be\851$\c3}\0cUt]\ber\fe\b1\de\80\a7\06\dc\9bt\f3\9b\c1\c1i\9bd\86G\fe\f0\c6\ed\e1\0fT\f2\0c$o4\e9O\be\84\c9l\1eA\b9a\fa\88\f9\16RQ\c6\f2mZ\8e\a8e\fc\19\b0\c7\9e\d9\b9\c31\12\9a\a0\ea\0e\e7+#\b1\fd\b0>5\c7\d5\bai0_m\97\cb\8f\11\0fZ\fd\ee\1e\dc\89\b65\n\04z\0b\de\9d\ca\f4X\16[]\e1\86>\7f\00\80\89\0872\ea\07\a57\95\abo\10a@\17\f1\d6\8c\rm;\aa\cd7\be\bb\c0\da;a\83c\a3H\db1\e9\02\0b\a7\\\d1o\ca\fa\1aR1\8431\95\1a\d4n\90xCm\f2\91\9c\c3\bd\ab\cc\9e\e6\a0\c9\b5<\b6/S\c6A\c7\d2\a3~#\07hK\95\a4v\1d\19L") + (data $3 (i32.const 1660) ",") + (data $3.1 (i32.const 1672) "\04\00\00\00\10\00\00\00p\05\00\00p\05\00\00\00\01\00\00@") + (data $4 (i32.const 1708) ",") + (data $4.1 (i32.const 1720) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $5 (i32.const 1756) "<") + (data $5.1 (i32.const 1768) "\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data $6 (i32.const 1820) "<") + (data $6.1 (i32.const 1832) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $7 (i32.const 1884) "<") + (data $7.1 (i32.const 1896) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00c\00m\00s\00.\00t\00s") + (data $8 (i32.const 1948) "<") + (data $8.1 (i32.const 1960) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $10 (i32.const 2044) "<") + (data $10.1 (i32.const 2056) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $11 (i32.const 2108) ",") + (data $11.1 (i32.const 2120) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $12 (i32.const 2156) "|") + (data $12.1 (i32.const 2168) "\02\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data $13 (i32.const 2284) "<") + (data $13.1 (i32.const 2296) "\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data $14 (i32.const 2348) "\1c") + (data $14.1 (i32.const 2360) "\02\00\00\00\02\00\00\000") + (data $15 (i32.const 2380) "\\") + (data $15.1 (i32.const 2392) "\02\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data $16 (i32.const 2476) "\\") + (data $16.1 (i32.const 2488) "\02\00\00\00H\00\00\00s\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 ") + (data $17 (i32.const 2572) "\1c") + (data $17.1 (i32.const 2584) "\02") + (data $18 (i32.const 2604) "<") + (data $18.1 (i32.const 2616) "\02\00\00\00,\00\00\00a\00s\00s\00e\00m\00b\00l\00y\00/\00u\00t\00i\00l\00s\00/\00v\001\002\008\00.\00t\00s") + (data $19 (i32.const 2668) "\\") + (data $19.1 (i32.const 2680) "\02\00\00\00H\00\00\00g\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 ") + (export "batchHash4UintArray64s" (func $assembly/index.simd/batchHash4UintArray64s)) + (export "batchHash4HashObjectInputs" (func $assembly/index.simd/batchHash4HashObjectInputs)) + (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) + (export "input" (global $assembly/common/input)) + (export "output" (global $assembly/common/output)) + (export "init" (func $assembly/common/init)) + (export "update" (func $assembly/common/update)) + (export "final" (func $assembly/common/final)) + (export "digest" (func $assembly/common/digest)) + (export "digest64" (func $assembly/common/digest64)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/tlsf/Root#set:flMap (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + i32.const -4 + i32.and + local.tee $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.set $3 + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + call $~lib/rt/tlsf/Block#set:next + end + local.get $5 + if + local.get $5 + local.get $4 + call $~lib/rt/tlsf/Block#set:prev + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.load + local.set $3 + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + call $~lib/rt/tlsf/Root#set:flMap + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.set $6 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + call $~lib/rt/tlsf/Root#set:flMap + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $0 + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + local.get $5 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $1 + local.get $3 + call $~lib/rt/tlsf/Block#set:next + local.get $3 + if + local.get $3 + local.get $1 + call $~lib/rt/tlsf/Block#set:prev + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $1 + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $1 + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + call $~lib/rt/tlsf/Root#set:flMap + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/roundSize (param $0 i32) (result i32) + local.get $0 + i32.const 1 + i32.const 27 + local.get $0 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.get $0 + local.get $0 + i32.const 536870910 + i32.lt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $1 + i32.const 256 + i32.lt_u + if (result i32) + local.get $1 + i32.const 4 + i32.shr_u + else + i32.const 31 + local.get $1 + call $~lib/rt/tlsf/roundSize + local.tee $1 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $2 + local.get $1 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.set $1 + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $0 + local.get $1 + i32.ctz + local.tee $0 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.ctz + local.get $0 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 1840 + i32.const 1968 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 12 + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.get $1 + i32.const 12 + i32.le_u + select + local.tee $1 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $1 + i32.const 256 + i32.ge_u + if (result i32) + local.get $1 + call $~lib/rt/tlsf/roundSize + else + local.get $1 + end + local.set $2 + memory.size + local.tee $3 + local.get $2 + i32.const 4 + local.get $0 + i32.load offset=1568 + local.get $3 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $2 + local.get $3 + i32.lt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $3 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $0 + local.get $1 + call $~lib/rt/tlsf/searchBlock + local.set $2 + end + local.get $2 + i32.load + drop + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + i32.load + local.tee $3 + i32.const -4 + i32.and + local.get $1 + i32.sub + local.tee $4 + i32.const 16 + i32.ge_u + if + local.get $2 + local.get $1 + local.get $3 + i32.const 2 + i32.and + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $2 + i32.const 4 + i32.add + local.get $1 + i32.add + local.tee $1 + local.get $4 + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + else + local.get $2 + local.get $3 + i32.const -2 + i32.and + call $~lib/rt/tlsf/Root#set:flMap + local.get $2 + i32.const 4 + i32.add + local.get $2 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + local.get $2 + ) + (func $~lib/rt/tcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 1073741804 + i32.gt_u + if + i32.const 1840 + i32.const 1904 + i32.const 125 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + memory.size + local.tee $3 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $3 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 2768 + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + i32.const 4336 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $2 + i32.const 23 + i32.lt_u + if + local.get $2 + i32.const 2 + i32.shl + i32.const 2768 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + i32.const 16 + i32.lt_u + if + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.const 2768 + i32.add + i32.const 0 + i32.store offset=96 + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + i32.const 2768 + i32.const 4340 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 2768 + global.set $~lib/rt/tlsf/ROOT + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.add + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/tcms/fromSpace + local.tee $0 + i32.load offset=8 + local.set $1 + local.get $2 + local.get $0 + call $~lib/rt/tlsf/Block#set:prev + local.get $2 + local.get $1 + call $~lib/rt/tlsf/Block#set:next + local.get $1 + local.get $2 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + call $~lib/rt/tlsf/Block#set:prev + local.get $0 + local.get $2 + call $~lib/rt/tlsf/Block#set:next + global.get $~lib/rt/tcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/tcms/total + local.get $2 + i32.const 20 + i32.add + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 1728 + i32.const 1776 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + call $~lib/rt/tcms/__new + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 2064 + i32.const 2128 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + ) + (func $~lib/util/number/itoa32 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.eqz + if + i32.const 2368 + return + end + i32.const 0 + local.get $0 + i32.sub + local.get $0 + local.get $0 + i32.const 31 + i32.shr_u + i32.const 1 + i32.shl + local.tee $1 + select + local.tee $0 + i32.const 10 + i32.ge_u + i32.const 1 + i32.add + local.get $0 + i32.const 10000 + i32.ge_u + i32.const 3 + i32.add + local.get $0 + i32.const 1000 + i32.ge_u + i32.add + local.get $0 + i32.const 100 + i32.lt_u + select + local.get $0 + i32.const 1000000 + i32.ge_u + i32.const 6 + i32.add + local.get $0 + i32.const 1000000000 + i32.ge_u + i32.const 8 + i32.add + local.get $0 + i32.const 100000000 + i32.ge_u + i32.add + local.get $0 + i32.const 10000000 + i32.lt_u + select + local.get $0 + i32.const 100000 + i32.lt_u + select + local.tee $2 + i32.const 1 + i32.shl + local.get $1 + i32.add + i32.const 2 + call $~lib/rt/tcms/__new + local.tee $3 + local.get $1 + i32.add + local.set $4 + loop $do-loop|0 + local.get $4 + local.get $2 + i32.const 1 + i32.sub + local.tee $2 + i32.const 1 + i32.shl + i32.add + local.get $0 + i32.const 10 + i32.rem_u + i32.const 48 + i32.add + i32.store16 + local.get $0 + i32.const 10 + i32.div_u + local.tee $0 + br_if $do-loop|0 + end + local.get $1 + if + local.get $3 + i32.const 45 + i32.store16 + end + local.get $3 + ) + (func $~lib/string/String#get:length (param $0 i32) (result i32) + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + ) + (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.tee $2 + local.get $1 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.tee $3 + i32.add + local.tee $4 + i32.eqz + if + i32.const 2592 + return + end + local.get $4 + i32.const 2 + call $~lib/rt/tcms/__new + local.tee $4 + local.get $0 + local.get $2 + memory.copy + local.get $2 + local.get $4 + i32.add + local.get $1 + local.get $3 + memory.copy + local.get $4 + ) + (func $start:assembly/simd + (local $0 i32) + (local $1 v128) + (local $2 i32) + i32.const 2016 + i32.const 2016 + call $~lib/rt/tlsf/Block#set:prev + i32.const 2016 + i32.const 2016 + call $~lib/rt/tlsf/Block#set:next + i32.const 2016 + global.set $~lib/rt/tcms/fromSpace + i32.const 1024 + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/simd/kV128ArrayBuffer + global.get $assembly/simd/kV128ArrayBuffer + global.set $assembly/simd/kV128Ptr + block $folding-inner0 + loop $for-loop|0 + local.get $0 + i32.const 64 + i32.lt_s + if + global.get $assembly/simd/kV128Ptr + local.set $2 + i32.const 1344 + local.get $0 + call $~lib/array/Array#__get + i32x4.splat + local.set $1 + block $break|1 + block $case63|1 + block $case62|1 + block $case61|1 + block $case60|1 + block $case59|1 + block $case58|1 + block $case57|1 + block $case56|1 + block $case55|1 + block $case54|1 + block $case53|1 + block $case52|1 + block $case51|1 + block $case50|1 + block $case49|1 + block $case48|1 + block $case47|1 + block $case46|1 + block $case45|1 + block $case44|1 + block $case43|1 + block $case42|1 + block $case41|1 + block $case40|1 + block $case39|1 + block $case38|1 + block $case37|1 + block $case36|1 + block $case35|1 + block $case34|1 + block $case33|1 + block $case32|1 + block $case31|1 + block $case30|1 + block $case29|1 + block $case28|1 + block $case27|1 + block $case26|1 + block $case25|1 + block $case24|1 + block $case23|1 + block $case22|1 + block $case21|1 + block $case20|1 + block $case19|1 + block $case18|1 + block $case17|1 + block $case16|1 + block $case15|1 + block $case14|1 + block $case13|1 + block $case12|1 + block $case11|1 + block $case10|1 + block $case9|1 + block $case8|1 + block $case7|1 + block $case6|1 + block $case5|1 + block $case4|1 + block $case3|1 + block $case2|1 + block $case1|1 + block $case0|1 + local.get $0 + br_table $case0|1 $case1|1 $case2|1 $case3|1 $case4|1 $case5|1 $case6|1 $case7|1 $case8|1 $case9|1 $case10|1 $case11|1 $case12|1 $case13|1 $case14|1 $case15|1 $case16|1 $case17|1 $case18|1 $case19|1 $case20|1 $case21|1 $case22|1 $case23|1 $case24|1 $case25|1 $case26|1 $case27|1 $case28|1 $case29|1 $case30|1 $case31|1 $case32|1 $case33|1 $case34|1 $case35|1 $case36|1 $case37|1 $case38|1 $case39|1 $case40|1 $case41|1 $case42|1 $case43|1 $case44|1 $case45|1 $case46|1 $case47|1 $case48|1 $case49|1 $case50|1 $case51|1 $case52|1 $case53|1 $case54|1 $case55|1 $case56|1 $case57|1 $case58|1 $case59|1 $case60|1 $case61|1 $case62|1 $case63|1 $folding-inner0 + end + local.get $2 + local.get $1 + v128.store + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=16 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=32 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=48 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=64 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=80 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=96 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=112 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=128 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=144 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=160 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=176 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=192 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=208 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=224 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=240 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=256 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=272 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=288 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=304 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=320 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=336 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=352 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=368 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=384 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=400 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=416 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=432 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=448 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=464 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=480 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=496 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=512 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=528 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=544 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=560 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=576 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=592 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=608 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=624 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=640 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=656 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=672 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=688 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=704 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=720 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=736 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=752 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=768 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=784 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=800 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=816 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=832 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=848 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=864 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=880 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=896 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=912 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=928 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=944 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=960 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=976 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=992 + br $break|1 + end + local.get $2 + local.get $1 + v128.store offset=1008 + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 1024 + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/simd/w64V12ArrayBuffer + global.get $assembly/simd/w64V12ArrayBuffer + global.set $assembly/simd/w64V128Ptr + i32.const 0 + local.set $0 + loop $for-loop|2 + local.get $0 + i32.const 64 + i32.lt_s + if + global.get $assembly/simd/w64V128Ptr + local.set $2 + i32.const 1680 + local.get $0 + call $~lib/array/Array#__get + i32x4.splat + local.set $1 + block $break|3 + block $case63|3 + block $case62|3 + block $case61|3 + block $case60|3 + block $case59|3 + block $case58|3 + block $case57|3 + block $case56|3 + block $case55|3 + block $case54|3 + block $case53|3 + block $case52|3 + block $case51|3 + block $case50|3 + block $case49|3 + block $case48|3 + block $case47|3 + block $case46|3 + block $case45|3 + block $case44|3 + block $case43|3 + block $case42|3 + block $case41|3 + block $case40|3 + block $case39|3 + block $case38|3 + block $case37|3 + block $case36|3 + block $case35|3 + block $case34|3 + block $case33|3 + block $case32|3 + block $case31|3 + block $case30|3 + block $case29|3 + block $case28|3 + block $case27|3 + block $case26|3 + block $case25|3 + block $case24|3 + block $case23|3 + block $case22|3 + block $case21|3 + block $case20|3 + block $case19|3 + block $case18|3 + block $case17|3 + block $case16|3 + block $case15|3 + block $case14|3 + block $case13|3 + block $case12|3 + block $case11|3 + block $case10|3 + block $case9|3 + block $case8|3 + block $case7|3 + block $case6|3 + block $case5|3 + block $case4|3 + block $case3|3 + block $case2|3 + block $case1|3 + block $case0|3 + local.get $0 + br_table $case0|3 $case1|3 $case2|3 $case3|3 $case4|3 $case5|3 $case6|3 $case7|3 $case8|3 $case9|3 $case10|3 $case11|3 $case12|3 $case13|3 $case14|3 $case15|3 $case16|3 $case17|3 $case18|3 $case19|3 $case20|3 $case21|3 $case22|3 $case23|3 $case24|3 $case25|3 $case26|3 $case27|3 $case28|3 $case29|3 $case30|3 $case31|3 $case32|3 $case33|3 $case34|3 $case35|3 $case36|3 $case37|3 $case38|3 $case39|3 $case40|3 $case41|3 $case42|3 $case43|3 $case44|3 $case45|3 $case46|3 $case47|3 $case48|3 $case49|3 $case50|3 $case51|3 $case52|3 $case53|3 $case54|3 $case55|3 $case56|3 $case57|3 $case58|3 $case59|3 $case60|3 $case61|3 $case62|3 $case63|3 $folding-inner0 + end + local.get $2 + local.get $1 + v128.store + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=16 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=32 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=48 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=64 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=80 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=96 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=112 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=128 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=144 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=160 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=176 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=192 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=208 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=224 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=240 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=256 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=272 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=288 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=304 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=320 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=336 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=352 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=368 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=384 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=400 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=416 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=432 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=448 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=464 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=480 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=496 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=512 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=528 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=544 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=560 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=576 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=592 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=608 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=624 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=640 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=656 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=672 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=688 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=704 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=720 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=736 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=752 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=768 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=784 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=800 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=816 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=832 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=848 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=864 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=880 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=896 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=912 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=928 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=944 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=960 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=976 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=992 + br $break|3 + end + local.get $2 + local.get $1 + v128.store offset=1008 + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 + end + end + return + end + i32.const 2496 + local.get $0 + call $~lib/util/number/itoa32 + call $~lib/string/String#concat + i32.const 2624 + i32.const 201 + i32.const 7 + call $~lib/builtins/abort + unreachable + ) + (func $assembly/simd/hashPreCompWV128 + (local $0 v128) + (local $1 i32) + (local $2 i32) + (local $3 v128) + global.get $assembly/simd/H0V128 + global.set $assembly/simd/aV128 + global.get $assembly/simd/H1V128 + global.set $assembly/simd/bV128 + global.get $assembly/simd/H2V128 + global.set $assembly/simd/cV128 + global.get $assembly/simd/H3V128 + global.set $assembly/simd/dV128 + global.get $assembly/simd/H4V128 + global.set $assembly/simd/eV128 + global.get $assembly/simd/H5V128 + global.set $assembly/simd/fV128 + global.get $assembly/simd/H6V128 + global.set $assembly/simd/gV128 + global.get $assembly/simd/H7V128 + global.set $assembly/simd/hV128 + i32.const 0 + global.set $assembly/simd/i + loop $for-loop|0 + global.get $assembly/simd/i + i32.const 64 + i32.lt_s + if + global.get $assembly/simd/hV128 + global.get $assembly/simd/eV128 + local.tee $0 + i32.const 6 + i32x4.shr_u + local.get $0 + i32.const 26 + i32x4.shl + v128.or + local.get $0 + i32.const 11 + i32x4.shr_u + local.get $0 + i32.const 21 + i32x4.shl + v128.or + v128.xor + local.get $0 + i32.const 25 + i32x4.shr_u + local.get $0 + i32.const 7 + i32x4.shl + v128.or + v128.xor + i32x4.add + global.get $assembly/simd/eV128 + local.tee $0 + global.get $assembly/simd/fV128 + v128.and + local.get $0 + v128.not + global.get $assembly/simd/gV128 + v128.and + v128.xor + i32x4.add + local.set $3 + global.get $assembly/simd/w64V128Ptr + local.set $1 + block $assembly/utils/v128/getV128|inlined.6 + block $case64|1 + block $case63|1 + block $case62|1 + block $case61|1 + block $case60|1 + block $case59|1 + block $case58|1 + block $case57|1 + block $case56|1 + block $case55|1 + block $case54|1 + block $case53|1 + block $case52|1 + block $case51|1 + block $case50|1 + block $case49|1 + block $case48|1 + block $case47|1 + block $case46|1 + block $case45|1 + block $case44|1 + block $case43|1 + block $case42|1 + block $case41|1 + block $case40|1 + block $case39|1 + block $case38|1 + block $case37|1 + block $case36|1 + block $case35|1 + block $case34|1 + block $case33|1 + block $case32|1 + block $case31|1 + block $case30|1 + block $case29|1 + block $case28|1 + block $case27|1 + block $case26|1 + block $case25|1 + block $case24|1 + block $case23|1 + block $case22|1 + block $case21|1 + block $case20|1 + block $case19|1 + block $case18|1 + block $case17|1 + block $case16|1 + block $case15|1 + block $case14|1 + block $case13|1 + block $case12|1 + block $case11|1 + block $case10|1 + block $case9|1 + block $case8|1 + block $case7|1 + block $case6|1 + block $case5|1 + block $case4|1 + block $case3|1 + block $case2|1 + block $case1|1 + block $case0|1 + global.get $assembly/simd/i + local.tee $2 + br_table $case0|1 $case1|1 $case2|1 $case3|1 $case4|1 $case5|1 $case6|1 $case7|1 $case8|1 $case9|1 $case10|1 $case11|1 $case12|1 $case13|1 $case14|1 $case15|1 $case16|1 $case17|1 $case18|1 $case19|1 $case20|1 $case21|1 $case22|1 $case23|1 $case24|1 $case25|1 $case26|1 $case27|1 $case28|1 $case29|1 $case30|1 $case31|1 $case32|1 $case33|1 $case34|1 $case35|1 $case36|1 $case37|1 $case38|1 $case39|1 $case40|1 $case41|1 $case42|1 $case43|1 $case44|1 $case45|1 $case46|1 $case47|1 $case48|1 $case49|1 $case50|1 $case51|1 $case52|1 $case53|1 $case54|1 $case55|1 $case56|1 $case57|1 $case58|1 $case59|1 $case60|1 $case61|1 $case62|1 $case63|1 $case64|1 + end + local.get $1 + v128.load + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=16 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=32 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=48 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=64 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=80 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=96 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=112 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=128 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=144 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=160 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=176 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=192 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=208 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=224 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=240 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=256 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=272 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=288 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=304 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=320 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=336 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=352 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=368 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=384 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=400 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=416 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=432 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=448 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=464 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=480 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=496 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=512 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=528 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=544 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=560 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=576 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=592 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=608 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=624 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=640 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=656 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=672 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=688 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=704 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=720 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=736 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=752 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=768 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=784 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=800 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=816 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=832 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=848 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=864 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=880 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=896 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=912 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=928 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=944 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=960 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=976 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=992 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $1 + v128.load offset=1008 + local.set $0 + br $assembly/utils/v128/getV128|inlined.6 + end + i32.const 2688 + local.get $2 + call $~lib/util/number/itoa32 + call $~lib/string/String#concat + i32.const 2624 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $0 + i32x4.add + global.set $assembly/simd/t1V128 + global.get $assembly/simd/aV128 + local.tee $0 + i32.const 2 + i32x4.shr_u + local.get $0 + i32.const 30 + i32x4.shl + v128.or + local.get $0 + i32.const 13 + i32x4.shr_u + local.get $0 + i32.const 19 + i32x4.shl + v128.or + v128.xor + local.get $0 + i32.const 22 + i32x4.shr_u + local.get $0 + i32.const 10 + i32x4.shl + v128.or + v128.xor + global.get $assembly/simd/aV128 + local.tee $0 + global.get $assembly/simd/bV128 + local.tee $3 + v128.and + local.get $0 + global.get $assembly/simd/cV128 + local.tee $0 + v128.and + v128.xor + local.get $3 + local.get $0 + v128.and + v128.xor + i32x4.add + global.set $assembly/simd/t2V128 + global.get $assembly/simd/gV128 + global.set $assembly/simd/hV128 + global.get $assembly/simd/fV128 + global.set $assembly/simd/gV128 + global.get $assembly/simd/eV128 + global.set $assembly/simd/fV128 + global.get $assembly/simd/dV128 + global.get $assembly/simd/t1V128 + i32x4.add + global.set $assembly/simd/eV128 + global.get $assembly/simd/cV128 + global.set $assembly/simd/dV128 + global.get $assembly/simd/bV128 + global.set $assembly/simd/cV128 + global.get $assembly/simd/aV128 + global.set $assembly/simd/bV128 + global.get $assembly/simd/t1V128 + global.get $assembly/simd/t2V128 + i32x4.add + global.set $assembly/simd/aV128 + global.get $assembly/simd/i + i32.const 1 + i32.add + global.set $assembly/simd/i + br $for-loop|0 + end + end + global.get $assembly/simd/H0V128 + global.get $assembly/simd/aV128 + i32x4.add + global.set $assembly/simd/H0V128 + global.get $assembly/simd/H1V128 + global.get $assembly/simd/bV128 + i32x4.add + global.set $assembly/simd/H1V128 + global.get $assembly/simd/H2V128 + global.get $assembly/simd/cV128 + i32x4.add + global.set $assembly/simd/H2V128 + global.get $assembly/simd/H3V128 + global.get $assembly/simd/dV128 + i32x4.add + global.set $assembly/simd/H3V128 + global.get $assembly/simd/H4V128 + global.get $assembly/simd/eV128 + i32x4.add + global.set $assembly/simd/H4V128 + global.get $assembly/simd/H5V128 + global.get $assembly/simd/fV128 + i32x4.add + global.set $assembly/simd/H5V128 + global.get $assembly/simd/H6V128 + global.get $assembly/simd/gV128 + i32x4.add + global.set $assembly/simd/H6V128 + global.get $assembly/simd/H7V128 + global.get $assembly/simd/hV128 + i32x4.add + global.set $assembly/simd/H7V128 + ) + (func $~lib/polyfills/bswap (param $0 i32) (result i32) + local.get $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + ) + (func $assembly/simd/digest64V128 (param $0 i32) (param $1 i32) + (local $2 v128) + (local $3 i32) + (local $4 v128) + (local $5 i32) + v128.const i32x4 0x6a09e667 0x6a09e667 0x6a09e667 0x6a09e667 + global.set $assembly/simd/H0V128 + v128.const i32x4 0xbb67ae85 0xbb67ae85 0xbb67ae85 0xbb67ae85 + global.set $assembly/simd/H1V128 + v128.const i32x4 0x3c6ef372 0x3c6ef372 0x3c6ef372 0x3c6ef372 + global.set $assembly/simd/H2V128 + v128.const i32x4 0xa54ff53a 0xa54ff53a 0xa54ff53a 0xa54ff53a + global.set $assembly/simd/H3V128 + v128.const i32x4 0x510e527f 0x510e527f 0x510e527f 0x510e527f + global.set $assembly/simd/H4V128 + v128.const i32x4 0x9b05688c 0x9b05688c 0x9b05688c 0x9b05688c + global.set $assembly/simd/H5V128 + v128.const i32x4 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab + global.set $assembly/simd/H6V128 + v128.const i32x4 0x5be0cd19 0x5be0cd19 0x5be0cd19 0x5be0cd19 + global.set $assembly/simd/H7V128 + v128.const i32x4 0x6a09e667 0x6a09e667 0x6a09e667 0x6a09e667 + global.set $assembly/simd/aV128 + v128.const i32x4 0xbb67ae85 0xbb67ae85 0xbb67ae85 0xbb67ae85 + global.set $assembly/simd/bV128 + v128.const i32x4 0x3c6ef372 0x3c6ef372 0x3c6ef372 0x3c6ef372 + global.set $assembly/simd/cV128 + v128.const i32x4 0xa54ff53a 0xa54ff53a 0xa54ff53a 0xa54ff53a + global.set $assembly/simd/dV128 + v128.const i32x4 0x510e527f 0x510e527f 0x510e527f 0x510e527f + global.set $assembly/simd/eV128 + v128.const i32x4 0x9b05688c 0x9b05688c 0x9b05688c 0x9b05688c + global.set $assembly/simd/fV128 + v128.const i32x4 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab + global.set $assembly/simd/gV128 + v128.const i32x4 0x5be0cd19 0x5be0cd19 0x5be0cd19 0x5be0cd19 + global.set $assembly/simd/hV128 + i32.const 0 + global.set $assembly/simd/i + block $folding-inner0 + loop $for-loop|0 + global.get $assembly/simd/i + i32.const 64 + i32.lt_s + if + global.get $assembly/simd/i + i32.const 16 + i32.lt_s + if (result v128) + block $assembly/utils/v128/getV128|inlined.0 (result v128) + block $case63|1 + block $case62|1 + block $case61|1 + block $case60|1 + block $case59|1 + block $case58|1 + block $case57|1 + block $case56|1 + block $case55|1 + block $case54|1 + block $case53|1 + block $case52|1 + block $case51|1 + block $case50|1 + block $case49|1 + block $case48|1 + block $case47|1 + block $case46|1 + block $case45|1 + block $case44|1 + block $case43|1 + block $case42|1 + block $case41|1 + block $case40|1 + block $case39|1 + block $case38|1 + block $case37|1 + block $case36|1 + block $case35|1 + block $case34|1 + block $case33|1 + block $case32|1 + block $case31|1 + block $case30|1 + block $case29|1 + block $case28|1 + block $case27|1 + block $case26|1 + block $case25|1 + block $case24|1 + block $case23|1 + block $case22|1 + block $case21|1 + block $case20|1 + block $case19|1 + block $case18|1 + block $case17|1 + block $case16|1 + block $case15|1 + block $case14|1 + block $case13|1 + block $case12|1 + block $case11|1 + block $case10|1 + block $case9|1 + block $case8|1 + block $case7|1 + block $case6|1 + block $case5|1 + block $case4|1 + block $case3|1 + block $case2|1 + block $case1|1 + block $case0|1 + global.get $assembly/simd/i + local.tee $3 + br_table $case0|1 $case1|1 $case2|1 $case3|1 $case4|1 $case5|1 $case6|1 $case7|1 $case8|1 $case9|1 $case10|1 $case11|1 $case12|1 $case13|1 $case14|1 $case15|1 $case16|1 $case17|1 $case18|1 $case19|1 $case20|1 $case21|1 $case22|1 $case23|1 $case24|1 $case25|1 $case26|1 $case27|1 $case28|1 $case29|1 $case30|1 $case31|1 $case32|1 $case33|1 $case34|1 $case35|1 $case36|1 $case37|1 $case38|1 $case39|1 $case40|1 $case41|1 $case42|1 $case43|1 $case44|1 $case45|1 $case46|1 $case47|1 $case48|1 $case49|1 $case50|1 $case51|1 $case52|1 $case53|1 $case54|1 $case55|1 $case56|1 $case57|1 $case58|1 $case59|1 $case60|1 $case61|1 $case62|1 $case63|1 $folding-inner0 + end + local.get $0 + v128.load + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $0 + v128.load offset=1008 + end + else + block $assembly/utils/v128/getV128|inlined.1 (result v128) + block $case63|2 + block $case62|2 + block $case61|2 + block $case60|2 + block $case59|2 + block $case58|2 + block $case57|2 + block $case56|2 + block $case55|2 + block $case54|2 + block $case53|2 + block $case52|2 + block $case51|2 + block $case50|2 + block $case49|2 + block $case48|2 + block $case47|2 + block $case46|2 + block $case45|2 + block $case44|2 + block $case43|2 + block $case42|2 + block $case41|2 + block $case40|2 + block $case39|2 + block $case38|2 + block $case37|2 + block $case36|2 + block $case35|2 + block $case34|2 + block $case33|2 + block $case32|2 + block $case31|2 + block $case30|2 + block $case29|2 + block $case28|2 + block $case27|2 + block $case26|2 + block $case25|2 + block $case24|2 + block $case23|2 + block $case22|2 + block $case21|2 + block $case20|2 + block $case19|2 + block $case18|2 + block $case17|2 + block $case16|2 + block $case15|2 + block $case14|2 + block $case13|2 + block $case12|2 + block $case11|2 + block $case10|2 + block $case9|2 + block $case8|2 + block $case7|2 + block $case6|2 + block $case5|2 + block $case4|2 + block $case3|2 + block $case2|2 + block $case1|2 + block $case0|2 + global.get $assembly/simd/i + i32.const 2 + i32.sub + local.tee $3 + br_table $case0|2 $case1|2 $case2|2 $case3|2 $case4|2 $case5|2 $case6|2 $case7|2 $case8|2 $case9|2 $case10|2 $case11|2 $case12|2 $case13|2 $case14|2 $case15|2 $case16|2 $case17|2 $case18|2 $case19|2 $case20|2 $case21|2 $case22|2 $case23|2 $case24|2 $case25|2 $case26|2 $case27|2 $case28|2 $case29|2 $case30|2 $case31|2 $case32|2 $case33|2 $case34|2 $case35|2 $case36|2 $case37|2 $case38|2 $case39|2 $case40|2 $case41|2 $case42|2 $case43|2 $case44|2 $case45|2 $case46|2 $case47|2 $case48|2 $case49|2 $case50|2 $case51|2 $case52|2 $case53|2 $case54|2 $case55|2 $case56|2 $case57|2 $case58|2 $case59|2 $case60|2 $case61|2 $case62|2 $case63|2 $folding-inner0 + end + local.get $0 + v128.load + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $0 + v128.load offset=1008 + end + local.tee $2 + i32.const 17 + i32x4.shr_u + local.get $2 + i32.const 15 + i32x4.shl + v128.or + local.get $2 + i32.const 19 + i32x4.shr_u + local.get $2 + i32.const 13 + i32x4.shl + v128.or + v128.xor + local.get $2 + i32.const 10 + i32x4.shr_u + v128.xor + block $assembly/utils/v128/getV128|inlined.2 (result v128) + block $case63|3 + block $case62|3 + block $case61|3 + block $case60|3 + block $case59|3 + block $case58|3 + block $case57|3 + block $case56|3 + block $case55|3 + block $case54|3 + block $case53|3 + block $case52|3 + block $case51|3 + block $case50|3 + block $case49|3 + block $case48|3 + block $case47|3 + block $case46|3 + block $case45|3 + block $case44|3 + block $case43|3 + block $case42|3 + block $case41|3 + block $case40|3 + block $case39|3 + block $case38|3 + block $case37|3 + block $case36|3 + block $case35|3 + block $case34|3 + block $case33|3 + block $case32|3 + block $case31|3 + block $case30|3 + block $case29|3 + block $case28|3 + block $case27|3 + block $case26|3 + block $case25|3 + block $case24|3 + block $case23|3 + block $case22|3 + block $case21|3 + block $case20|3 + block $case19|3 + block $case18|3 + block $case17|3 + block $case16|3 + block $case15|3 + block $case14|3 + block $case13|3 + block $case12|3 + block $case11|3 + block $case10|3 + block $case9|3 + block $case8|3 + block $case7|3 + block $case6|3 + block $case5|3 + block $case4|3 + block $case3|3 + block $case2|3 + block $case1|3 + block $case0|3 + global.get $assembly/simd/i + i32.const 7 + i32.sub + local.tee $3 + br_table $case0|3 $case1|3 $case2|3 $case3|3 $case4|3 $case5|3 $case6|3 $case7|3 $case8|3 $case9|3 $case10|3 $case11|3 $case12|3 $case13|3 $case14|3 $case15|3 $case16|3 $case17|3 $case18|3 $case19|3 $case20|3 $case21|3 $case22|3 $case23|3 $case24|3 $case25|3 $case26|3 $case27|3 $case28|3 $case29|3 $case30|3 $case31|3 $case32|3 $case33|3 $case34|3 $case35|3 $case36|3 $case37|3 $case38|3 $case39|3 $case40|3 $case41|3 $case42|3 $case43|3 $case44|3 $case45|3 $case46|3 $case47|3 $case48|3 $case49|3 $case50|3 $case51|3 $case52|3 $case53|3 $case54|3 $case55|3 $case56|3 $case57|3 $case58|3 $case59|3 $case60|3 $case61|3 $case62|3 $case63|3 $folding-inner0 + end + local.get $0 + v128.load + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $0 + v128.load offset=1008 + end + i32x4.add + block $assembly/utils/v128/getV128|inlined.3 (result v128) + block $case63|4 + block $case62|4 + block $case61|4 + block $case60|4 + block $case59|4 + block $case58|4 + block $case57|4 + block $case56|4 + block $case55|4 + block $case54|4 + block $case53|4 + block $case52|4 + block $case51|4 + block $case50|4 + block $case49|4 + block $case48|4 + block $case47|4 + block $case46|4 + block $case45|4 + block $case44|4 + block $case43|4 + block $case42|4 + block $case41|4 + block $case40|4 + block $case39|4 + block $case38|4 + block $case37|4 + block $case36|4 + block $case35|4 + block $case34|4 + block $case33|4 + block $case32|4 + block $case31|4 + block $case30|4 + block $case29|4 + block $case28|4 + block $case27|4 + block $case26|4 + block $case25|4 + block $case24|4 + block $case23|4 + block $case22|4 + block $case21|4 + block $case20|4 + block $case19|4 + block $case18|4 + block $case17|4 + block $case16|4 + block $case15|4 + block $case14|4 + block $case13|4 + block $case12|4 + block $case11|4 + block $case10|4 + block $case9|4 + block $case8|4 + block $case7|4 + block $case6|4 + block $case5|4 + block $case4|4 + block $case3|4 + block $case2|4 + block $case1|4 + block $case0|4 + global.get $assembly/simd/i + i32.const 15 + i32.sub + local.tee $3 + br_table $case0|4 $case1|4 $case2|4 $case3|4 $case4|4 $case5|4 $case6|4 $case7|4 $case8|4 $case9|4 $case10|4 $case11|4 $case12|4 $case13|4 $case14|4 $case15|4 $case16|4 $case17|4 $case18|4 $case19|4 $case20|4 $case21|4 $case22|4 $case23|4 $case24|4 $case25|4 $case26|4 $case27|4 $case28|4 $case29|4 $case30|4 $case31|4 $case32|4 $case33|4 $case34|4 $case35|4 $case36|4 $case37|4 $case38|4 $case39|4 $case40|4 $case41|4 $case42|4 $case43|4 $case44|4 $case45|4 $case46|4 $case47|4 $case48|4 $case49|4 $case50|4 $case51|4 $case52|4 $case53|4 $case54|4 $case55|4 $case56|4 $case57|4 $case58|4 $case59|4 $case60|4 $case61|4 $case62|4 $case63|4 $folding-inner0 + end + local.get $0 + v128.load + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $0 + v128.load offset=1008 + end + local.tee $2 + i32.const 7 + i32x4.shr_u + local.get $2 + i32.const 25 + i32x4.shl + v128.or + local.get $2 + i32.const 18 + i32x4.shr_u + local.get $2 + i32.const 14 + i32x4.shl + v128.or + v128.xor + local.get $2 + i32.const 3 + i32x4.shr_u + v128.xor + i32x4.add + block $assembly/utils/v128/getV128|inlined.4 (result v128) + block $case63|5 + block $case62|5 + block $case61|5 + block $case60|5 + block $case59|5 + block $case58|5 + block $case57|5 + block $case56|5 + block $case55|5 + block $case54|5 + block $case53|5 + block $case52|5 + block $case51|5 + block $case50|5 + block $case49|5 + block $case48|5 + block $case47|5 + block $case46|5 + block $case45|5 + block $case44|5 + block $case43|5 + block $case42|5 + block $case41|5 + block $case40|5 + block $case39|5 + block $case38|5 + block $case37|5 + block $case36|5 + block $case35|5 + block $case34|5 + block $case33|5 + block $case32|5 + block $case31|5 + block $case30|5 + block $case29|5 + block $case28|5 + block $case27|5 + block $case26|5 + block $case25|5 + block $case24|5 + block $case23|5 + block $case22|5 + block $case21|5 + block $case20|5 + block $case19|5 + block $case18|5 + block $case17|5 + block $case16|5 + block $case15|5 + block $case14|5 + block $case13|5 + block $case12|5 + block $case11|5 + block $case10|5 + block $case9|5 + block $case8|5 + block $case7|5 + block $case6|5 + block $case5|5 + block $case4|5 + block $case3|5 + block $case2|5 + block $case1|5 + block $case0|5 + global.get $assembly/simd/i + i32.const 16 + i32.sub + local.tee $3 + br_table $case0|5 $case1|5 $case2|5 $case3|5 $case4|5 $case5|5 $case6|5 $case7|5 $case8|5 $case9|5 $case10|5 $case11|5 $case12|5 $case13|5 $case14|5 $case15|5 $case16|5 $case17|5 $case18|5 $case19|5 $case20|5 $case21|5 $case22|5 $case23|5 $case24|5 $case25|5 $case26|5 $case27|5 $case28|5 $case29|5 $case30|5 $case31|5 $case32|5 $case33|5 $case34|5 $case35|5 $case36|5 $case37|5 $case38|5 $case39|5 $case40|5 $case41|5 $case42|5 $case43|5 $case44|5 $case45|5 $case46|5 $case47|5 $case48|5 $case49|5 $case50|5 $case51|5 $case52|5 $case53|5 $case54|5 $case55|5 $case56|5 $case57|5 $case58|5 $case59|5 $case60|5 $case61|5 $case62|5 $case63|5 $folding-inner0 + end + local.get $0 + v128.load + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $0 + v128.load offset=1008 + end + i32x4.add + end + global.set $assembly/simd/tmpW + global.get $assembly/simd/i + i32.const 16 + i32.ge_s + if + global.get $assembly/simd/tmpW + local.set $2 + block $break|6 + block $case64|6 + block $case63|6 + block $case62|6 + block $case61|6 + block $case60|6 + block $case59|6 + block $case58|6 + block $case57|6 + block $case56|6 + block $case55|6 + block $case54|6 + block $case53|6 + block $case52|6 + block $case51|6 + block $case50|6 + block $case49|6 + block $case48|6 + block $case47|6 + block $case46|6 + block $case45|6 + block $case44|6 + block $case43|6 + block $case42|6 + block $case41|6 + block $case40|6 + block $case39|6 + block $case38|6 + block $case37|6 + block $case36|6 + block $case35|6 + block $case34|6 + block $case33|6 + block $case32|6 + block $case31|6 + block $case30|6 + block $case29|6 + block $case28|6 + block $case27|6 + block $case26|6 + block $case25|6 + block $case24|6 + block $case23|6 + block $case22|6 + block $case21|6 + block $case20|6 + block $case19|6 + block $case18|6 + block $case17|6 + block $case16|6 + block $case15|6 + block $case14|6 + block $case13|6 + block $case12|6 + block $case11|6 + block $case10|6 + block $case9|6 + block $case8|6 + block $case7|6 + block $case6|6 + block $case5|6 + block $case4|6 + block $case3|6 + block $case2|6 + block $case1|6 + block $case0|6 + global.get $assembly/simd/i + local.tee $3 + br_table $case0|6 $case1|6 $case2|6 $case3|6 $case4|6 $case5|6 $case6|6 $case7|6 $case8|6 $case9|6 $case10|6 $case11|6 $case12|6 $case13|6 $case14|6 $case15|6 $case16|6 $case17|6 $case18|6 $case19|6 $case20|6 $case21|6 $case22|6 $case23|6 $case24|6 $case25|6 $case26|6 $case27|6 $case28|6 $case29|6 $case30|6 $case31|6 $case32|6 $case33|6 $case34|6 $case35|6 $case36|6 $case37|6 $case38|6 $case39|6 $case40|6 $case41|6 $case42|6 $case43|6 $case44|6 $case45|6 $case46|6 $case47|6 $case48|6 $case49|6 $case50|6 $case51|6 $case52|6 $case53|6 $case54|6 $case55|6 $case56|6 $case57|6 $case58|6 $case59|6 $case60|6 $case61|6 $case62|6 $case63|6 $case64|6 + end + local.get $0 + local.get $2 + v128.store + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=16 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=32 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=48 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=64 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=80 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=96 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=112 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=128 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=144 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=160 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=176 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=192 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=208 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=224 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=240 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=256 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=272 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=288 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=304 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=320 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=336 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=352 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=368 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=384 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=400 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=416 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=432 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=448 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=464 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=480 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=496 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=512 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=528 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=544 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=560 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=576 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=592 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=608 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=624 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=640 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=656 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=672 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=688 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=704 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=720 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=736 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=752 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=768 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=784 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=800 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=816 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=832 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=848 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=864 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=880 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=896 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=912 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=928 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=944 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=960 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=976 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=992 + br $break|6 + end + local.get $0 + local.get $2 + v128.store offset=1008 + br $break|6 + end + i32.const 2496 + local.get $3 + call $~lib/util/number/itoa32 + call $~lib/string/String#concat + i32.const 2624 + i32.const 201 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + end + global.get $assembly/simd/hV128 + global.get $assembly/simd/eV128 + local.tee $2 + i32.const 6 + i32x4.shr_u + local.get $2 + i32.const 26 + i32x4.shl + v128.or + local.get $2 + i32.const 11 + i32x4.shr_u + local.get $2 + i32.const 21 + i32x4.shl + v128.or + v128.xor + local.get $2 + i32.const 25 + i32x4.shr_u + local.get $2 + i32.const 7 + i32x4.shl + v128.or + v128.xor + i32x4.add + global.get $assembly/simd/eV128 + local.tee $2 + global.get $assembly/simd/fV128 + v128.and + local.get $2 + v128.not + global.get $assembly/simd/gV128 + v128.and + v128.xor + i32x4.add + local.set $4 + global.get $assembly/simd/kV128Ptr + local.set $3 + block $assembly/utils/v128/getV128|inlined.5 + block $case64|7 + block $case63|7 + block $case62|7 + block $case61|7 + block $case60|7 + block $case59|7 + block $case58|7 + block $case57|7 + block $case56|7 + block $case55|7 + block $case54|7 + block $case53|7 + block $case52|7 + block $case51|7 + block $case50|7 + block $case49|7 + block $case48|7 + block $case47|7 + block $case46|7 + block $case45|7 + block $case44|7 + block $case43|7 + block $case42|7 + block $case41|7 + block $case40|7 + block $case39|7 + block $case38|7 + block $case37|7 + block $case36|7 + block $case35|7 + block $case34|7 + block $case33|7 + block $case32|7 + block $case31|7 + block $case30|7 + block $case29|7 + block $case28|7 + block $case27|7 + block $case26|7 + block $case25|7 + block $case24|7 + block $case23|7 + block $case22|7 + block $case21|7 + block $case20|7 + block $case19|7 + block $case18|7 + block $case17|7 + block $case16|7 + block $case15|7 + block $case14|7 + block $case13|7 + block $case12|7 + block $case11|7 + block $case10|7 + block $case9|7 + block $case8|7 + block $case7|7 + block $case6|7 + block $case5|7 + block $case4|7 + block $case3|7 + block $case2|7 + block $case1|7 + block $case0|7 + global.get $assembly/simd/i + local.tee $5 + br_table $case0|7 $case1|7 $case2|7 $case3|7 $case4|7 $case5|7 $case6|7 $case7|7 $case8|7 $case9|7 $case10|7 $case11|7 $case12|7 $case13|7 $case14|7 $case15|7 $case16|7 $case17|7 $case18|7 $case19|7 $case20|7 $case21|7 $case22|7 $case23|7 $case24|7 $case25|7 $case26|7 $case27|7 $case28|7 $case29|7 $case30|7 $case31|7 $case32|7 $case33|7 $case34|7 $case35|7 $case36|7 $case37|7 $case38|7 $case39|7 $case40|7 $case41|7 $case42|7 $case43|7 $case44|7 $case45|7 $case46|7 $case47|7 $case48|7 $case49|7 $case50|7 $case51|7 $case52|7 $case53|7 $case54|7 $case55|7 $case56|7 $case57|7 $case58|7 $case59|7 $case60|7 $case61|7 $case62|7 $case63|7 $case64|7 + end + local.get $3 + v128.load + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=16 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=32 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=48 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=64 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=80 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=96 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=112 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=128 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=144 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=160 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=176 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=192 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=208 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=224 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=240 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=256 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=272 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=288 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=304 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=320 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=336 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=352 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=368 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=384 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=400 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=416 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=432 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=448 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=464 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=480 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=496 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=512 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=528 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=544 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=560 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=576 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=592 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=608 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=624 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=640 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=656 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=672 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=688 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=704 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=720 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=736 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=752 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=768 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=784 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=800 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=816 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=832 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=848 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=864 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=880 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=896 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=912 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=928 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=944 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=960 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=976 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=992 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $3 + v128.load offset=1008 + local.set $2 + br $assembly/utils/v128/getV128|inlined.5 + end + i32.const 2688 + local.get $5 + call $~lib/util/number/itoa32 + call $~lib/string/String#concat + i32.const 2624 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + i32x4.add + global.get $assembly/simd/tmpW + i32x4.add + global.set $assembly/simd/t1V128 + global.get $assembly/simd/aV128 + local.tee $2 + i32.const 2 + i32x4.shr_u + local.get $2 + i32.const 30 + i32x4.shl + v128.or + local.get $2 + i32.const 13 + i32x4.shr_u + local.get $2 + i32.const 19 + i32x4.shl + v128.or + v128.xor + local.get $2 + i32.const 22 + i32x4.shr_u + local.get $2 + i32.const 10 + i32x4.shl + v128.or + v128.xor + global.get $assembly/simd/aV128 + local.tee $2 + global.get $assembly/simd/bV128 + local.tee $4 + v128.and + local.get $2 + global.get $assembly/simd/cV128 + local.tee $2 + v128.and + v128.xor + local.get $4 + local.get $2 + v128.and + v128.xor + i32x4.add + global.set $assembly/simd/t2V128 + global.get $assembly/simd/gV128 + global.set $assembly/simd/hV128 + global.get $assembly/simd/fV128 + global.set $assembly/simd/gV128 + global.get $assembly/simd/eV128 + global.set $assembly/simd/fV128 + global.get $assembly/simd/dV128 + global.get $assembly/simd/t1V128 + i32x4.add + global.set $assembly/simd/eV128 + global.get $assembly/simd/cV128 + global.set $assembly/simd/dV128 + global.get $assembly/simd/bV128 + global.set $assembly/simd/cV128 + global.get $assembly/simd/aV128 + global.set $assembly/simd/bV128 + global.get $assembly/simd/t1V128 + global.get $assembly/simd/t2V128 + i32x4.add + global.set $assembly/simd/aV128 + global.get $assembly/simd/i + i32.const 1 + i32.add + global.set $assembly/simd/i + br $for-loop|0 + end + end + global.get $assembly/simd/H0V128 + global.get $assembly/simd/aV128 + i32x4.add + global.set $assembly/simd/H0V128 + global.get $assembly/simd/H1V128 + global.get $assembly/simd/bV128 + i32x4.add + global.set $assembly/simd/H1V128 + global.get $assembly/simd/H2V128 + global.get $assembly/simd/cV128 + i32x4.add + global.set $assembly/simd/H2V128 + global.get $assembly/simd/H3V128 + global.get $assembly/simd/dV128 + i32x4.add + global.set $assembly/simd/H3V128 + global.get $assembly/simd/H4V128 + global.get $assembly/simd/eV128 + i32x4.add + global.set $assembly/simd/H4V128 + global.get $assembly/simd/H5V128 + global.get $assembly/simd/fV128 + i32x4.add + global.set $assembly/simd/H5V128 + global.get $assembly/simd/H6V128 + global.get $assembly/simd/gV128 + i32x4.add + global.set $assembly/simd/H6V128 + global.get $assembly/simd/H7V128 + global.get $assembly/simd/hV128 + i32x4.add + global.set $assembly/simd/H7V128 + call $assembly/simd/hashPreCompWV128 + local.get $1 + global.get $assembly/simd/H0V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + i32.store + local.get $1 + global.get $assembly/simd/H1V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + i32.store offset=4 + local.get $1 + global.get $assembly/simd/H2V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + i32.store offset=8 + local.get $1 + global.get $assembly/simd/H3V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + i32.store offset=12 + local.get $1 + global.get $assembly/simd/H4V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + i32.store offset=16 + local.get $1 + global.get $assembly/simd/H5V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + i32.store offset=20 + local.get $1 + global.get $assembly/simd/H6V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + i32.store offset=24 + local.get $1 + global.get $assembly/simd/H7V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + i32.store offset=28 + local.get $1 + global.get $assembly/simd/H0V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + i32.store offset=32 + local.get $1 + global.get $assembly/simd/H1V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + i32.store offset=36 + local.get $1 + global.get $assembly/simd/H2V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + i32.store offset=40 + local.get $1 + global.get $assembly/simd/H3V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + i32.store offset=44 + local.get $1 + global.get $assembly/simd/H4V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + i32.store offset=48 + local.get $1 + global.get $assembly/simd/H5V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + i32.store offset=52 + local.get $1 + global.get $assembly/simd/H6V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + i32.store offset=56 + local.get $1 + global.get $assembly/simd/H7V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + i32.store offset=60 + local.get $1 + i32.const -64 + i32.sub + global.get $assembly/simd/H0V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + i32.store + local.get $1 + global.get $assembly/simd/H1V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + i32.store offset=68 + local.get $1 + global.get $assembly/simd/H2V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + i32.store offset=72 + local.get $1 + global.get $assembly/simd/H3V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + i32.store offset=76 + local.get $1 + global.get $assembly/simd/H4V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + i32.store offset=80 + local.get $1 + global.get $assembly/simd/H5V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + i32.store offset=84 + local.get $1 + global.get $assembly/simd/H6V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + i32.store offset=88 + local.get $1 + global.get $assembly/simd/H7V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + i32.store offset=92 + local.get $1 + global.get $assembly/simd/H0V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + i32.store offset=96 + local.get $1 + global.get $assembly/simd/H1V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + i32.store offset=100 + local.get $1 + global.get $assembly/simd/H2V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + i32.store offset=104 + local.get $1 + global.get $assembly/simd/H3V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + i32.store offset=108 + local.get $1 + global.get $assembly/simd/H4V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + i32.store offset=112 + local.get $1 + global.get $assembly/simd/H5V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + i32.store offset=116 + local.get $1 + global.get $assembly/simd/H6V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + i32.store offset=120 + local.get $1 + global.get $assembly/simd/H7V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + i32.store offset=124 + return + end + i32.const 2688 + local.get $3 + call $~lib/util/number/itoa32 + call $~lib/string/String#concat + i32.const 2624 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + ) + (func $assembly/index.simd/batchHash4UintArray64s (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + loop $for-loop|0 + local.get $1 + i32.const 16 + i32.lt_s + if + local.get $1 + i32.const 2 + i32.shl + local.tee $2 + i32.const 1 + i32.add + local.set $3 + global.get $assembly/common/wPtr + local.get $2 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.const 3 + i32.add + local.tee $4 + global.get $assembly/common/inputPtr + local.tee $5 + i32.add + i32.load8_u + local.get $2 + local.get $5 + i32.add + i32.load8_u + i32.const 24 + i32.shl + local.get $3 + local.get $5 + i32.add + i32.load8_u + i32.const 16 + i32.shl + i32.or + local.get $2 + i32.const 2 + i32.add + local.tee $2 + local.get $5 + i32.add + i32.load8_u + i32.const 8 + i32.shl + i32.or + i32.or + i32.store + global.get $assembly/common/wPtr + local.get $3 + i32.const 2 + i32.shl + i32.add + global.get $assembly/common/inputPtr + local.tee $3 + local.get $1 + i32.const 16 + i32.add + i32.const 2 + i32.shl + local.tee $5 + i32.const 3 + i32.add + i32.add + i32.load8_u + local.get $3 + local.get $5 + i32.add + i32.load8_u + i32.const 24 + i32.shl + local.get $5 + i32.const 1 + i32.add + local.get $3 + i32.add + i32.load8_u + i32.const 16 + i32.shl + i32.or + local.get $5 + i32.const 2 + i32.add + local.get $3 + i32.add + i32.load8_u + i32.const 8 + i32.shl + i32.or + i32.or + i32.store + global.get $assembly/common/wPtr + local.get $2 + i32.const 2 + i32.shl + i32.add + global.get $assembly/common/inputPtr + local.tee $2 + local.get $1 + i32.const 32 + i32.add + i32.const 2 + i32.shl + local.tee $3 + i32.const 3 + i32.add + i32.add + i32.load8_u + local.get $2 + local.get $3 + i32.add + i32.load8_u + i32.const 24 + i32.shl + local.get $3 + i32.const 1 + i32.add + local.get $2 + i32.add + i32.load8_u + i32.const 16 + i32.shl + i32.or + local.get $3 + i32.const 2 + i32.add + local.get $2 + i32.add + i32.load8_u + i32.const 8 + i32.shl + i32.or + i32.or + i32.store + global.get $assembly/common/wPtr + local.get $4 + i32.const 2 + i32.shl + i32.add + global.get $assembly/common/inputPtr + local.tee $2 + local.get $1 + i32.const 48 + i32.add + i32.const 2 + i32.shl + local.tee $3 + i32.const 3 + i32.add + i32.add + i32.load8_u + local.get $2 + local.get $3 + i32.add + i32.load8_u + i32.const 24 + i32.shl + local.get $3 + i32.const 1 + i32.add + local.get $2 + i32.add + i32.load8_u + i32.const 16 + i32.shl + i32.or + local.get $3 + i32.const 2 + i32.add + local.get $2 + i32.add + i32.load8_u + i32.const 8 + i32.shl + i32.or + i32.or + i32.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $assembly/common/wPtr + local.get $0 + call $assembly/simd/digest64V128 + ) + (func $assembly/index.simd/batchHash4HashObjectInputs (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + loop $for-loop|0 + local.get $2 + i32.const 64 + i32.lt_s + if + local.get $2 + i32.const 2 + i32.shl + local.tee $1 + global.get $assembly/common/wPtr + i32.add + global.get $assembly/common/inputPtr + local.tee $3 + local.get $1 + i32.const 3 + i32.add + i32.add + i32.load8_u + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.const 24 + i32.shl + local.get $1 + i32.const 1 + i32.add + local.get $3 + i32.add + i32.load8_u + i32.const 16 + i32.shl + i32.or + local.get $1 + i32.const 2 + i32.add + local.get $3 + i32.add + i32.load8_u + i32.const 8 + i32.shl + i32.or + i32.or + i32.store + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $assembly/common/wPtr + local.get $0 + call $assembly/simd/digest64V128 + ) + (func $assembly/common/init + i32.const 1779033703 + global.set $assembly/common/H0 + i32.const -1150833019 + global.set $assembly/common/H1 + i32.const 1013904242 + global.set $assembly/common/H2 + i32.const -1521486534 + global.set $assembly/common/H3 + i32.const 1359893119 + global.set $assembly/common/H4 + i32.const -1694144372 + global.set $assembly/common/H5 + i32.const 528734635 + global.set $assembly/common/H6 + i32.const 1541459225 + global.set $assembly/common/H7 + i32.const 0 + global.set $assembly/common/mLength + i32.const 0 + global.set $assembly/common/bytesHashed + ) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) + (local $2 i32) + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h + i32.const 0 + global.set $assembly/common/i + loop $for-loop|0 + global.get $assembly/common/i + i32.const 16 + i32.lt_u + if + local.get $0 + global.get $assembly/common/i + i32.const 2 + i32.shl + local.tee $2 + i32.add + local.get $1 + local.get $2 + i32.const 3 + i32.add + i32.add + i32.load8_u + local.get $1 + local.get $2 + i32.add + i32.load8_u + i32.const 24 + i32.shl + local.get $1 + local.get $2 + i32.const 1 + i32.add + i32.add + i32.load8_u + i32.const 16 + i32.shl + i32.or + local.get $1 + local.get $2 + i32.const 2 + i32.add + i32.add + i32.load8_u + i32.const 8 + i32.shl + i32.or + i32.or + i32.store + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|0 + end + end + i32.const 16 + global.set $assembly/common/i + loop $for-loop|1 + global.get $assembly/common/i + i32.const 64 + i32.lt_u + if + local.get $0 + global.get $assembly/common/i + i32.const 2 + i32.shl + i32.add + local.get $0 + global.get $assembly/common/i + i32.const 16 + i32.sub + i32.const 2 + i32.shl + i32.add + i32.load + local.get $0 + global.get $assembly/common/i + i32.const 7 + i32.sub + i32.const 2 + i32.shl + i32.add + i32.load + local.get $0 + global.get $assembly/common/i + i32.const 2 + i32.sub + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $1 + i32.const 17 + i32.rotr + local.get $1 + i32.const 19 + i32.rotr + i32.xor + local.get $1 + i32.const 10 + i32.shr_u + i32.xor + i32.add + local.get $0 + global.get $assembly/common/i + i32.const 15 + i32.sub + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $1 + i32.const 7 + i32.rotr + local.get $1 + i32.const 18 + i32.rotr + i32.xor + local.get $1 + i32.const 3 + i32.shr_u + i32.xor + i32.add + i32.add + i32.store + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|1 + end + end + i32.const 0 + global.set $assembly/common/i + loop $for-loop|2 + global.get $assembly/common/i + i32.const 64 + i32.lt_u + if + local.get $0 + global.get $assembly/common/i + i32.const 2 + i32.shl + local.tee $1 + i32.add + i32.load + local.get $1 + global.get $assembly/common/kPtr + i32.add + i32.load + global.get $assembly/common/h + global.get $assembly/common/e + local.tee $1 + i32.const 6 + i32.rotr + local.get $1 + i32.const 11 + i32.rotr + i32.xor + local.get $1 + i32.const 25 + i32.rotr + i32.xor + i32.add + global.get $assembly/common/e + local.tee $1 + global.get $assembly/common/f + i32.and + global.get $assembly/common/g + local.get $1 + i32.const -1 + i32.xor + i32.and + i32.xor + i32.add + i32.add + i32.add + global.set $assembly/common/t1 + global.get $assembly/common/a + local.tee $1 + i32.const 2 + i32.rotr + local.get $1 + i32.const 13 + i32.rotr + i32.xor + local.get $1 + i32.const 22 + i32.rotr + i32.xor + global.get $assembly/common/b + local.tee $1 + global.get $assembly/common/c + local.tee $2 + i32.and + local.get $1 + global.get $assembly/common/a + local.tee $1 + i32.and + local.get $1 + local.get $2 + i32.and + i32.xor + i32.xor + i32.add + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|2 + end + end + global.get $assembly/common/H0 + global.get $assembly/common/a + i32.add + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b + i32.add + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c + i32.add + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d + i32.add + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e + i32.add + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f + i32.add + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g + i32.add + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h + i32.add + global.set $assembly/common/H7 + ) + (func $assembly/common/update (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + global.get $assembly/common/bytesHashed + local.get $1 + i32.add + global.set $assembly/common/bytesHashed + global.get $assembly/common/mLength + if + i32.const 64 + global.get $assembly/common/mLength + i32.sub + local.tee $2 + local.get $1 + i32.le_s + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.get $0 + local.get $2 + memory.copy + global.get $assembly/common/mLength + local.get $2 + i32.add + global.set $assembly/common/mLength + i32.const 64 + global.get $assembly/common/mLength + i32.sub + local.set $2 + local.get $1 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.sub + local.set $1 + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + i32.const 0 + global.set $assembly/common/mLength + else + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.get $0 + local.get $1 + memory.copy + global.get $assembly/common/mLength + local.get $1 + i32.add + global.set $assembly/common/mLength + return + end + end + loop $for-loop|0 + local.get $3 + local.get $1 + i32.const 64 + i32.div_s + i32.lt_s + if + global.get $assembly/common/wPtr + local.get $0 + local.get $2 + i32.add + call $assembly/common/hashBlocks + local.get $3 + i32.const 1 + i32.add + local.set $3 + local.get $2 + i32.const -64 + i32.sub + local.set $2 + br $for-loop|0 + end + end + local.get $1 + i32.const 63 + i32.and + local.tee $1 + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.get $0 + local.get $2 + i32.add + local.get $1 + memory.copy + global.get $assembly/common/mLength + local.get $1 + i32.add + global.set $assembly/common/mLength + end + ) + (func $assembly/common/final (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 63 + i32.lt_u + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + i32.const 128 + i32.store8 + global.get $assembly/common/mLength + i32.const 1 + i32.add + global.set $assembly/common/mLength + end + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 56 + i32.ge_u + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.tee $1 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.const 0 + i32.store8 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|0 + end + end + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + i32.const 0 + global.set $assembly/common/mLength + end + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 63 + i32.ge_u + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + i32.const 128 + i32.store8 + global.get $assembly/common/mLength + i32.const 1 + i32.add + global.set $assembly/common/mLength + end + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.tee $1 + i32.const 56 + global.get $assembly/common/mLength + i32.sub + i32.add + local.set $2 + loop $while-continue|1 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.const 0 + i32.store8 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|1 + end + end + global.get $assembly/common/mPtr + global.get $assembly/common/bytesHashed + i32.const 536870912 + i32.div_s + call $~lib/polyfills/bswap + i32.store offset=56 + global.get $assembly/common/mPtr + global.get $assembly/common/bytesHashed + i32.const 3 + i32.shl + call $~lib/polyfills/bswap + i32.store offset=60 + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + local.get $0 + global.get $assembly/common/H0 + call $~lib/polyfills/bswap + i32.store + local.get $0 + global.get $assembly/common/H1 + call $~lib/polyfills/bswap + i32.store offset=4 + local.get $0 + global.get $assembly/common/H2 + call $~lib/polyfills/bswap + i32.store offset=8 + local.get $0 + global.get $assembly/common/H3 + call $~lib/polyfills/bswap + i32.store offset=12 + local.get $0 + global.get $assembly/common/H4 + call $~lib/polyfills/bswap + i32.store offset=16 + local.get $0 + global.get $assembly/common/H5 + call $~lib/polyfills/bswap + i32.store offset=20 + local.get $0 + global.get $assembly/common/H6 + call $~lib/polyfills/bswap + i32.store offset=24 + local.get $0 + global.get $assembly/common/H7 + call $~lib/polyfills/bswap + i32.store offset=28 + ) + (func $assembly/common/digest (param $0 i32) + call $assembly/common/init + global.get $assembly/common/inputPtr + local.get $0 + call $assembly/common/update + global.get $assembly/common/outputPtr + call $assembly/common/final + ) + (func $assembly/common/hashPreCompW (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h + i32.const 0 + global.set $assembly/common/i + loop $for-loop|0 + global.get $assembly/common/i + i32.const 64 + i32.lt_u + if + local.get $0 + global.get $assembly/common/i + i32.const 2 + i32.shl + i32.add + i32.load + global.get $assembly/common/h + global.get $assembly/common/e + local.tee $1 + i32.const 6 + i32.rotr + local.get $1 + i32.const 11 + i32.rotr + i32.xor + local.get $1 + i32.const 25 + i32.rotr + i32.xor + i32.add + global.get $assembly/common/e + local.tee $1 + global.get $assembly/common/f + i32.and + global.get $assembly/common/g + local.get $1 + i32.const -1 + i32.xor + i32.and + i32.xor + i32.add + i32.add + global.set $assembly/common/t1 + global.get $assembly/common/a + local.tee $1 + i32.const 2 + i32.rotr + local.get $1 + i32.const 13 + i32.rotr + i32.xor + local.get $1 + i32.const 22 + i32.rotr + i32.xor + global.get $assembly/common/b + local.tee $2 + global.get $assembly/common/c + local.tee $1 + i32.and + local.get $2 + global.get $assembly/common/a + local.tee $2 + i32.and + local.get $1 + local.get $2 + i32.and + i32.xor + i32.xor + i32.add + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|0 + end + end + global.get $assembly/common/H0 + global.get $assembly/common/a + i32.add + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b + i32.add + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c + i32.add + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d + i32.add + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e + i32.add + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f + i32.add + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g + i32.add + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h + i32.add + global.set $assembly/common/H7 + ) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) + call $assembly/common/init + global.get $assembly/common/wPtr + local.get $0 + call $assembly/common/hashBlocks + global.get $assembly/common/w64Ptr + call $assembly/common/hashPreCompW + local.get $1 + global.get $assembly/common/H0 + call $~lib/polyfills/bswap + i32.store + local.get $1 + global.get $assembly/common/H1 + call $~lib/polyfills/bswap + i32.store offset=4 + local.get $1 + global.get $assembly/common/H2 + call $~lib/polyfills/bswap + i32.store offset=8 + local.get $1 + global.get $assembly/common/H3 + call $~lib/polyfills/bswap + i32.store offset=12 + local.get $1 + global.get $assembly/common/H4 + call $~lib/polyfills/bswap + i32.store offset=16 + local.get $1 + global.get $assembly/common/H5 + call $~lib/polyfills/bswap + i32.store offset=20 + local.get $1 + global.get $assembly/common/H6 + call $~lib/polyfills/bswap + i32.store offset=24 + local.get $1 + global.get $assembly/common/H7 + call $~lib/polyfills/bswap + i32.store offset=28 + ) + (func $~start + call $start:assembly/simd + i32.const 1348 + i32.load + global.set $assembly/common/kPtr + i32.const 1684 + i32.load + global.set $assembly/common/w64Ptr + i32.const 64 + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/M + global.get $assembly/common/M + global.set $assembly/common/mPtr + i32.const 1024 + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/W + global.get $assembly/common/W + global.set $assembly/common/wPtr + i32.const 512 + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/input + global.get $assembly/common/input + global.set $assembly/common/inputPtr + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/output + global.get $assembly/common/output + global.set $assembly/common/outputPtr + ) +) diff --git a/packages/as-sha256/build/optimized.wasm b/packages/as-sha256/build/optimized.wasm index b32aefc7233fad0b51068758da29d4b5e90cf2da..6dc43fb183f18a6214bea489d181d3675f050fe4 100644 GIT binary patch delta 1746 zcmcgtPiS047@vRd?c1HVyOZ5b(xjVY-up%f9*cya!tMyAsfH?2du=L>B@>f$yBkQg z@B%^cAgHW@dJqo*@eiWpq#oLX2SE?^RuEArD2NB~oDjd+&C?(iJ-O_@`F->K=9_PR z^Ly;>4!x;g9V^m|EU_%3*=sWz8g=47A?2J3LMUU5h=5Z#BPheWjp;PHv4qp zLNPvj?un<)UtBzW?#%fGPJ)&7tD8MO6>enlAX!_BLgFZGs5Ie2De{nE3f z8eU$xvfS+v6%E1M1EdzNEw61{yUs{N>oKjBZjaUXHuyy$-e;8e??hACuZM?+{4vqC zpH%E`6?;JJv?4^p*lE#jk(61oC^AbmTWu3d76MD8XcK9-l_iSWcbk^XF~ZxL+VQi( z53Gkt=ck1w3Bwe#YM2r|&D=4` zxO3e^_QSnb_Ngh_x8C0QAuuINOoG2u-sO~Lz>Nf9VhBtbLQ{c)sX}BF6wL^fObwZp zI&VXLs1Jd9|EpT7T}K@ZUKi@1%rJk8cma`s;<>@7Rz1Y?45GsEsDGwDL+kx3^&~r1 zirk}AN(U7v3`VFy73B!G@FwI|7oQVbUFYXObzlVJtlQ~2)UE*%iOdtr1LD|L7h>d< zQ`XVcXK~Oh>vX%$jKYYifxOW$M0px8>QJe_ngtHh84dzsX9NUL zb|!!jD$ayZfT}YEh(I|LK@morDMATq&XnZGl(Gy`jRK~Sh^%dI5lB{3bi<-(!z3iA zo@Vt-!iTRZ8?UdJGq=EnwBAFX>dQxi>I+ z&9+yMERCdAC#A=>cKUd&{(YnAsT4W3g%>>7&2G~NeRtjjiG)FN{_&$Es_y&ke?6*C z{n_Oasg;xdR>2<{*Ub-?Ws_KP8$WDKRp!_{?wMNN^Z4Q6!8HNyL+>o%fj|&=5FrRX zh!GS#PzWLq8VHIWoIp_WpeZXvNto6|l|iejJQ&vMdB;zm?)%u=Ju^Lzea!5u=bqjd`%31Nr~YxxF)( zH73EtrD}J!@BQ`Z?(_KioUi-)pL0d`V2>k&a28~`B4@1>enQ@9%K8<@@rEL2 zu@w56{=BP8avSzt?Hx_&`TEq$FTdkCi&CNMM=4+`@FIr*^#=hn*<3R(3_HH-ULZ^_Zux zjod5ynRVo@m0sl969nseZ6vSk4;>%>9+FPVwt%N&!9z3vZtL$76)KW{{xQW!fd*+p!@n!ZYxe*EXzT@n!64U3_y_F2xUt?~Xr^8O>ft$u2 z&Rc~FV8CE7n$C;+XKoU1j_r@vVvyN$n33u7xJAT2-gvPU}T5R`*GzvasT9ATCy$<2)(dpK9 z5SnWbB~Bzcp$mtcLaQ5?K1!5CX8!Zm#6Z}Kn@}NCHY|kGU|Ecp0MB5+@fy8aFQpN1zzK7C z42Vda^3l=!CHSBn1KbZi9O}_fzaaE^_GA=@?qd3}@E>waABGimrJ>Ge7Iv7-KdPN# z-kFU)o9jfAQONM$h)(U2p3QXf>jz>R2A8f}|GG|{W*1q!mRjb#m zUAKP2#!Z`Fcfpo7(BaAn-xI->1jFEh1f$?}3AP8D6YK~!CAcHlm|$11A;G?2eS#$? zSeNjy6Rb_R>;!8P9&v)z30It8Rl=iAaDKvLPOviJaVKa`xFmzNgokCYBH^+OmM1(S zgJlUEg_uaTvfAPm(zVCf; zUcY?T7j8_&O5gO2Tc5rvj`jVY{m3aNUZ6kr@$3FE6))5x-iU3J|9uy4Z)$$LNJa5t z)fz8R`S?7g;-xB%m#GEua|cs`xD=n zOe$W{2h6UtyV>FZ0x(|h6yi4H(ZXuZ6~WhAn>F6DSk|HHd!X6Nykbu#dw8*|KgQ7G z*dRW0M+fb-byJRKc)Y=c`C9F2s>)RZ9wStIDhM3UOX3wX_i9 z#;Ik6I93bP@?KfzM_whKwJ2Nim;VbAGW?2Xu@M6sH z1bw0d$_ei|&e_87bh2dhq$yeXely>oOD|n_tY2rZ1it+KQyJi~0sj_;Txt_C&|A=9 zOigsj*~ogZQ*HF^!Sx6(%t71_(*lG=s2^<4ZiZ+CSKtdZb6BOx##OK1l3f35nbTIt zay@MFTXI~5ij?qA_JmDq<$6?RlXi>b&9<~isQKJQTUA6r1fW_8SwNluu|O$82#5)Y z;M4-bEWkp-9KTkC^=ciwM5EdePWLCw&HnF>=&9ZQf7021Q(u?p>*(YXeVtwY|G%%l zgVsRj3meqDa3%&_)yPg_WG6AQlNi}ajO-*vb`m2yiIFQgDX&J?6LD5K@iZmloN{Ad zd2ygpag9pHwJH^?IUB+`i5BMFS0B=KKt-9r+y&lls~7?i-7z%+ zBDy2C0}gm>f-GQvA@g^ciy zJW57*M;;?1yd#g35#EtY5{&SUJWNJ-M=p~Q-jPSh2=B-hGQvCZC>h}$d5nzkjyz6A zctJ95bbBfKLIlM&vL z%VdOi z@5rNMgm>gIGQvCZI2qv`xs(PYydw{j5#Eu@WQ2F*5i-I%a)pfWjyy`nvxq!KMtDaa zCnLNgmoi|4cjRF*f-!QLjPQ;;LPmH;u8zI4oaz~LaFkRzf>f^Z39j-~ zK=4!wJ`0diX*exFT4hunA>)5?gYlpf!TujkD@@&DF%cYpaR0+ow-_^+11}!gJavoZ zM6mH+JMW&l#qLBfbV=>bsaxz#1UDT>-9B}TQxn1c-@0!8)Gba=1kGO?yKL$fXU>27e?F{wHouPjI8R{3Dp?)=Is9)_F>SvxXvSZ3Kra^~Wy{qwX>iGTs;gR6I`bWYW zp?6@In5O{2D0~E??-7i;M=+s2!6eUpCegyj#M$)9LXwkq%ot*k*q35vYH&pDsm*N$C0cW zN3vQR$trOqtHY733P-XbIms$;q_WZ9NLGC#RgCsVvdSB2%;;_;tGbb_=0>uL8_DWz zB&)WOtky;vHA)-F>TD#aY^k$h0BMOC=5u2RuSn*eof|{1tucftvUMqB3GXgl}Bdd)tu@K$|RjH0@8qv+fydd-d^JhL+P8P%LTvl{Gv z?c_7dHP5WGWx!!|+PRlR>S*U)60HqhQ-KynksmigUa<;{G%Gnk>C}&&TK{?xE7v*e=eU!5;Ld}4jZ5et7mYe3Gn3}pjywq@ZqZTh%XJxn^(4#?Ry9eM}kY|BtQAZJ^K<^eg|GE@)9*_NSuK+d)doIomRn63E$>p_M?+whXlda<*mYC0tu%@2^>{WEq+X6reK^cQ4Ie@XfaGN!*I{RJ7*Uy}ZUjOi~)e?i9dm!!WSmr`K(3o@p^B>e@s zOvdyV8Pi{q{(@W~WBQAX=`TrtK^`N+Uyw2VCFw87nEsOV7i3I-N%{*iroSZp1sT&{ zlKz5>=`TrtLB{l#q`x3z`b*MZkTLxw=`YBb{*v?;WK4fa`U^6qza*!>$e8|;^cQ4I ze@XfaGN!*I{RJ7*Uy}ZUjOj0~0pavlD)ASmr@ydB1aAkb5g%p_OxigxsjG8fQkyw2 zs!G;TL{ghMFse#61#@5$b6_s!z%Wadmu3!(`JNSXU}1CQC^0cxaN!2lpD3rwSoE%B zm9t>C%J@}<@~RwyQ&nyPr>i^*oT>60F!Fbpe*{MUhGQ`DH@p~({0%PyBY(r~VB~Lj zH5mCDUJpk8hBrqJmhrF%Ii(4P--y#tgyF4V6k&Kf7)2P~0Y(vqF9o9r!|w#62*a0y zk-y9QyTE9I;XPpFZ}sCep)?MoqYYe z#E%VLvCs`GudvL`EE1AfQQ~kp8b0}h9Rg9bB|WOp(rw^}FW)cz`RnzBrdt8ZHT{aC4W+MZ^aQPrSojj@3-CF>SVsWGiR zrR`{DvYXWSKb5mZgrWYc92V-ubM;4S_&pEHZ}7W_^VRwBD*F?O)oOLT20yGs>RPon zUZ*3_dbK{@;QJp677Be+)|Yb}p>NCjH%dp~A3knt`=i(2{Kj?tU;p>YLwA4Yq314p z^c@?XuYdkscYR>XEl>TyocnLPFY~l>*>w#kj<1Zr@`u6Oi|;ux@X}|#Te>Ix%cr1vjb(sVrc7mL=n&R%hS}9Nux)zuo!E6E7U=KPmJBIp0|(^yhQ_bo|sd!^wX z{a+jIMPs-pXG&+zFLeLv#$V33War5jdfxrvd-tAd z9(nAJZ++n_D;qvu{&DS(ma5N8j9jqhv8TRxu>HL~fAZHKsjqwY#LwnE^TE%p$$9Vd zzx&B2e*VrGm%ZnEH(W3zN*~OwJO9U-yVu=%e{a~`G4uIv-c-}G>AtV6JMnPk+nc(t z+kNNO@2q@I`uAM^jov4I)pE(o>sPJ3wdL=Q3?F+#&kHwy;wyi7|C4w8u>AN#n?Kj~ zwv+m?zrFKXl{s+Ht#=)r+q@mWh6;?~ZmgL!Twh8EZdJoQP-9J7<12~8IoP&|BjTv& z7Kg<_u?On{4~xA>*)NLX01S=uH{<6`HU4s*zYyEC=FDB94c83duUlLtc8M#*KK$*) z{t8?&F*c1W4~t&08`l(3S})3pK)v{5xy)}r^3c!NYoD$47x3D7 zuPAi@SF~ZupY~1BkUi;^?Q*!?Qsy>KIGMloFmlF_9FbS5cOGxz5O`C^Yl$krZu\98m\c61\a8\c8\'\03\b0\c7\7fY\bf\f3\0b\e0\c6G\91\a7\d5Qc\ca\06g))\14\85\n\b7\'8!\1b.\fcm,M\13\r8STs\ne\bb\njv.\c9\c2\81\85,r\92\a1\e8\bf\a2Kf\1a\a8p\8bK\c2\a3Ql\c7\19\e8\92\d1$\06\99\d6\855\0e\f4p\a0j\10\16\c1\a4\19\08l7\1eLwH\'\b5\bc\b04\b3\0c\1c9J\aa\d8NO\ca\9c[\f3o.h\ee\82\8ftoc\a5x\14x\c8\84\08\02\c7\8c\fa\ff\be\90\eblP\a4\f7\a3\f9\be\f2xq\c6") @@ -86,37 +61,14 @@ (data $7.1 (i32.const 1896) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00c\00m\00s\00.\00t\00s") (data $8 (i32.const 1948) "<") (data $8.1 (i32.const 1960) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") - (data $10 (i32.const 2044) "<") - (data $10.1 (i32.const 2056) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (data $11 (i32.const 2108) ",") - (data $11.1 (i32.const 2120) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data $12 (i32.const 2156) "|") - (data $12.1 (i32.const 2168) "\02\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data $13 (i32.const 2284) "<") - (data $13.1 (i32.const 2296) "\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data $14 (i32.const 2348) "\1c") - (data $14.1 (i32.const 2360) "\02\00\00\00\02\00\00\000") - (data $15 (i32.const 2380) "\\") - (data $15.1 (i32.const 2392) "\02\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") - (data $16 (i32.const 2476) "\\") - (data $16.1 (i32.const 2488) "\02\00\00\00H\00\00\00s\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 ") - (data $17 (i32.const 2572) "\1c") - (data $17.1 (i32.const 2584) "\02") - (data $18 (i32.const 2604) "<") - (data $18.1 (i32.const 2616) "\02\00\00\00,\00\00\00a\00s\00s\00e\00m\00b\00l\00y\00/\00u\00t\00i\00l\00s\00/\00v\001\002\008\00.\00t\00s") - (data $19 (i32.const 2668) "\\") - (data $19.1 (i32.const 2680) "\02\00\00\00H\00\00\00g\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 ") - (export "PARALLEL_FACTOR" (global $assembly/index/PARALLEL_FACTOR)) - (export "INPUT_LENGTH" (global $assembly/index/INPUT_LENGTH)) - (export "input" (global $assembly/index/input)) - (export "output" (global $assembly/index/output)) - (export "init" (func $assembly/index/init)) - (export "update" (func $assembly/index/update)) - (export "final" (func $assembly/index/final)) - (export "digest" (func $assembly/index/digest)) - (export "digest64" (func $assembly/index/digest64)) - (export "batchHash4UintArray64s" (func $assembly/index/batchHash4UintArray64s)) - (export "batchHash4HashObjectInputs" (func $assembly/index/batchHash4HashObjectInputs)) + (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) + (export "input" (global $assembly/common/input)) + (export "output" (global $assembly/common/output)) + (export "init" (func $assembly/common/init)) + (export "update" (func $assembly/common/update)) + (export "final" (func $assembly/common/final)) + (export "digest" (func $assembly/common/digest)) + (export "digest64" (func $assembly/common/digest64)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/tlsf/Root#set:flMap (param $0 i32) (param $1 i32) @@ -748,10 +700,22 @@ end local.get $2 ) - (func $~lib/rt/tcms/__new (param $0 i32) (param $1 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 1728 + i32.const 1776 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 1073741804 i32.gt_u if @@ -766,12 +730,12 @@ i32.eqz if memory.size - local.tee $3 + local.tee $2 i32.const 0 i32.le_s if (result i32) i32.const 1 - local.get $3 + local.get $2 i32.sub memory.grow i32.const 0 @@ -782,64 +746,64 @@ if unreachable end - i32.const 2768 + i32.const 2048 i32.const 0 call $~lib/rt/tlsf/Root#set:flMap - i32.const 4336 + i32.const 3616 i32.const 0 i32.store loop $for-loop|0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u if - local.get $2 + local.get $1 i32.const 2 i32.shl - i32.const 2768 + i32.const 2048 i32.add i32.const 0 i32.store offset=4 i32.const 0 - local.set $3 + local.set $2 loop $for-loop|1 - local.get $3 + local.get $2 i32.const 16 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shl - local.get $3 + local.get $2 i32.add i32.const 2 i32.shl - i32.const 2768 + i32.const 2048 i32.add i32.const 0 i32.store offset=96 - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|1 end end - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|0 end end - i32.const 2768 - i32.const 4340 + i32.const 2048 + i32.const 3620 memory.size i64.extend_i32_s i64.const 16 i64.shl call $~lib/rt/tlsf/addMemory - i32.const 2768 + i32.const 2048 global.set $~lib/rt/tlsf/ROOT end global.get $~lib/rt/tlsf/ROOT @@ -848,17 +812,17 @@ i32.add call $~lib/rt/tlsf/allocateBlock local.tee $2 - local.get $1 + i32.const 1 i32.store offset=12 local.get $2 local.get $0 i32.store offset=16 global.get $~lib/rt/tcms/fromSpace - local.tee $0 + local.tee $3 i32.load offset=8 local.set $1 local.get $2 - local.get $0 + local.get $3 call $~lib/rt/tlsf/Block#set:prev local.get $2 local.get $1 @@ -871,7 +835,7 @@ i32.and i32.or call $~lib/rt/tlsf/Block#set:prev - local.get $0 + local.get $3 local.get $2 call $~lib/rt/tlsf/Block#set:next global.get $~lib/rt/tcms/total @@ -886,1094 +850,61 @@ local.get $2 i32.const 20 i32.add - ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32) - (local $1 i32) - local.get $0 - i32.const 1073741820 - i32.gt_u - if - i32.const 1728 - i32.const 1776 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - call $~lib/rt/tcms/__new local.tee $1 i32.const 0 local.get $0 memory.fill local.get $1 ) - (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u - if - i32.const 2064 - i32.const 2128 - i32.const 114 - i32.const 42 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - local.get $1 - i32.const 2 - i32.shl - i32.add - i32.load - ) - (func $~lib/util/number/itoa32 (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.eqz - if - i32.const 2368 - return - end - i32.const 0 - local.get $0 - i32.sub - local.get $0 - local.get $0 - i32.const 31 - i32.shr_u - i32.const 1 - i32.shl - local.tee $1 - select - local.tee $0 - i32.const 10 - i32.ge_u - i32.const 1 - i32.add - local.get $0 - i32.const 10000 - i32.ge_u - i32.const 3 - i32.add - local.get $0 - i32.const 1000 - i32.ge_u - i32.add - local.get $0 - i32.const 100 - i32.lt_u - select - local.get $0 - i32.const 1000000 - i32.ge_u - i32.const 6 - i32.add - local.get $0 - i32.const 1000000000 - i32.ge_u - i32.const 8 - i32.add - local.get $0 - i32.const 100000000 - i32.ge_u - i32.add - local.get $0 - i32.const 10000000 - i32.lt_u - select - local.get $0 - i32.const 100000 - i32.lt_u - select - local.tee $2 - i32.const 1 - i32.shl - local.get $1 - i32.add - i32.const 2 - call $~lib/rt/tcms/__new - local.tee $3 - local.get $1 - i32.add - local.set $4 - loop $do-loop|0 - local.get $4 - local.get $2 - i32.const 1 - i32.sub - local.tee $2 - i32.const 1 - i32.shl - i32.add - local.get $0 - i32.const 10 - i32.rem_u - i32.const 48 - i32.add - i32.store16 - local.get $0 - i32.const 10 - i32.div_u - local.tee $0 - br_if $do-loop|0 - end - local.get $1 - if - local.get $3 - i32.const 45 - i32.store16 - end - local.get $3 - ) - (func $~lib/string/String#get:length (param $0 i32) (result i32) - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 1 - i32.shr_u - ) - (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.tee $2 - local.get $1 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.tee $3 - i32.add - local.tee $4 - i32.eqz - if - i32.const 2592 - return - end - local.get $4 - i32.const 2 - call $~lib/rt/tcms/__new - local.tee $4 - local.get $0 - local.get $2 - memory.copy - local.get $2 - local.get $4 - i32.add - local.get $1 - local.get $3 - memory.copy - local.get $4 - ) - (func $start:assembly/simd - (local $0 i32) - (local $1 v128) - (local $2 i32) - i32.const 2016 - i32.const 2016 - call $~lib/rt/tlsf/Block#set:prev - i32.const 2016 - i32.const 2016 - call $~lib/rt/tlsf/Block#set:next - i32.const 2016 - global.set $~lib/rt/tcms/fromSpace - i32.const 1024 - call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/simd/kV128ArrayBuffer - global.get $assembly/simd/kV128ArrayBuffer - global.set $assembly/simd/kV128Ptr - block $folding-inner0 - loop $for-loop|0 - local.get $0 - i32.const 64 - i32.lt_s - if - global.get $assembly/simd/kV128Ptr - local.set $2 - i32.const 1344 - local.get $0 - call $~lib/array/Array#__get - i32x4.splat - local.set $1 - block $break|1 - block $case63|1 - block $case62|1 - block $case61|1 - block $case60|1 - block $case59|1 - block $case58|1 - block $case57|1 - block $case56|1 - block $case55|1 - block $case54|1 - block $case53|1 - block $case52|1 - block $case51|1 - block $case50|1 - block $case49|1 - block $case48|1 - block $case47|1 - block $case46|1 - block $case45|1 - block $case44|1 - block $case43|1 - block $case42|1 - block $case41|1 - block $case40|1 - block $case39|1 - block $case38|1 - block $case37|1 - block $case36|1 - block $case35|1 - block $case34|1 - block $case33|1 - block $case32|1 - block $case31|1 - block $case30|1 - block $case29|1 - block $case28|1 - block $case27|1 - block $case26|1 - block $case25|1 - block $case24|1 - block $case23|1 - block $case22|1 - block $case21|1 - block $case20|1 - block $case19|1 - block $case18|1 - block $case17|1 - block $case16|1 - block $case15|1 - block $case14|1 - block $case13|1 - block $case12|1 - block $case11|1 - block $case10|1 - block $case9|1 - block $case8|1 - block $case7|1 - block $case6|1 - block $case5|1 - block $case4|1 - block $case3|1 - block $case2|1 - block $case1|1 - block $case0|1 - local.get $0 - br_table $case0|1 $case1|1 $case2|1 $case3|1 $case4|1 $case5|1 $case6|1 $case7|1 $case8|1 $case9|1 $case10|1 $case11|1 $case12|1 $case13|1 $case14|1 $case15|1 $case16|1 $case17|1 $case18|1 $case19|1 $case20|1 $case21|1 $case22|1 $case23|1 $case24|1 $case25|1 $case26|1 $case27|1 $case28|1 $case29|1 $case30|1 $case31|1 $case32|1 $case33|1 $case34|1 $case35|1 $case36|1 $case37|1 $case38|1 $case39|1 $case40|1 $case41|1 $case42|1 $case43|1 $case44|1 $case45|1 $case46|1 $case47|1 $case48|1 $case49|1 $case50|1 $case51|1 $case52|1 $case53|1 $case54|1 $case55|1 $case56|1 $case57|1 $case58|1 $case59|1 $case60|1 $case61|1 $case62|1 $case63|1 $folding-inner0 - end - local.get $2 - local.get $1 - v128.store - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=16 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=32 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=48 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=64 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=80 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=96 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=112 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=128 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=144 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=160 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=176 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=192 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=208 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=224 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=240 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=256 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=272 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=288 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=304 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=320 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=336 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=352 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=368 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=384 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=400 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=416 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=432 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=448 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=464 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=480 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=496 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=512 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=528 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=544 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=560 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=576 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=592 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=608 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=624 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=640 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=656 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=672 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=688 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=704 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=720 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=736 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=752 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=768 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=784 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=800 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=816 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=832 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=848 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=864 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=880 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=896 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=912 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=928 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=944 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=960 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=976 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=992 - br $break|1 - end - local.get $2 - local.get $1 - v128.store offset=1008 - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|0 - end - end - i32.const 1024 - call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/simd/w64V12ArrayBuffer - global.get $assembly/simd/w64V12ArrayBuffer - global.set $assembly/simd/w64V128Ptr - i32.const 0 - local.set $0 - loop $for-loop|2 - local.get $0 - i32.const 64 - i32.lt_s - if - global.get $assembly/simd/w64V128Ptr - local.set $2 - i32.const 1680 - local.get $0 - call $~lib/array/Array#__get - i32x4.splat - local.set $1 - block $break|3 - block $case63|3 - block $case62|3 - block $case61|3 - block $case60|3 - block $case59|3 - block $case58|3 - block $case57|3 - block $case56|3 - block $case55|3 - block $case54|3 - block $case53|3 - block $case52|3 - block $case51|3 - block $case50|3 - block $case49|3 - block $case48|3 - block $case47|3 - block $case46|3 - block $case45|3 - block $case44|3 - block $case43|3 - block $case42|3 - block $case41|3 - block $case40|3 - block $case39|3 - block $case38|3 - block $case37|3 - block $case36|3 - block $case35|3 - block $case34|3 - block $case33|3 - block $case32|3 - block $case31|3 - block $case30|3 - block $case29|3 - block $case28|3 - block $case27|3 - block $case26|3 - block $case25|3 - block $case24|3 - block $case23|3 - block $case22|3 - block $case21|3 - block $case20|3 - block $case19|3 - block $case18|3 - block $case17|3 - block $case16|3 - block $case15|3 - block $case14|3 - block $case13|3 - block $case12|3 - block $case11|3 - block $case10|3 - block $case9|3 - block $case8|3 - block $case7|3 - block $case6|3 - block $case5|3 - block $case4|3 - block $case3|3 - block $case2|3 - block $case1|3 - block $case0|3 - local.get $0 - br_table $case0|3 $case1|3 $case2|3 $case3|3 $case4|3 $case5|3 $case6|3 $case7|3 $case8|3 $case9|3 $case10|3 $case11|3 $case12|3 $case13|3 $case14|3 $case15|3 $case16|3 $case17|3 $case18|3 $case19|3 $case20|3 $case21|3 $case22|3 $case23|3 $case24|3 $case25|3 $case26|3 $case27|3 $case28|3 $case29|3 $case30|3 $case31|3 $case32|3 $case33|3 $case34|3 $case35|3 $case36|3 $case37|3 $case38|3 $case39|3 $case40|3 $case41|3 $case42|3 $case43|3 $case44|3 $case45|3 $case46|3 $case47|3 $case48|3 $case49|3 $case50|3 $case51|3 $case52|3 $case53|3 $case54|3 $case55|3 $case56|3 $case57|3 $case58|3 $case59|3 $case60|3 $case61|3 $case62|3 $case63|3 $folding-inner0 - end - local.get $2 - local.get $1 - v128.store - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=16 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=32 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=48 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=64 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=80 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=96 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=112 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=128 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=144 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=160 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=176 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=192 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=208 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=224 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=240 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=256 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=272 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=288 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=304 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=320 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=336 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=352 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=368 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=384 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=400 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=416 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=432 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=448 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=464 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=480 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=496 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=512 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=528 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=544 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=560 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=576 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=592 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=608 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=624 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=640 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=656 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=672 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=688 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=704 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=720 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=736 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=752 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=768 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=784 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=800 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=816 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=832 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=848 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=864 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=880 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=896 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=912 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=928 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=944 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=960 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=976 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=992 - br $break|3 - end - local.get $2 - local.get $1 - v128.store offset=1008 - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|2 - end - end - return - end - i32.const 2496 - local.get $0 - call $~lib/util/number/itoa32 - call $~lib/string/String#concat - i32.const 2624 - i32.const 201 - i32.const 7 - call $~lib/builtins/abort - unreachable - ) - (func $assembly/index/init + (func $assembly/common/init i32.const 1779033703 - global.set $assembly/index/H0 + global.set $assembly/common/H0 i32.const -1150833019 - global.set $assembly/index/H1 + global.set $assembly/common/H1 i32.const 1013904242 - global.set $assembly/index/H2 + global.set $assembly/common/H2 i32.const -1521486534 - global.set $assembly/index/H3 + global.set $assembly/common/H3 i32.const 1359893119 - global.set $assembly/index/H4 + global.set $assembly/common/H4 i32.const -1694144372 - global.set $assembly/index/H5 + global.set $assembly/common/H5 i32.const 528734635 - global.set $assembly/index/H6 + global.set $assembly/common/H6 i32.const 1541459225 - global.set $assembly/index/H7 + global.set $assembly/common/H7 i32.const 0 - global.set $assembly/index/mLength + global.set $assembly/common/mLength i32.const 0 - global.set $assembly/index/bytesHashed + global.set $assembly/common/bytesHashed ) - (func $assembly/index/hashBlocks (param $0 i32) (param $1 i32) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) (local $2 i32) - global.get $assembly/index/H0 - global.set $assembly/index/a - global.get $assembly/index/H1 - global.set $assembly/index/b - global.get $assembly/index/H2 - global.set $assembly/index/c - global.get $assembly/index/H3 - global.set $assembly/index/d - global.get $assembly/index/H4 - global.set $assembly/index/e - global.get $assembly/index/H5 - global.set $assembly/index/f - global.get $assembly/index/H6 - global.set $assembly/index/g - global.get $assembly/index/H7 - global.set $assembly/index/h + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h i32.const 0 - global.set $assembly/index/i + global.set $assembly/common/i loop $for-loop|0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 16 i32.lt_u if local.get $0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 2 i32.shl local.tee $2 @@ -2010,27 +941,27 @@ i32.or i32.or i32.store - global.get $assembly/index/i + global.get $assembly/common/i i32.const 1 i32.add - global.set $assembly/index/i + global.set $assembly/common/i br $for-loop|0 end end i32.const 16 - global.set $assembly/index/i + global.set $assembly/common/i loop $for-loop|1 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 64 i32.lt_u if local.get $0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 2 i32.shl i32.add local.get $0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 16 i32.sub i32.const 2 @@ -2038,7 +969,7 @@ i32.add i32.load local.get $0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 7 i32.sub i32.const 2 @@ -2046,7 +977,7 @@ i32.add i32.load local.get $0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 2 i32.sub i32.const 2 @@ -2066,7 +997,7 @@ i32.xor i32.add local.get $0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 15 i32.sub i32.const 2 @@ -2087,33 +1018,33 @@ i32.add i32.add i32.store - global.get $assembly/index/i + global.get $assembly/common/i i32.const 1 i32.add - global.set $assembly/index/i + global.set $assembly/common/i br $for-loop|1 end end i32.const 0 - global.set $assembly/index/i + global.set $assembly/common/i loop $for-loop|2 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 64 i32.lt_u if local.get $0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 2 i32.shl local.tee $1 i32.add i32.load local.get $1 - global.get $assembly/index/kPtr + global.get $assembly/common/kPtr i32.add i32.load - global.get $assembly/index/h - global.get $assembly/index/e + global.get $assembly/common/h + global.get $assembly/common/e local.tee $1 i32.const 6 i32.rotr @@ -2126,11 +1057,11 @@ i32.rotr i32.xor i32.add - global.get $assembly/index/e + global.get $assembly/common/e local.tee $1 - global.get $assembly/index/f + global.get $assembly/common/f i32.and - global.get $assembly/index/g + global.get $assembly/common/g local.get $1 i32.const -1 i32.xor @@ -2139,8 +1070,8 @@ i32.add i32.add i32.add - global.set $assembly/index/t1 - global.get $assembly/index/a + global.set $assembly/common/t1 + global.get $assembly/common/a local.tee $1 i32.const 2 i32.rotr @@ -2152,13 +1083,13 @@ i32.const 22 i32.rotr i32.xor - global.get $assembly/index/b + global.get $assembly/common/b local.tee $1 - global.get $assembly/index/c + global.get $assembly/common/c local.tee $2 i32.and local.get $1 - global.get $assembly/index/a + global.get $assembly/common/a local.tee $1 i32.and local.get $1 @@ -2167,119 +1098,119 @@ i32.xor i32.xor i32.add - global.set $assembly/index/t2 - global.get $assembly/index/g - global.set $assembly/index/h - global.get $assembly/index/f - global.set $assembly/index/g - global.get $assembly/index/e - global.set $assembly/index/f - global.get $assembly/index/d - global.get $assembly/index/t1 - i32.add - global.set $assembly/index/e - global.get $assembly/index/c - global.set $assembly/index/d - global.get $assembly/index/b - global.set $assembly/index/c - global.get $assembly/index/a - global.set $assembly/index/b - global.get $assembly/index/t1 - global.get $assembly/index/t2 - i32.add - global.set $assembly/index/a - global.get $assembly/index/i + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i i32.const 1 i32.add - global.set $assembly/index/i + global.set $assembly/common/i br $for-loop|2 end end - global.get $assembly/index/H0 - global.get $assembly/index/a + global.get $assembly/common/H0 + global.get $assembly/common/a i32.add - global.set $assembly/index/H0 - global.get $assembly/index/H1 - global.get $assembly/index/b + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b i32.add - global.set $assembly/index/H1 - global.get $assembly/index/H2 - global.get $assembly/index/c + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c i32.add - global.set $assembly/index/H2 - global.get $assembly/index/H3 - global.get $assembly/index/d + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d i32.add - global.set $assembly/index/H3 - global.get $assembly/index/H4 - global.get $assembly/index/e + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e i32.add - global.set $assembly/index/H4 - global.get $assembly/index/H5 - global.get $assembly/index/f + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f i32.add - global.set $assembly/index/H5 - global.get $assembly/index/H6 - global.get $assembly/index/g + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g i32.add - global.set $assembly/index/H6 - global.get $assembly/index/H7 - global.get $assembly/index/h + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h i32.add - global.set $assembly/index/H7 + global.set $assembly/common/H7 ) - (func $assembly/index/update (param $0 i32) (param $1 i32) + (func $assembly/common/update (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) - global.get $assembly/index/bytesHashed + global.get $assembly/common/bytesHashed local.get $1 i32.add - global.set $assembly/index/bytesHashed - global.get $assembly/index/mLength + global.set $assembly/common/bytesHashed + global.get $assembly/common/mLength if i32.const 64 - global.get $assembly/index/mLength + global.get $assembly/common/mLength i32.sub local.tee $2 local.get $1 i32.le_s if - global.get $assembly/index/mPtr - global.get $assembly/index/mLength + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add local.get $0 local.get $2 memory.copy - global.get $assembly/index/mLength + global.get $assembly/common/mLength local.get $2 i32.add - global.set $assembly/index/mLength + global.set $assembly/common/mLength i32.const 64 - global.get $assembly/index/mLength + global.get $assembly/common/mLength i32.sub local.set $2 local.get $1 i32.const 64 - global.get $assembly/index/mLength + global.get $assembly/common/mLength i32.sub i32.sub local.set $1 - global.get $assembly/index/wPtr - global.get $assembly/index/mPtr - call $assembly/index/hashBlocks + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks i32.const 0 - global.set $assembly/index/mLength + global.set $assembly/common/mLength else - global.get $assembly/index/mPtr - global.get $assembly/index/mLength + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add local.get $0 local.get $1 memory.copy - global.get $assembly/index/mLength + global.get $assembly/common/mLength local.get $1 i32.add - global.set $assembly/index/mLength + global.set $assembly/common/mLength return end end @@ -2290,11 +1221,11 @@ i32.div_s i32.lt_s if - global.get $assembly/index/wPtr + global.get $assembly/common/wPtr local.get $0 local.get $2 i32.add - call $assembly/index/hashBlocks + call $assembly/common/hashBlocks local.get $3 i32.const 1 i32.add @@ -2311,18 +1242,18 @@ i32.and local.tee $1 if - global.get $assembly/index/mPtr - global.get $assembly/index/mLength + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add local.get $0 local.get $2 i32.add local.get $1 memory.copy - global.get $assembly/index/mLength + global.get $assembly/common/mLength local.get $1 i32.add - global.set $assembly/index/mLength + global.set $assembly/common/mLength end ) (func $~lib/polyfills/bswap (param $0 i32) (result i32) @@ -2338,37 +1269,37 @@ i32.rotr i32.or ) - (func $assembly/index/final (param $0 i32) + (func $assembly/common/final (param $0 i32) (local $1 i32) (local $2 i32) - global.get $assembly/index/bytesHashed + global.get $assembly/common/bytesHashed i32.const 63 i32.and i32.const 63 i32.lt_u if - global.get $assembly/index/mPtr - global.get $assembly/index/mLength + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add i32.const 128 i32.store8 - global.get $assembly/index/mLength + global.get $assembly/common/mLength i32.const 1 i32.add - global.set $assembly/index/mLength + global.set $assembly/common/mLength end - global.get $assembly/index/bytesHashed + global.get $assembly/common/bytesHashed i32.const 63 i32.and i32.const 56 i32.ge_u if - global.get $assembly/index/mPtr - global.get $assembly/index/mLength + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add local.tee $1 i32.const 64 - global.get $assembly/index/mLength + global.get $assembly/common/mLength i32.sub i32.add local.set $2 @@ -2387,34 +1318,34 @@ br $while-continue|0 end end - global.get $assembly/index/wPtr - global.get $assembly/index/mPtr - call $assembly/index/hashBlocks + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks i32.const 0 - global.set $assembly/index/mLength + global.set $assembly/common/mLength end - global.get $assembly/index/bytesHashed + global.get $assembly/common/bytesHashed i32.const 63 i32.and i32.const 63 i32.ge_u if - global.get $assembly/index/mPtr - global.get $assembly/index/mLength + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add i32.const 128 i32.store8 - global.get $assembly/index/mLength + global.get $assembly/common/mLength i32.const 1 i32.add - global.set $assembly/index/mLength + global.set $assembly/common/mLength end - global.get $assembly/index/mPtr - global.get $assembly/index/mLength + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add local.tee $1 i32.const 56 - global.get $assembly/index/mLength + global.get $assembly/common/mLength i32.sub i32.add local.set $2 @@ -2433,96 +1364,96 @@ br $while-continue|1 end end - global.get $assembly/index/mPtr - global.get $assembly/index/bytesHashed + global.get $assembly/common/mPtr + global.get $assembly/common/bytesHashed i32.const 536870912 i32.div_s call $~lib/polyfills/bswap i32.store offset=56 - global.get $assembly/index/mPtr - global.get $assembly/index/bytesHashed + global.get $assembly/common/mPtr + global.get $assembly/common/bytesHashed i32.const 3 i32.shl call $~lib/polyfills/bswap i32.store offset=60 - global.get $assembly/index/wPtr - global.get $assembly/index/mPtr - call $assembly/index/hashBlocks + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks local.get $0 - global.get $assembly/index/H0 + global.get $assembly/common/H0 call $~lib/polyfills/bswap i32.store local.get $0 - global.get $assembly/index/H1 + global.get $assembly/common/H1 call $~lib/polyfills/bswap i32.store offset=4 local.get $0 - global.get $assembly/index/H2 + global.get $assembly/common/H2 call $~lib/polyfills/bswap i32.store offset=8 local.get $0 - global.get $assembly/index/H3 + global.get $assembly/common/H3 call $~lib/polyfills/bswap i32.store offset=12 local.get $0 - global.get $assembly/index/H4 + global.get $assembly/common/H4 call $~lib/polyfills/bswap i32.store offset=16 local.get $0 - global.get $assembly/index/H5 + global.get $assembly/common/H5 call $~lib/polyfills/bswap i32.store offset=20 local.get $0 - global.get $assembly/index/H6 + global.get $assembly/common/H6 call $~lib/polyfills/bswap i32.store offset=24 local.get $0 - global.get $assembly/index/H7 + global.get $assembly/common/H7 call $~lib/polyfills/bswap i32.store offset=28 ) - (func $assembly/index/digest (param $0 i32) - call $assembly/index/init - global.get $assembly/index/inputPtr + (func $assembly/common/digest (param $0 i32) + call $assembly/common/init + global.get $assembly/common/inputPtr local.get $0 - call $assembly/index/update - global.get $assembly/index/outputPtr - call $assembly/index/final + call $assembly/common/update + global.get $assembly/common/outputPtr + call $assembly/common/final ) - (func $assembly/index/hashPreCompW (param $0 i32) + (func $assembly/common/hashPreCompW (param $0 i32) (local $1 i32) (local $2 i32) - global.get $assembly/index/H0 - global.set $assembly/index/a - global.get $assembly/index/H1 - global.set $assembly/index/b - global.get $assembly/index/H2 - global.set $assembly/index/c - global.get $assembly/index/H3 - global.set $assembly/index/d - global.get $assembly/index/H4 - global.set $assembly/index/e - global.get $assembly/index/H5 - global.set $assembly/index/f - global.get $assembly/index/H6 - global.set $assembly/index/g - global.get $assembly/index/H7 - global.set $assembly/index/h + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h i32.const 0 - global.set $assembly/index/i + global.set $assembly/common/i loop $for-loop|0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 64 i32.lt_u if local.get $0 - global.get $assembly/index/i + global.get $assembly/common/i i32.const 2 i32.shl i32.add i32.load - global.get $assembly/index/h - global.get $assembly/index/e + global.get $assembly/common/h + global.get $assembly/common/e local.tee $1 i32.const 6 i32.rotr @@ -2535,11 +1466,11 @@ i32.rotr i32.xor i32.add - global.get $assembly/index/e + global.get $assembly/common/e local.tee $1 - global.get $assembly/index/f + global.get $assembly/common/f i32.and - global.get $assembly/index/g + global.get $assembly/common/g local.get $1 i32.const -1 i32.xor @@ -2547,8 +1478,8 @@ i32.xor i32.add i32.add - global.set $assembly/index/t1 - global.get $assembly/index/a + global.set $assembly/common/t1 + global.get $assembly/common/a local.tee $1 i32.const 2 i32.rotr @@ -2560,13 +1491,13 @@ i32.const 22 i32.rotr i32.xor - global.get $assembly/index/b + global.get $assembly/common/b local.tee $2 - global.get $assembly/index/c + global.get $assembly/common/c local.tee $1 i32.and local.get $2 - global.get $assembly/index/a + global.get $assembly/common/a local.tee $2 i32.and local.get $1 @@ -2575,3809 +1506,141 @@ i32.xor i32.xor i32.add - global.set $assembly/index/t2 - global.get $assembly/index/g - global.set $assembly/index/h - global.get $assembly/index/f - global.set $assembly/index/g - global.get $assembly/index/e - global.set $assembly/index/f - global.get $assembly/index/d - global.get $assembly/index/t1 - i32.add - global.set $assembly/index/e - global.get $assembly/index/c - global.set $assembly/index/d - global.get $assembly/index/b - global.set $assembly/index/c - global.get $assembly/index/a - global.set $assembly/index/b - global.get $assembly/index/t1 - global.get $assembly/index/t2 - i32.add - global.set $assembly/index/a - global.get $assembly/index/i + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i i32.const 1 i32.add - global.set $assembly/index/i + global.set $assembly/common/i br $for-loop|0 end end - global.get $assembly/index/H0 - global.get $assembly/index/a + global.get $assembly/common/H0 + global.get $assembly/common/a i32.add - global.set $assembly/index/H0 - global.get $assembly/index/H1 - global.get $assembly/index/b + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b i32.add - global.set $assembly/index/H1 - global.get $assembly/index/H2 - global.get $assembly/index/c + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c i32.add - global.set $assembly/index/H2 - global.get $assembly/index/H3 - global.get $assembly/index/d + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d i32.add - global.set $assembly/index/H3 - global.get $assembly/index/H4 - global.get $assembly/index/e + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e i32.add - global.set $assembly/index/H4 - global.get $assembly/index/H5 - global.get $assembly/index/f + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f i32.add - global.set $assembly/index/H5 - global.get $assembly/index/H6 - global.get $assembly/index/g + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g i32.add - global.set $assembly/index/H6 - global.get $assembly/index/H7 - global.get $assembly/index/h + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h i32.add - global.set $assembly/index/H7 + global.set $assembly/common/H7 ) - (func $assembly/index/digest64 (param $0 i32) (param $1 i32) - call $assembly/index/init - global.get $assembly/index/wPtr + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) + call $assembly/common/init + global.get $assembly/common/wPtr local.get $0 - call $assembly/index/hashBlocks - global.get $assembly/index/w64Ptr - call $assembly/index/hashPreCompW + call $assembly/common/hashBlocks + global.get $assembly/common/w64Ptr + call $assembly/common/hashPreCompW local.get $1 - global.get $assembly/index/H0 + global.get $assembly/common/H0 call $~lib/polyfills/bswap i32.store local.get $1 - global.get $assembly/index/H1 + global.get $assembly/common/H1 call $~lib/polyfills/bswap i32.store offset=4 local.get $1 - global.get $assembly/index/H2 + global.get $assembly/common/H2 call $~lib/polyfills/bswap i32.store offset=8 local.get $1 - global.get $assembly/index/H3 + global.get $assembly/common/H3 call $~lib/polyfills/bswap i32.store offset=12 local.get $1 - global.get $assembly/index/H4 + global.get $assembly/common/H4 call $~lib/polyfills/bswap i32.store offset=16 local.get $1 - global.get $assembly/index/H5 + global.get $assembly/common/H5 call $~lib/polyfills/bswap i32.store offset=20 local.get $1 - global.get $assembly/index/H6 + global.get $assembly/common/H6 call $~lib/polyfills/bswap i32.store offset=24 local.get $1 - global.get $assembly/index/H7 + global.get $assembly/common/H7 call $~lib/polyfills/bswap i32.store offset=28 ) - (func $assembly/simd/hashPreCompWV128 - (local $0 v128) - (local $1 i32) - (local $2 i32) - (local $3 v128) - global.get $assembly/simd/H0V128 - global.set $assembly/simd/aV128 - global.get $assembly/simd/H1V128 - global.set $assembly/simd/bV128 - global.get $assembly/simd/H2V128 - global.set $assembly/simd/cV128 - global.get $assembly/simd/H3V128 - global.set $assembly/simd/dV128 - global.get $assembly/simd/H4V128 - global.set $assembly/simd/eV128 - global.get $assembly/simd/H5V128 - global.set $assembly/simd/fV128 - global.get $assembly/simd/H6V128 - global.set $assembly/simd/gV128 - global.get $assembly/simd/H7V128 - global.set $assembly/simd/hV128 - i32.const 0 - global.set $assembly/simd/i - loop $for-loop|0 - global.get $assembly/simd/i - i32.const 64 - i32.lt_s - if - global.get $assembly/simd/hV128 - global.get $assembly/simd/eV128 - local.tee $0 - i32.const 6 - i32x4.shr_u - local.get $0 - i32.const 26 - i32x4.shl - v128.or - local.get $0 - i32.const 11 - i32x4.shr_u - local.get $0 - i32.const 21 - i32x4.shl - v128.or - v128.xor - local.get $0 - i32.const 25 - i32x4.shr_u - local.get $0 - i32.const 7 - i32x4.shl - v128.or - v128.xor - i32x4.add - global.get $assembly/simd/eV128 - local.tee $0 - global.get $assembly/simd/fV128 - v128.and - local.get $0 - v128.not - global.get $assembly/simd/gV128 - v128.and - v128.xor - i32x4.add - local.set $3 - global.get $assembly/simd/w64V128Ptr - local.set $1 - block $assembly/utils/v128/getV128|inlined.6 - block $case64|1 - block $case63|1 - block $case62|1 - block $case61|1 - block $case60|1 - block $case59|1 - block $case58|1 - block $case57|1 - block $case56|1 - block $case55|1 - block $case54|1 - block $case53|1 - block $case52|1 - block $case51|1 - block $case50|1 - block $case49|1 - block $case48|1 - block $case47|1 - block $case46|1 - block $case45|1 - block $case44|1 - block $case43|1 - block $case42|1 - block $case41|1 - block $case40|1 - block $case39|1 - block $case38|1 - block $case37|1 - block $case36|1 - block $case35|1 - block $case34|1 - block $case33|1 - block $case32|1 - block $case31|1 - block $case30|1 - block $case29|1 - block $case28|1 - block $case27|1 - block $case26|1 - block $case25|1 - block $case24|1 - block $case23|1 - block $case22|1 - block $case21|1 - block $case20|1 - block $case19|1 - block $case18|1 - block $case17|1 - block $case16|1 - block $case15|1 - block $case14|1 - block $case13|1 - block $case12|1 - block $case11|1 - block $case10|1 - block $case9|1 - block $case8|1 - block $case7|1 - block $case6|1 - block $case5|1 - block $case4|1 - block $case3|1 - block $case2|1 - block $case1|1 - block $case0|1 - global.get $assembly/simd/i - local.tee $2 - br_table $case0|1 $case1|1 $case2|1 $case3|1 $case4|1 $case5|1 $case6|1 $case7|1 $case8|1 $case9|1 $case10|1 $case11|1 $case12|1 $case13|1 $case14|1 $case15|1 $case16|1 $case17|1 $case18|1 $case19|1 $case20|1 $case21|1 $case22|1 $case23|1 $case24|1 $case25|1 $case26|1 $case27|1 $case28|1 $case29|1 $case30|1 $case31|1 $case32|1 $case33|1 $case34|1 $case35|1 $case36|1 $case37|1 $case38|1 $case39|1 $case40|1 $case41|1 $case42|1 $case43|1 $case44|1 $case45|1 $case46|1 $case47|1 $case48|1 $case49|1 $case50|1 $case51|1 $case52|1 $case53|1 $case54|1 $case55|1 $case56|1 $case57|1 $case58|1 $case59|1 $case60|1 $case61|1 $case62|1 $case63|1 $case64|1 - end - local.get $1 - v128.load - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=16 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=32 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=48 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=64 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=80 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=96 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=112 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=128 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=144 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=160 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=176 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=192 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=208 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=224 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=240 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=256 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=272 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=288 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=304 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=320 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=336 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=352 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=368 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=384 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=400 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=416 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=432 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=448 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=464 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=480 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=496 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=512 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=528 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=544 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=560 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=576 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=592 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=608 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=624 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=640 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=656 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=672 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=688 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=704 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=720 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=736 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=752 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=768 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=784 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=800 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=816 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=832 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=848 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=864 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=880 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=896 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=912 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=928 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=944 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=960 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=976 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=992 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $1 - v128.load offset=1008 - local.set $0 - br $assembly/utils/v128/getV128|inlined.6 - end - i32.const 2688 - local.get $2 - call $~lib/util/number/itoa32 - call $~lib/string/String#concat - i32.const 2624 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $0 - i32x4.add - global.set $assembly/simd/t1V128 - global.get $assembly/simd/aV128 - local.tee $0 - i32.const 2 - i32x4.shr_u - local.get $0 - i32.const 30 - i32x4.shl - v128.or - local.get $0 - i32.const 13 - i32x4.shr_u - local.get $0 - i32.const 19 - i32x4.shl - v128.or - v128.xor - local.get $0 - i32.const 22 - i32x4.shr_u - local.get $0 - i32.const 10 - i32x4.shl - v128.or - v128.xor - global.get $assembly/simd/aV128 - local.tee $0 - global.get $assembly/simd/bV128 - local.tee $3 - v128.and - local.get $0 - global.get $assembly/simd/cV128 - local.tee $0 - v128.and - v128.xor - local.get $3 - local.get $0 - v128.and - v128.xor - i32x4.add - global.set $assembly/simd/t2V128 - global.get $assembly/simd/gV128 - global.set $assembly/simd/hV128 - global.get $assembly/simd/fV128 - global.set $assembly/simd/gV128 - global.get $assembly/simd/eV128 - global.set $assembly/simd/fV128 - global.get $assembly/simd/dV128 - global.get $assembly/simd/t1V128 - i32x4.add - global.set $assembly/simd/eV128 - global.get $assembly/simd/cV128 - global.set $assembly/simd/dV128 - global.get $assembly/simd/bV128 - global.set $assembly/simd/cV128 - global.get $assembly/simd/aV128 - global.set $assembly/simd/bV128 - global.get $assembly/simd/t1V128 - global.get $assembly/simd/t2V128 - i32x4.add - global.set $assembly/simd/aV128 - global.get $assembly/simd/i - i32.const 1 - i32.add - global.set $assembly/simd/i - br $for-loop|0 - end - end - global.get $assembly/simd/H0V128 - global.get $assembly/simd/aV128 - i32x4.add - global.set $assembly/simd/H0V128 - global.get $assembly/simd/H1V128 - global.get $assembly/simd/bV128 - i32x4.add - global.set $assembly/simd/H1V128 - global.get $assembly/simd/H2V128 - global.get $assembly/simd/cV128 - i32x4.add - global.set $assembly/simd/H2V128 - global.get $assembly/simd/H3V128 - global.get $assembly/simd/dV128 - i32x4.add - global.set $assembly/simd/H3V128 - global.get $assembly/simd/H4V128 - global.get $assembly/simd/eV128 - i32x4.add - global.set $assembly/simd/H4V128 - global.get $assembly/simd/H5V128 - global.get $assembly/simd/fV128 - i32x4.add - global.set $assembly/simd/H5V128 - global.get $assembly/simd/H6V128 - global.get $assembly/simd/gV128 - i32x4.add - global.set $assembly/simd/H6V128 - global.get $assembly/simd/H7V128 - global.get $assembly/simd/hV128 - i32x4.add - global.set $assembly/simd/H7V128 - ) - (func $assembly/simd/digest64V128 (param $0 i32) (param $1 i32) - (local $2 v128) - (local $3 i32) - (local $4 v128) - (local $5 i32) - v128.const i32x4 0x6a09e667 0x6a09e667 0x6a09e667 0x6a09e667 - global.set $assembly/simd/H0V128 - v128.const i32x4 0xbb67ae85 0xbb67ae85 0xbb67ae85 0xbb67ae85 - global.set $assembly/simd/H1V128 - v128.const i32x4 0x3c6ef372 0x3c6ef372 0x3c6ef372 0x3c6ef372 - global.set $assembly/simd/H2V128 - v128.const i32x4 0xa54ff53a 0xa54ff53a 0xa54ff53a 0xa54ff53a - global.set $assembly/simd/H3V128 - v128.const i32x4 0x510e527f 0x510e527f 0x510e527f 0x510e527f - global.set $assembly/simd/H4V128 - v128.const i32x4 0x9b05688c 0x9b05688c 0x9b05688c 0x9b05688c - global.set $assembly/simd/H5V128 - v128.const i32x4 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab - global.set $assembly/simd/H6V128 - v128.const i32x4 0x5be0cd19 0x5be0cd19 0x5be0cd19 0x5be0cd19 - global.set $assembly/simd/H7V128 - v128.const i32x4 0x6a09e667 0x6a09e667 0x6a09e667 0x6a09e667 - global.set $assembly/simd/aV128 - v128.const i32x4 0xbb67ae85 0xbb67ae85 0xbb67ae85 0xbb67ae85 - global.set $assembly/simd/bV128 - v128.const i32x4 0x3c6ef372 0x3c6ef372 0x3c6ef372 0x3c6ef372 - global.set $assembly/simd/cV128 - v128.const i32x4 0xa54ff53a 0xa54ff53a 0xa54ff53a 0xa54ff53a - global.set $assembly/simd/dV128 - v128.const i32x4 0x510e527f 0x510e527f 0x510e527f 0x510e527f - global.set $assembly/simd/eV128 - v128.const i32x4 0x9b05688c 0x9b05688c 0x9b05688c 0x9b05688c - global.set $assembly/simd/fV128 - v128.const i32x4 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab - global.set $assembly/simd/gV128 - v128.const i32x4 0x5be0cd19 0x5be0cd19 0x5be0cd19 0x5be0cd19 - global.set $assembly/simd/hV128 - i32.const 0 - global.set $assembly/simd/i - block $folding-inner0 - loop $for-loop|0 - global.get $assembly/simd/i - i32.const 64 - i32.lt_s - if - global.get $assembly/simd/i - i32.const 16 - i32.lt_s - if (result v128) - block $assembly/utils/v128/getV128|inlined.0 (result v128) - block $case63|1 - block $case62|1 - block $case61|1 - block $case60|1 - block $case59|1 - block $case58|1 - block $case57|1 - block $case56|1 - block $case55|1 - block $case54|1 - block $case53|1 - block $case52|1 - block $case51|1 - block $case50|1 - block $case49|1 - block $case48|1 - block $case47|1 - block $case46|1 - block $case45|1 - block $case44|1 - block $case43|1 - block $case42|1 - block $case41|1 - block $case40|1 - block $case39|1 - block $case38|1 - block $case37|1 - block $case36|1 - block $case35|1 - block $case34|1 - block $case33|1 - block $case32|1 - block $case31|1 - block $case30|1 - block $case29|1 - block $case28|1 - block $case27|1 - block $case26|1 - block $case25|1 - block $case24|1 - block $case23|1 - block $case22|1 - block $case21|1 - block $case20|1 - block $case19|1 - block $case18|1 - block $case17|1 - block $case16|1 - block $case15|1 - block $case14|1 - block $case13|1 - block $case12|1 - block $case11|1 - block $case10|1 - block $case9|1 - block $case8|1 - block $case7|1 - block $case6|1 - block $case5|1 - block $case4|1 - block $case3|1 - block $case2|1 - block $case1|1 - block $case0|1 - global.get $assembly/simd/i - local.tee $3 - br_table $case0|1 $case1|1 $case2|1 $case3|1 $case4|1 $case5|1 $case6|1 $case7|1 $case8|1 $case9|1 $case10|1 $case11|1 $case12|1 $case13|1 $case14|1 $case15|1 $case16|1 $case17|1 $case18|1 $case19|1 $case20|1 $case21|1 $case22|1 $case23|1 $case24|1 $case25|1 $case26|1 $case27|1 $case28|1 $case29|1 $case30|1 $case31|1 $case32|1 $case33|1 $case34|1 $case35|1 $case36|1 $case37|1 $case38|1 $case39|1 $case40|1 $case41|1 $case42|1 $case43|1 $case44|1 $case45|1 $case46|1 $case47|1 $case48|1 $case49|1 $case50|1 $case51|1 $case52|1 $case53|1 $case54|1 $case55|1 $case56|1 $case57|1 $case58|1 $case59|1 $case60|1 $case61|1 $case62|1 $case63|1 $folding-inner0 - end - local.get $0 - v128.load - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $0 - v128.load offset=1008 - end - else - block $assembly/utils/v128/getV128|inlined.1 (result v128) - block $case63|2 - block $case62|2 - block $case61|2 - block $case60|2 - block $case59|2 - block $case58|2 - block $case57|2 - block $case56|2 - block $case55|2 - block $case54|2 - block $case53|2 - block $case52|2 - block $case51|2 - block $case50|2 - block $case49|2 - block $case48|2 - block $case47|2 - block $case46|2 - block $case45|2 - block $case44|2 - block $case43|2 - block $case42|2 - block $case41|2 - block $case40|2 - block $case39|2 - block $case38|2 - block $case37|2 - block $case36|2 - block $case35|2 - block $case34|2 - block $case33|2 - block $case32|2 - block $case31|2 - block $case30|2 - block $case29|2 - block $case28|2 - block $case27|2 - block $case26|2 - block $case25|2 - block $case24|2 - block $case23|2 - block $case22|2 - block $case21|2 - block $case20|2 - block $case19|2 - block $case18|2 - block $case17|2 - block $case16|2 - block $case15|2 - block $case14|2 - block $case13|2 - block $case12|2 - block $case11|2 - block $case10|2 - block $case9|2 - block $case8|2 - block $case7|2 - block $case6|2 - block $case5|2 - block $case4|2 - block $case3|2 - block $case2|2 - block $case1|2 - block $case0|2 - global.get $assembly/simd/i - i32.const 2 - i32.sub - local.tee $3 - br_table $case0|2 $case1|2 $case2|2 $case3|2 $case4|2 $case5|2 $case6|2 $case7|2 $case8|2 $case9|2 $case10|2 $case11|2 $case12|2 $case13|2 $case14|2 $case15|2 $case16|2 $case17|2 $case18|2 $case19|2 $case20|2 $case21|2 $case22|2 $case23|2 $case24|2 $case25|2 $case26|2 $case27|2 $case28|2 $case29|2 $case30|2 $case31|2 $case32|2 $case33|2 $case34|2 $case35|2 $case36|2 $case37|2 $case38|2 $case39|2 $case40|2 $case41|2 $case42|2 $case43|2 $case44|2 $case45|2 $case46|2 $case47|2 $case48|2 $case49|2 $case50|2 $case51|2 $case52|2 $case53|2 $case54|2 $case55|2 $case56|2 $case57|2 $case58|2 $case59|2 $case60|2 $case61|2 $case62|2 $case63|2 $folding-inner0 - end - local.get $0 - v128.load - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $0 - v128.load offset=1008 - end - local.tee $2 - i32.const 17 - i32x4.shr_u - local.get $2 - i32.const 15 - i32x4.shl - v128.or - local.get $2 - i32.const 19 - i32x4.shr_u - local.get $2 - i32.const 13 - i32x4.shl - v128.or - v128.xor - local.get $2 - i32.const 10 - i32x4.shr_u - v128.xor - block $assembly/utils/v128/getV128|inlined.2 (result v128) - block $case63|3 - block $case62|3 - block $case61|3 - block $case60|3 - block $case59|3 - block $case58|3 - block $case57|3 - block $case56|3 - block $case55|3 - block $case54|3 - block $case53|3 - block $case52|3 - block $case51|3 - block $case50|3 - block $case49|3 - block $case48|3 - block $case47|3 - block $case46|3 - block $case45|3 - block $case44|3 - block $case43|3 - block $case42|3 - block $case41|3 - block $case40|3 - block $case39|3 - block $case38|3 - block $case37|3 - block $case36|3 - block $case35|3 - block $case34|3 - block $case33|3 - block $case32|3 - block $case31|3 - block $case30|3 - block $case29|3 - block $case28|3 - block $case27|3 - block $case26|3 - block $case25|3 - block $case24|3 - block $case23|3 - block $case22|3 - block $case21|3 - block $case20|3 - block $case19|3 - block $case18|3 - block $case17|3 - block $case16|3 - block $case15|3 - block $case14|3 - block $case13|3 - block $case12|3 - block $case11|3 - block $case10|3 - block $case9|3 - block $case8|3 - block $case7|3 - block $case6|3 - block $case5|3 - block $case4|3 - block $case3|3 - block $case2|3 - block $case1|3 - block $case0|3 - global.get $assembly/simd/i - i32.const 7 - i32.sub - local.tee $3 - br_table $case0|3 $case1|3 $case2|3 $case3|3 $case4|3 $case5|3 $case6|3 $case7|3 $case8|3 $case9|3 $case10|3 $case11|3 $case12|3 $case13|3 $case14|3 $case15|3 $case16|3 $case17|3 $case18|3 $case19|3 $case20|3 $case21|3 $case22|3 $case23|3 $case24|3 $case25|3 $case26|3 $case27|3 $case28|3 $case29|3 $case30|3 $case31|3 $case32|3 $case33|3 $case34|3 $case35|3 $case36|3 $case37|3 $case38|3 $case39|3 $case40|3 $case41|3 $case42|3 $case43|3 $case44|3 $case45|3 $case46|3 $case47|3 $case48|3 $case49|3 $case50|3 $case51|3 $case52|3 $case53|3 $case54|3 $case55|3 $case56|3 $case57|3 $case58|3 $case59|3 $case60|3 $case61|3 $case62|3 $case63|3 $folding-inner0 - end - local.get $0 - v128.load - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $0 - v128.load offset=1008 - end - i32x4.add - block $assembly/utils/v128/getV128|inlined.3 (result v128) - block $case63|4 - block $case62|4 - block $case61|4 - block $case60|4 - block $case59|4 - block $case58|4 - block $case57|4 - block $case56|4 - block $case55|4 - block $case54|4 - block $case53|4 - block $case52|4 - block $case51|4 - block $case50|4 - block $case49|4 - block $case48|4 - block $case47|4 - block $case46|4 - block $case45|4 - block $case44|4 - block $case43|4 - block $case42|4 - block $case41|4 - block $case40|4 - block $case39|4 - block $case38|4 - block $case37|4 - block $case36|4 - block $case35|4 - block $case34|4 - block $case33|4 - block $case32|4 - block $case31|4 - block $case30|4 - block $case29|4 - block $case28|4 - block $case27|4 - block $case26|4 - block $case25|4 - block $case24|4 - block $case23|4 - block $case22|4 - block $case21|4 - block $case20|4 - block $case19|4 - block $case18|4 - block $case17|4 - block $case16|4 - block $case15|4 - block $case14|4 - block $case13|4 - block $case12|4 - block $case11|4 - block $case10|4 - block $case9|4 - block $case8|4 - block $case7|4 - block $case6|4 - block $case5|4 - block $case4|4 - block $case3|4 - block $case2|4 - block $case1|4 - block $case0|4 - global.get $assembly/simd/i - i32.const 15 - i32.sub - local.tee $3 - br_table $case0|4 $case1|4 $case2|4 $case3|4 $case4|4 $case5|4 $case6|4 $case7|4 $case8|4 $case9|4 $case10|4 $case11|4 $case12|4 $case13|4 $case14|4 $case15|4 $case16|4 $case17|4 $case18|4 $case19|4 $case20|4 $case21|4 $case22|4 $case23|4 $case24|4 $case25|4 $case26|4 $case27|4 $case28|4 $case29|4 $case30|4 $case31|4 $case32|4 $case33|4 $case34|4 $case35|4 $case36|4 $case37|4 $case38|4 $case39|4 $case40|4 $case41|4 $case42|4 $case43|4 $case44|4 $case45|4 $case46|4 $case47|4 $case48|4 $case49|4 $case50|4 $case51|4 $case52|4 $case53|4 $case54|4 $case55|4 $case56|4 $case57|4 $case58|4 $case59|4 $case60|4 $case61|4 $case62|4 $case63|4 $folding-inner0 - end - local.get $0 - v128.load - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $0 - v128.load offset=1008 - end - local.tee $2 - i32.const 7 - i32x4.shr_u - local.get $2 - i32.const 25 - i32x4.shl - v128.or - local.get $2 - i32.const 18 - i32x4.shr_u - local.get $2 - i32.const 14 - i32x4.shl - v128.or - v128.xor - local.get $2 - i32.const 3 - i32x4.shr_u - v128.xor - i32x4.add - block $assembly/utils/v128/getV128|inlined.4 (result v128) - block $case63|5 - block $case62|5 - block $case61|5 - block $case60|5 - block $case59|5 - block $case58|5 - block $case57|5 - block $case56|5 - block $case55|5 - block $case54|5 - block $case53|5 - block $case52|5 - block $case51|5 - block $case50|5 - block $case49|5 - block $case48|5 - block $case47|5 - block $case46|5 - block $case45|5 - block $case44|5 - block $case43|5 - block $case42|5 - block $case41|5 - block $case40|5 - block $case39|5 - block $case38|5 - block $case37|5 - block $case36|5 - block $case35|5 - block $case34|5 - block $case33|5 - block $case32|5 - block $case31|5 - block $case30|5 - block $case29|5 - block $case28|5 - block $case27|5 - block $case26|5 - block $case25|5 - block $case24|5 - block $case23|5 - block $case22|5 - block $case21|5 - block $case20|5 - block $case19|5 - block $case18|5 - block $case17|5 - block $case16|5 - block $case15|5 - block $case14|5 - block $case13|5 - block $case12|5 - block $case11|5 - block $case10|5 - block $case9|5 - block $case8|5 - block $case7|5 - block $case6|5 - block $case5|5 - block $case4|5 - block $case3|5 - block $case2|5 - block $case1|5 - block $case0|5 - global.get $assembly/simd/i - i32.const 16 - i32.sub - local.tee $3 - br_table $case0|5 $case1|5 $case2|5 $case3|5 $case4|5 $case5|5 $case6|5 $case7|5 $case8|5 $case9|5 $case10|5 $case11|5 $case12|5 $case13|5 $case14|5 $case15|5 $case16|5 $case17|5 $case18|5 $case19|5 $case20|5 $case21|5 $case22|5 $case23|5 $case24|5 $case25|5 $case26|5 $case27|5 $case28|5 $case29|5 $case30|5 $case31|5 $case32|5 $case33|5 $case34|5 $case35|5 $case36|5 $case37|5 $case38|5 $case39|5 $case40|5 $case41|5 $case42|5 $case43|5 $case44|5 $case45|5 $case46|5 $case47|5 $case48|5 $case49|5 $case50|5 $case51|5 $case52|5 $case53|5 $case54|5 $case55|5 $case56|5 $case57|5 $case58|5 $case59|5 $case60|5 $case61|5 $case62|5 $case63|5 $folding-inner0 - end - local.get $0 - v128.load - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $0 - v128.load offset=1008 - end - i32x4.add - end - global.set $assembly/simd/tmpW - global.get $assembly/simd/i - i32.const 16 - i32.ge_s - if - global.get $assembly/simd/tmpW - local.set $2 - block $break|6 - block $case64|6 - block $case63|6 - block $case62|6 - block $case61|6 - block $case60|6 - block $case59|6 - block $case58|6 - block $case57|6 - block $case56|6 - block $case55|6 - block $case54|6 - block $case53|6 - block $case52|6 - block $case51|6 - block $case50|6 - block $case49|6 - block $case48|6 - block $case47|6 - block $case46|6 - block $case45|6 - block $case44|6 - block $case43|6 - block $case42|6 - block $case41|6 - block $case40|6 - block $case39|6 - block $case38|6 - block $case37|6 - block $case36|6 - block $case35|6 - block $case34|6 - block $case33|6 - block $case32|6 - block $case31|6 - block $case30|6 - block $case29|6 - block $case28|6 - block $case27|6 - block $case26|6 - block $case25|6 - block $case24|6 - block $case23|6 - block $case22|6 - block $case21|6 - block $case20|6 - block $case19|6 - block $case18|6 - block $case17|6 - block $case16|6 - block $case15|6 - block $case14|6 - block $case13|6 - block $case12|6 - block $case11|6 - block $case10|6 - block $case9|6 - block $case8|6 - block $case7|6 - block $case6|6 - block $case5|6 - block $case4|6 - block $case3|6 - block $case2|6 - block $case1|6 - block $case0|6 - global.get $assembly/simd/i - local.tee $3 - br_table $case0|6 $case1|6 $case2|6 $case3|6 $case4|6 $case5|6 $case6|6 $case7|6 $case8|6 $case9|6 $case10|6 $case11|6 $case12|6 $case13|6 $case14|6 $case15|6 $case16|6 $case17|6 $case18|6 $case19|6 $case20|6 $case21|6 $case22|6 $case23|6 $case24|6 $case25|6 $case26|6 $case27|6 $case28|6 $case29|6 $case30|6 $case31|6 $case32|6 $case33|6 $case34|6 $case35|6 $case36|6 $case37|6 $case38|6 $case39|6 $case40|6 $case41|6 $case42|6 $case43|6 $case44|6 $case45|6 $case46|6 $case47|6 $case48|6 $case49|6 $case50|6 $case51|6 $case52|6 $case53|6 $case54|6 $case55|6 $case56|6 $case57|6 $case58|6 $case59|6 $case60|6 $case61|6 $case62|6 $case63|6 $case64|6 - end - local.get $0 - local.get $2 - v128.store - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=16 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=32 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=48 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=64 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=80 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=96 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=112 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=128 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=144 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=160 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=176 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=192 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=208 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=224 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=240 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=256 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=272 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=288 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=304 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=320 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=336 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=352 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=368 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=384 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=400 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=416 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=432 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=448 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=464 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=480 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=496 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=512 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=528 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=544 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=560 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=576 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=592 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=608 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=624 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=640 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=656 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=672 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=688 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=704 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=720 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=736 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=752 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=768 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=784 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=800 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=816 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=832 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=848 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=864 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=880 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=896 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=912 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=928 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=944 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=960 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=976 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=992 - br $break|6 - end - local.get $0 - local.get $2 - v128.store offset=1008 - br $break|6 - end - i32.const 2496 - local.get $3 - call $~lib/util/number/itoa32 - call $~lib/string/String#concat - i32.const 2624 - i32.const 201 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - end - global.get $assembly/simd/hV128 - global.get $assembly/simd/eV128 - local.tee $2 - i32.const 6 - i32x4.shr_u - local.get $2 - i32.const 26 - i32x4.shl - v128.or - local.get $2 - i32.const 11 - i32x4.shr_u - local.get $2 - i32.const 21 - i32x4.shl - v128.or - v128.xor - local.get $2 - i32.const 25 - i32x4.shr_u - local.get $2 - i32.const 7 - i32x4.shl - v128.or - v128.xor - i32x4.add - global.get $assembly/simd/eV128 - local.tee $2 - global.get $assembly/simd/fV128 - v128.and - local.get $2 - v128.not - global.get $assembly/simd/gV128 - v128.and - v128.xor - i32x4.add - local.set $4 - global.get $assembly/simd/kV128Ptr - local.set $3 - block $assembly/utils/v128/getV128|inlined.5 - block $case64|7 - block $case63|7 - block $case62|7 - block $case61|7 - block $case60|7 - block $case59|7 - block $case58|7 - block $case57|7 - block $case56|7 - block $case55|7 - block $case54|7 - block $case53|7 - block $case52|7 - block $case51|7 - block $case50|7 - block $case49|7 - block $case48|7 - block $case47|7 - block $case46|7 - block $case45|7 - block $case44|7 - block $case43|7 - block $case42|7 - block $case41|7 - block $case40|7 - block $case39|7 - block $case38|7 - block $case37|7 - block $case36|7 - block $case35|7 - block $case34|7 - block $case33|7 - block $case32|7 - block $case31|7 - block $case30|7 - block $case29|7 - block $case28|7 - block $case27|7 - block $case26|7 - block $case25|7 - block $case24|7 - block $case23|7 - block $case22|7 - block $case21|7 - block $case20|7 - block $case19|7 - block $case18|7 - block $case17|7 - block $case16|7 - block $case15|7 - block $case14|7 - block $case13|7 - block $case12|7 - block $case11|7 - block $case10|7 - block $case9|7 - block $case8|7 - block $case7|7 - block $case6|7 - block $case5|7 - block $case4|7 - block $case3|7 - block $case2|7 - block $case1|7 - block $case0|7 - global.get $assembly/simd/i - local.tee $5 - br_table $case0|7 $case1|7 $case2|7 $case3|7 $case4|7 $case5|7 $case6|7 $case7|7 $case8|7 $case9|7 $case10|7 $case11|7 $case12|7 $case13|7 $case14|7 $case15|7 $case16|7 $case17|7 $case18|7 $case19|7 $case20|7 $case21|7 $case22|7 $case23|7 $case24|7 $case25|7 $case26|7 $case27|7 $case28|7 $case29|7 $case30|7 $case31|7 $case32|7 $case33|7 $case34|7 $case35|7 $case36|7 $case37|7 $case38|7 $case39|7 $case40|7 $case41|7 $case42|7 $case43|7 $case44|7 $case45|7 $case46|7 $case47|7 $case48|7 $case49|7 $case50|7 $case51|7 $case52|7 $case53|7 $case54|7 $case55|7 $case56|7 $case57|7 $case58|7 $case59|7 $case60|7 $case61|7 $case62|7 $case63|7 $case64|7 - end - local.get $3 - v128.load - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=16 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=32 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=48 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=64 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=80 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=96 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=112 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=128 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=144 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=160 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=176 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=192 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=208 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=224 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=240 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=256 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=272 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=288 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=304 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=320 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=336 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=352 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=368 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=384 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=400 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=416 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=432 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=448 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=464 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=480 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=496 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=512 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=528 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=544 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=560 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=576 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=592 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=608 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=624 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=640 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=656 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=672 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=688 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=704 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=720 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=736 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=752 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=768 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=784 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=800 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=816 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=832 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=848 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=864 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=880 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=896 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=912 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=928 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=944 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=960 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=976 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=992 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $3 - v128.load offset=1008 - local.set $2 - br $assembly/utils/v128/getV128|inlined.5 - end - i32.const 2688 - local.get $5 - call $~lib/util/number/itoa32 - call $~lib/string/String#concat - i32.const 2624 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $2 - i32x4.add - global.get $assembly/simd/tmpW - i32x4.add - global.set $assembly/simd/t1V128 - global.get $assembly/simd/aV128 - local.tee $2 - i32.const 2 - i32x4.shr_u - local.get $2 - i32.const 30 - i32x4.shl - v128.or - local.get $2 - i32.const 13 - i32x4.shr_u - local.get $2 - i32.const 19 - i32x4.shl - v128.or - v128.xor - local.get $2 - i32.const 22 - i32x4.shr_u - local.get $2 - i32.const 10 - i32x4.shl - v128.or - v128.xor - global.get $assembly/simd/aV128 - local.tee $2 - global.get $assembly/simd/bV128 - local.tee $4 - v128.and - local.get $2 - global.get $assembly/simd/cV128 - local.tee $2 - v128.and - v128.xor - local.get $4 - local.get $2 - v128.and - v128.xor - i32x4.add - global.set $assembly/simd/t2V128 - global.get $assembly/simd/gV128 - global.set $assembly/simd/hV128 - global.get $assembly/simd/fV128 - global.set $assembly/simd/gV128 - global.get $assembly/simd/eV128 - global.set $assembly/simd/fV128 - global.get $assembly/simd/dV128 - global.get $assembly/simd/t1V128 - i32x4.add - global.set $assembly/simd/eV128 - global.get $assembly/simd/cV128 - global.set $assembly/simd/dV128 - global.get $assembly/simd/bV128 - global.set $assembly/simd/cV128 - global.get $assembly/simd/aV128 - global.set $assembly/simd/bV128 - global.get $assembly/simd/t1V128 - global.get $assembly/simd/t2V128 - i32x4.add - global.set $assembly/simd/aV128 - global.get $assembly/simd/i - i32.const 1 - i32.add - global.set $assembly/simd/i - br $for-loop|0 - end - end - global.get $assembly/simd/H0V128 - global.get $assembly/simd/aV128 - i32x4.add - global.set $assembly/simd/H0V128 - global.get $assembly/simd/H1V128 - global.get $assembly/simd/bV128 - i32x4.add - global.set $assembly/simd/H1V128 - global.get $assembly/simd/H2V128 - global.get $assembly/simd/cV128 - i32x4.add - global.set $assembly/simd/H2V128 - global.get $assembly/simd/H3V128 - global.get $assembly/simd/dV128 - i32x4.add - global.set $assembly/simd/H3V128 - global.get $assembly/simd/H4V128 - global.get $assembly/simd/eV128 - i32x4.add - global.set $assembly/simd/H4V128 - global.get $assembly/simd/H5V128 - global.get $assembly/simd/fV128 - i32x4.add - global.set $assembly/simd/H5V128 - global.get $assembly/simd/H6V128 - global.get $assembly/simd/gV128 - i32x4.add - global.set $assembly/simd/H6V128 - global.get $assembly/simd/H7V128 - global.get $assembly/simd/hV128 - i32x4.add - global.set $assembly/simd/H7V128 - call $assembly/simd/hashPreCompWV128 - local.get $1 - global.get $assembly/simd/H0V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - i32.store - local.get $1 - global.get $assembly/simd/H1V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - i32.store offset=4 - local.get $1 - global.get $assembly/simd/H2V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - i32.store offset=8 - local.get $1 - global.get $assembly/simd/H3V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - i32.store offset=12 - local.get $1 - global.get $assembly/simd/H4V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - i32.store offset=16 - local.get $1 - global.get $assembly/simd/H5V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - i32.store offset=20 - local.get $1 - global.get $assembly/simd/H6V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - i32.store offset=24 - local.get $1 - global.get $assembly/simd/H7V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - i32.store offset=28 - local.get $1 - global.get $assembly/simd/H0V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - i32.store offset=32 - local.get $1 - global.get $assembly/simd/H1V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - i32.store offset=36 - local.get $1 - global.get $assembly/simd/H2V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - i32.store offset=40 - local.get $1 - global.get $assembly/simd/H3V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - i32.store offset=44 - local.get $1 - global.get $assembly/simd/H4V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - i32.store offset=48 - local.get $1 - global.get $assembly/simd/H5V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - i32.store offset=52 - local.get $1 - global.get $assembly/simd/H6V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - i32.store offset=56 - local.get $1 - global.get $assembly/simd/H7V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - i32.store offset=60 - local.get $1 - i32.const -64 - i32.sub - global.get $assembly/simd/H0V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - i32.store - local.get $1 - global.get $assembly/simd/H1V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - i32.store offset=68 - local.get $1 - global.get $assembly/simd/H2V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - i32.store offset=72 - local.get $1 - global.get $assembly/simd/H3V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - i32.store offset=76 - local.get $1 - global.get $assembly/simd/H4V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - i32.store offset=80 - local.get $1 - global.get $assembly/simd/H5V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - i32.store offset=84 - local.get $1 - global.get $assembly/simd/H6V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - i32.store offset=88 - local.get $1 - global.get $assembly/simd/H7V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - i32.store offset=92 - local.get $1 - global.get $assembly/simd/H0V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - i32.store offset=96 - local.get $1 - global.get $assembly/simd/H1V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - i32.store offset=100 - local.get $1 - global.get $assembly/simd/H2V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - i32.store offset=104 - local.get $1 - global.get $assembly/simd/H3V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - i32.store offset=108 - local.get $1 - global.get $assembly/simd/H4V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - i32.store offset=112 - local.get $1 - global.get $assembly/simd/H5V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - i32.store offset=116 - local.get $1 - global.get $assembly/simd/H6V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - i32.store offset=120 - local.get $1 - global.get $assembly/simd/H7V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - i32.store offset=124 - return - end - i32.const 2688 - local.get $3 - call $~lib/util/number/itoa32 - call $~lib/string/String#concat - i32.const 2624 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - ) - (func $assembly/index/batchHash4UintArray64s (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - i32.const 0 - global.set $assembly/index/i - loop $for-loop|0 - global.get $assembly/index/i - i32.const 16 - i32.lt_u - if - global.get $assembly/index/i - i32.const 2 - i32.shl - local.tee $1 - i32.const 1 - i32.add - local.set $2 - global.get $assembly/index/wPtr - local.get $1 - i32.const 2 - i32.shl - i32.add - local.get $1 - i32.const 3 - i32.add - local.tee $3 - global.get $assembly/index/inputPtr - local.tee $4 - i32.add - i32.load8_u - local.get $1 - local.get $4 - i32.add - i32.load8_u - i32.const 24 - i32.shl - local.get $2 - local.get $4 - i32.add - i32.load8_u - i32.const 16 - i32.shl - i32.or - local.get $1 - i32.const 2 - i32.add - local.tee $1 - local.get $4 - i32.add - i32.load8_u - i32.const 8 - i32.shl - i32.or - i32.or - i32.store - global.get $assembly/index/wPtr - local.get $2 - i32.const 2 - i32.shl - i32.add - global.get $assembly/index/inputPtr - local.tee $2 - global.get $assembly/index/i - i32.const 16 - i32.add - i32.const 2 - i32.shl - local.tee $4 - i32.const 3 - i32.add - i32.add - i32.load8_u - local.get $2 - local.get $4 - i32.add - i32.load8_u - i32.const 24 - i32.shl - local.get $4 - i32.const 1 - i32.add - local.get $2 - i32.add - i32.load8_u - i32.const 16 - i32.shl - i32.or - local.get $4 - i32.const 2 - i32.add - local.get $2 - i32.add - i32.load8_u - i32.const 8 - i32.shl - i32.or - i32.or - i32.store - global.get $assembly/index/wPtr - local.get $1 - i32.const 2 - i32.shl - i32.add - global.get $assembly/index/inputPtr - local.tee $1 - global.get $assembly/index/i - i32.const 32 - i32.add - i32.const 2 - i32.shl - local.tee $2 - i32.const 3 - i32.add - i32.add - i32.load8_u - local.get $1 - local.get $2 - i32.add - i32.load8_u - i32.const 24 - i32.shl - local.get $2 - i32.const 1 - i32.add - local.get $1 - i32.add - i32.load8_u - i32.const 16 - i32.shl - i32.or - local.get $2 - i32.const 2 - i32.add - local.get $1 - i32.add - i32.load8_u - i32.const 8 - i32.shl - i32.or - i32.or - i32.store - global.get $assembly/index/wPtr - local.get $3 - i32.const 2 - i32.shl - i32.add - global.get $assembly/index/inputPtr - local.tee $1 - global.get $assembly/index/i - i32.const 48 - i32.add - i32.const 2 - i32.shl - local.tee $2 - i32.const 3 - i32.add - i32.add - i32.load8_u - local.get $1 - local.get $2 - i32.add - i32.load8_u - i32.const 24 - i32.shl - local.get $2 - i32.const 1 - i32.add - local.get $1 - i32.add - i32.load8_u - i32.const 16 - i32.shl - i32.or - local.get $2 - i32.const 2 - i32.add - local.get $1 - i32.add - i32.load8_u - i32.const 8 - i32.shl - i32.or - i32.or - i32.store - global.get $assembly/index/i - i32.const 1 - i32.add - global.set $assembly/index/i - br $for-loop|0 - end - end - global.get $assembly/index/wPtr - local.get $0 - call $assembly/simd/digest64V128 - ) - (func $assembly/index/batchHash4HashObjectInputs (param $0 i32) - (local $1 i32) - (local $2 i32) - i32.const 0 - global.set $assembly/index/i - loop $for-loop|0 - global.get $assembly/index/i - i32.const 64 - i32.lt_u - if - global.get $assembly/index/i - i32.const 2 - i32.shl - local.tee $1 - global.get $assembly/index/wPtr - i32.add - global.get $assembly/index/inputPtr - local.tee $2 - local.get $1 - i32.const 3 - i32.add - i32.add - i32.load8_u - local.get $1 - local.get $2 - i32.add - i32.load8_u - i32.const 24 - i32.shl - local.get $1 - i32.const 1 - i32.add - local.get $2 - i32.add - i32.load8_u - i32.const 16 - i32.shl - i32.or - local.get $1 - i32.const 2 - i32.add - local.get $2 - i32.add - i32.load8_u - i32.const 8 - i32.shl - i32.or - i32.or - i32.store - global.get $assembly/index/i - i32.const 1 - i32.add - global.set $assembly/index/i - br $for-loop|0 - end - end - global.get $assembly/index/wPtr - local.get $0 - call $assembly/simd/digest64V128 - ) (func $~start - call $start:assembly/simd i32.const 1348 i32.load - global.set $assembly/index/kPtr + global.set $assembly/common/kPtr i32.const 1684 i32.load - global.set $assembly/index/w64Ptr + global.set $assembly/common/w64Ptr + i32.const 2016 + i32.const 2016 + call $~lib/rt/tlsf/Block#set:prev + i32.const 2016 + i32.const 2016 + call $~lib/rt/tlsf/Block#set:next + i32.const 2016 + global.set $~lib/rt/tcms/fromSpace i32.const 64 call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/index/M - global.get $assembly/index/M - global.set $assembly/index/mPtr + global.set $assembly/common/M + global.get $assembly/common/M + global.set $assembly/common/mPtr i32.const 1024 call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/index/W - global.get $assembly/index/W - global.set $assembly/index/wPtr + global.set $assembly/common/W + global.get $assembly/common/W + global.set $assembly/common/wPtr i32.const 512 call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/index/input - global.get $assembly/index/input - global.set $assembly/index/inputPtr + global.set $assembly/common/input + global.get $assembly/common/input + global.set $assembly/common/inputPtr i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/index/output - global.get $assembly/index/output - global.set $assembly/index/outputPtr + global.set $assembly/common/output + global.get $assembly/common/output + global.set $assembly/common/outputPtr ) ) diff --git a/packages/as-sha256/build/untouched.simd.wasm b/packages/as-sha256/build/untouched.simd.wasm new file mode 100644 index 0000000000000000000000000000000000000000..f74b6caf38f87237f95c4c7086dccc6e51e69cb7 GIT binary patch literal 27387 zcmeI43zQsJedepGySi$oyQh0vqeqWg(ygv;J#1OhNb{6rX-dXz`6WMi1TX~4wk)eh zZ;geFgJ-~x0C9qVknnJb2zE@cAp$~n6S9tgb4(zRH91Q*2~Ji?I7uKRD;_y}NG!bH zcfabM5f-XKNzFp4lV+UNvaop|sTiqFV=2mZJ#<|sT zILDHUh0F|BW$~$n`>;MUa~~GG`xujjo^iaQo7r>lxWD_hLr15bTxN2+>$tAX+6_GH zA>;ZPuCc3pCzHV{#}9jYt@8NKakE(u0oiQU^|HQu7}0(P`Q*NyyK%-z&Ukrzp7itg zy5|eX@`8W=f8_<$;W+<(6*A){KVfe;T@KHg%MYAA25OyEb00Qj{vzVKi}yO`3w!^z zr#*klbLE4d*!$V}lU;fA`vPyE^a zE9OsjW%a9PZ<#;w$g=z}{FsI89>GgbImvTN^1;Jye$j2ar*FS&=k8;74Zm{V!Rh4a z(cSlq4j*$y2In?#>kYTH_uM{x^})k;Pakte3s>*D@s+Q5!*y5gy6P1>Gwc0*T%Wl* zcj)eEifgm`4(^+F#&UNbzGL_F9%sV8bKk+;`<*ShJNE6}b8On#8cK`~JKJ&x_8d5L z^d8R%-R(U&mrcPbxQlwf^C>Jl#xd@w=i~#Z)tJw%>8NaXU6@8?(|Kpv$={!G7tI*A z>_uMU4jOzMxiUMMILYZCdDu((%D7&zHj~U8I}&9Wl1U0TbVGij6Ou`0y{nlp$|53r zJo0^$sppdCo`3%NOg%6;6I{JC3X>Hk+&hJs&}5VB)bYekveU;RA4_54PGL))`^YAX zug=aGKPg}Bf}6i)lmbGey&fhFD5gm=YRd-jqy!UPCNkNewY?8)9A!vGC&!@n7fa-$A>{ zqumsuiYc3Zww=nnMuz4B+Lg1Yf(2#YEWo+I8njT`Y6g&WA(AdKE}F}LS;*vz)b!A3 z(DXX(B|m+%?AkPgNV61Y!-39+zd5Gd`|(Hd~y?Yk+Y0~=i_Ny~dU2VfU6}kRj)Rrk zQ%0jJ<$vJ1<(b48jBn^xK;&$9P-0ue1Q2WU!`4jsc;p$+xYqztm`zQ>%y*Jg*-60C zvDc$xPgW+%qMkrEgO^(YY#7VZ16cI7Q_Wst4fTk6@F<)##z3aDKbCKr-lR^z7B>>1ssly3iK>C~d*E zk@^Nr%=l~-1U(TAJDWLXGSf$*0JRsI0Bzr5*sk|bS=fZ;WG{&*^i9uQk!LgOMP|0W z%w>i=&~}-HT=E-UQelPI_yXdKCb$cys9=h`nEU3lAk6zVtc0*K!}`IWGQ;{W3^QRV z|FfZUx6%CZ^40@5qF69?q1!1PviV?75t>VKGEANclkYjnB{mzUTt{=Z*D_i@ zs~b7ohWbcO{d^8|g!raIe?avly*IQ==-oh_{3GXvHs*gHU{&5B-)2Al*I5SUpwB#T zxeY~YPiBAdAD+$F;Mvdr_w_bB@8o~zdOb7VecmKE?Aq+ulqn9P(ycg*W}b=AmqQ5- z+D_~@ox@Qs`3h`?B_8pdsK6!5A}$qq^{{q%jk%ybD6zvl^uSmKJ$v*7k?%Jhd(GG^ z1G{{f$ii;Wz>$>sg`N6fGgL;f4VaIM8bC4UBD*!$+l}l+Bp?asBC`z!PC+A7F8M7k zDDW!B9yM~A%d8WUoGTjl@#J~;NLmKuX51a&+agy-fQ)R1GY!m5x7WLl&34uWR8gb6 zg3-SAC2k9F#tGSOoO>RhN>&(m@63=r{Jo^0dK!j{mly$=-* zTuet9yI%$Ea21qg5Vp3{t<+Pc{CizDd!NZLZ+4p9sUwNQ-bv=JBslUU&)^RC&DNql zTRq)_K8X&R$=&}r&zTMf%RY`7hwj{5bn_gVPB}&>p?XIEq{xn-`-< z<@kJm6na?uAN^-MU?_w3i<&}HZWVEeiPtL9Ycs7Pw`E&J-i`aMA}^I(tC+(qXcYs@ z!d5ZFtfy7%!K}Ac?8PkKD&lk`g;ueES+P|tV%FCx_F-0P6-$_vTg5VF{jFj@W|da4 zg4u#raRFunt>OS?3tPp7m@R4*7h$%zRa}hOl2#GklvG>ADrSSNBA+BIZ55YdR%;b& zm@R7+mtnTNRa}nQidJz2W~Nm%m_@B(gju~+tYa3piZN!5RO@78(YPVm~CnmH(@s1Dh^{d(khN%HrgtVVm8()j$t<5Dvo0|(JD@0wz*Z@jMPXJ8Mm0TSsmvT;7qBg{>WV zV_{22-dfn)k%tQt9Xab3#yk3?TNvx;Q*L3jqffhqk&Zs&7KS_e8Mm;hqtCj9jU9c? zEev(^tXJ63(I>sa`i?&371nk1X|HfuN1yQuYdiWGuW)HcpY;ltbo4o|u%@GDGlkV1 zeKJ#6)zPOig_RwBI#XzN^qEYd(b3Oj3UNoD%@pb#eJ)dg<*D9hv$*9?^~r2uMMs~? z7M6GP>1<(HN1w?SY90Mdwy?CL&t?mQ9eplasCM+MUs%%7C;h_Wjy~lV7IpM#zp${Q z&-jIbj()~3Ea>R7excIQ=lnu{N6+R8<&Hj?E6_P@dpeaX^mX*ElhmAj*EA)2sxm=;Aqi2Ic*wH70LeSBtfK;3-d< ze^Br``dk3VPR^lQne>(~DPNYHTb$r|SHSKby$#-DdqWqZIgaB-18B|y%_O$a+@NVk zxfrHv(cJSNjb-j1x9Yrgv1rEKBGHTo7esR)G~*!}(HscPfzTWX&4JJy2+e`e90<*U z&>RTOfzTWX&4JJy2+e`e90<*U&>RTOfzTWX&4JJy2+e`e90<*U&>RTOfzTWX&4JJy z2+e`e90<*U&>RTOfzTWX&4JJy2+e`e90<*U&>RTOfzTWX&4JJy2+e`e90<*U&>RTO zfzTWX&4JJy2+e`e90<*U&>RTOfzTXu(ToQH9W+Z?G)r1EOIkEbS~N>qG)r1EOIkEb z3eD0&v$W7GEi_9D&C)`%w9qUqG)oK3(n7Pe&@3%9OAF1?LbJ5cEG;xk3(e9(v$W7G zEi_9D&C)`%w9qUqG)oK3(n7Pe&@3%9OAF1?LbJ5cEG;xk3(e9(v$W7GEi_9D&C)`% zw9qUqG)oK3(n7Pe&@3%9OAF1?LbJ5cEG;xk3(e9(v$W7GEi_A?v1pbSnx)TLG)s5U zoVysBaZiEnw!PiD!ijNX-q;Yk_#6VM&p7BlUm0K7XklU2i!Wn$`l|S<#?Hiv*F#?& zU){I{dL8t&@wJWX@;RrxuDm{9cj9Kli&r)>@v25PUfuBHHH}<+Nh63aZG`dKMo<1d zecs@`rJ2}k^v0P+KF&4@vEL}hxkg_cG)i&UD91gG{={i4%uL1$MmIo`d- ziQFU?4JO76PDM*$NrUG<&U;YTEIt1O?l5^HasEc!jM~_2l8B^ zlRv-9^q#-o6wdFO7t@GLyfBJh5^fenbyJs{)#YY&xmjIqR+pRAt^P>gWHTG zZz#&V-=HwO+o0IMdku<7-f2+W$omY6TX~m3ahUfQ6tgaGF{t2NxWS-0Wp6L2;99u3 zpgLo3EvVpFxUrx*Yi}#4;8wV)pn_N7mVydSg&PVg_!Mp@sNhn#nV^D4;Z}kQ4uu;D zD)GH{lk73eJQZ2rBpzZXc-NO1OETf+ykDfeMa<8wV=*5pEl(;6}J< zpn@0SmVpXRgc}Ab_z-RvsNh1lS)hUk;Z}hP4ul&8D)6R6-mxJjUb_uv+R3eJNY z1Sml;5N7^pn})nmVgRQgBt=W_zZ3bsNgcV z8K8p4;8uVN4ucy3D)CZ{cHtv;@&0 zNXz`9q=V>U)SnciCSsdY(Mr>AnvAVLtYobHf_@Is#b_W|6s5>2J(4-DAt8yT`1Ot zVqGZKg<@SO)`enSDAt8yT`1OtVqGZKg<@SO)`enSDAt8yT`1OtVqGZKg<@SO)`enS zDAt8yT`1OtVqGZKg<@SO)`eZx<nJSiC@kwJEbAyN>nJSiC@kwJEbA!5Ix4Y_ zO01(2>!`#!DzT1AtfLa^sKh!dv5rctqY~?=#5yXmj!LYf66>hMIx4Y_O01(2>!`#! zDzT1AtfLa^sKh!dv5rctqY~?=#5yXmj!LYf66>hMIx4Y_O01(2>!`#!DzT1AtfLa^ zsKh!dv5rctqY~?=#5yXmj!LYf66>hMIx4Y_O01(2>!`#!DzT1AtfT6(4iA$%&)es^ z;nBl*CSe|Sqn~$^evIZcre_LY@cul8Y_gyH3od0Zd&=*04VK>NcDmt6bJ9%~;G1A$ z@>6)2ani-p45WFNOIcu=ce@5l?^YW0pdZEv1%%iq9kwr71Y(1!sP83#*go8FV5l6w zQY{IwB_XyX#A0MHyOSj$wj{)sgxHc0TM}YRLTpKhEeWwDA+{vMmW0@n5L*&rOG0c( zh%E`RB_XyX#Fm8Ek`P-GVoO47Nr){8u_Yn4B*bFOD-l}~VoO47Nr){8u_Yn4B*d14 z*pd)i5@Jh2Y)ObM39%(1wj{)sgxHc0TM}YRLTpKhEeWwDA+{vMmW0@n5L*&rOG0c( zh%E`RB_XyX#Fm8EQWvpBGTYa)id_FE|q9UbXhCAkf~jc0{33n;!_MJ*UCIG=4u8ot zSo)=IhZ1Ri*-a|ZLZn$Zg(tJW?3#s4^FEhy5!1ZiHCTFow?p|JH_3E5l$Nu2KDii_ z#m`Nayd)^Q1W%ExqHI-^#m{wk+g=rAtDEQi-xuqAZmt zOC`!uiLz9pER`rrCCXBXvQ(lhl_*Ok%2J84RH7`EC`%>EQi-xuqAZmtOC`!uiLz9p zER`rrCCXBXvQ(lhl_*Ok%2J84RH7`EC`%>EQi-xuqAZmtOC`!uiLz9pER`rr)urr` zi%}M=%QqGgbh|K=+KUG9oy^jBQS<@#B|*KVQO#g%HT#w|QLiTI)kM9Ts8eWQOny6P3^=hJCP1LK2dNon6ChFBhy_%?36ZLAMUQN`iiF!3ruO{l% zM7^4*R}=MWqFznZ!x#|`POgc1HBql7>eWQOny6P3^=hJCP1LK2dNon6ChFBhy_%?3 z6ZLAMUQN`iiF!3ruO{l%M7^4*R}=MWqFznZtBHCwQLiTI)kM9Ts86U7^a*q0E-w(kS>6X z7^s{s0FD??kS>6a7^<8u0FfA0kS>6d7+H`m0F)S9kS>6g7+;Vs0GAkIkS>6j7-f(y z0Gb$RkS>6m7;BI&0G$|akS>6p7;%s;0H7FjkS>6s76v7=4f~0Hzp# zkS>6y7=w^50I3*;kS>6#7>STB0IV2{kS>6&7>|%H0IwL5kS>6*7?qGN0J0dEkS>6; z7@LqT0JRvNkS>6>7@?3Z0Js>WkS>6^7^jdf0J|8fkS>6{7_E>l0KOQokS>6~7_*Qr z0KpixkS>727`c!x0K^!)kS>757{8D%0LK`@kS>787{!n-0LmE1kS>7B7|W0@0L>WA zkS>7E7}1a}0MHoJkS>7H7}t<40Mi)SkS>7K7~POA0M;1bkS>7N7~_yG0NEJZoGyUc z8r-~ej@sS9&FPS|53+;&K{tAYqtcco#w?qPmYYXhj4(rI_g7rXIbiKTX+BQ})x8{WN7iP1#RV_S2O8G-W?c*-umU)0F)*Wj{^XPgC~O zl>IbiKTX+BQ})x8{WN7iP1#RV_S5XzPmFGm?Q~PvPB(?^bW_+)H-+tVQ`k;7h3#}x z*iJVEJO)G7s9-Q~8!EU9tcD8K0-vFRufSxeU@CAJDmV)4g$i~8Z=r&hz*wkYBybff zxCktT3KjxCp@M(FOsHTUa1tsw2W*52wgC^Jf@i=$s9+dy4=T6?tb+OcE zD&Si~)*5s8p8Kv0o$h!MKGJb(A0@{>>PEkTpKeAg6Ju6RMXStjxEO{8x_->1Tt&J* z;TkMG(d9VOJn3Qx+iIj)Jr%7nPr4Y4hBO~{Dc3N~CtQQ2PjrZ^J^iMOp=_5R)g@EW zrRFzXa|u(Ob}27qs!zHGOP}ndvO}6N!tPTpMznp}#gMk&a?Ph)^JzjH^WU-v$6~6) z{r~8ZZRL&Lq;aFQ__fbvv3Gu{Q{EJId$6q?zfc1$RZHO}p7&7b41{*Nc z4cLhDvMJ6gVAyOln{2>vH((^mM5D2CFPsw(~JqozOBxZ*VxS|{IvLuYI zWIed3hn9JnxzYx-x&c=uJ<(3q0|Tx$SDBqQ;OcI`HA!!DE$e{+*O_a~wKm|oZou{E zRP16sFyIDrz1d|0Zs-Qwm=vO$SPu-i+1zMuvH>@D1742i{0i0s172xfZeC#nUfB(J zRniyz6zhQjuQsnTKV<`6-3@q6Qi@*7dSJjU<~8QEHsF?S!0VE7^m^8Vhk&0puQRW= z0YBXhctg@3-O74kz;5#fbE^&5-3_=64;OD|Juu)7bDO!{2HepN*n_XL?_@nNV6WL@ z?z91Wy8(A41JOR#0|VOTF0;=Dw7UUQ$--zq>wy6W%#_)00}gZp4&n+v#Cl-BVRO(N zvH^#?0Y{R>(NWd|1CE&^=BN!g)(x0WmPB{69x@0xZl=xMHsE+S;Em|)onSpM;2!fv zbHWDP(+zl2G8o;Zh;<6?f z@>bW(y5=qRZ3E`5_Pu2G3ccS=mPHS^tPh4g=$iXo^MJx0oC|x%O_oPL>#|lD_BPi% zqmk+qhfrS zara}C!AyJ&fA?X3I_*tk6f0ig!yk7f4qljJ@O$|7We#6%WnXZxWZG`VkN5R^c)X%# z{^s)ZQMK7t3-h--(?_u<3^~9%sciL@RK4*|Jjr2s zx!0O4a+wFy#_MAG5g1jl+cJkav(y84pVYwoY;CE_7~qUA_1YTVJb$xFUB>IC@NHik z?~uX}=lR=J>N1{M<7>cnG-#@3aQ^nR)XU6LJozAxmvu|MMx{osm)KG-N2yIaT47eO z)CQ$q9!18m)O8b?`uuEdsh3AFHlx(`hxqe1tJKTUtv4+7O4Bqe=Wkc3m&1MyOTF5x zGOOorPfLBNSz|7-rM|RV>M@lXsm5)o*P_%L+R6RVLM7aY&MzU`P)_Mwb2N+WB;Qxp!wU=QcsvMGj2;g!BV4q z*qLhwlkYT6c{u;au3MVd>ha^NZo@}g|9_#?zwnr@agx9L%Hz-E8XJ=b|Kda6xVNz> z`QG1t_HQzc;pBI}{rew#Q)47~{?Xrgo8K5s9{$>U|MZ^5Sn|ZD-}#)|7*F2+f&2f5 z-e zE4T2nmUsv24mIdOWei@g@RB43%8VZu>|lFH%IQIz;VW@~UMQu|x2gE3k?dV}r%c zybX;jkmqJV2Tu=9;G>A$;pW}$&Td&5Z;4jLTfv)^X4MgVtUhv#=+O=vFN-G|NxU5m zY#SQd+l{e!Jf3Vf#^Z@NX*VW_0FMap;$3*9Ph(enJzo~%#Me(5_qyz4 z+={Pn+gF-k&2zmDHfU?RalP?UNoSOtirjc-+$xXr8uHV`cz=^k$o!FrZw|r--_(aU z=<$_x8JKRyW^n-giNPkkdZoYoZ7o7Cqj1t*ZU@H9q7E_)C_dDVjz69C?3Yv3tnrQ zrd^U`qG~*Xt%IHSQJTSS+NHROs>P$&`hs2qO0^t!P%GjwY_-=cFF#|tX`>_;)#Gt& zjoD?eTjTE52JW4j@dUQ6#LIhdl_Kp*Zq4^O<+1o0xZ^~8U3p9XQ=Z%V;w@l4YtX>S z8a#Hz#gE6R^H}47HJNx4Zy@qa<_Ow1Sd;Cr21n)tDYjGjLZtBh5I_pvTZQw!I;>H?C<^T)+)E+ zwLIkw`TRdt7vVLT`BPrab-Mqo#K-&AzhlR{UN&~*zy9l)&ph^x&wT5a&%bKoyZzsN z&7*JK{_d~;bnS`veJuD>_m=xBPdzx)_`;hDubh7UQ%8UF$-kU^JooGer@#Bb&wXy+ z2fz8yRZsoTr+?*hrLTOr&^WaATbF(8f$3|W{f*PF`}4Q`@c7L)ZF}E=r-wfJ2dgrt zzc}-n-~WF8?9*4h>+!GObo-Zcd)KTPc(C_Bts0M(u6ypl+Upk-$6x-6W4(Jm+uJ_A z?n|G4%Y$o=zWc*}|NFmo?VW=kJ^XXme*Pmj?f+u+@8A8kM(+K8^596{4-TJdmlu8R z(Q3GVZ25I>+_~yAzju20(}mi^H6Q!aT{nFBkz2lhXx&}^^wxJyAG-aq69Xsy;DONl z;=}*){8K0YVgHSf{;!Yx@Tu>eIP!G2LMW0az5Ir?^Hyb{%a}|$IjFHo=nMWO&w4+( zazFonT)E%3m3zlSSN-VR)BpHarB{3pl{@^c8=iXLOZ%56zq9*a-uA;qH{bO1_YS=F z7e2b@x$5aJe(2AB=L%MmA%l|TX^UwpEhTc2)-wvKUam9h}z3Y)L{Ff)b z@}a*y^`*~j{q6NHe>(Z%AAjV&IJoQD_da@jS@pULtLeGy#VhwPDwWg4EB8tN!c-mt zYnZNf4m!u3-OhezpK}LJ(0*qR*6ekrox5-%pY`*TTj%Ybsa9gT&&J>8tVhbD_}lH= z3c^v62sl1Fkc%w;vUCdg&KbI7?J>8G*(L)f!{I)p!#gn92pe)eDT z>_u`}j!koAIf}IFG2QMQz}_z?gYv*G9|>MqmW$`IA9>vQ6LL8l;8mX&`y8%JA|5=w(~pj$=YL$r^m@$liv$pc(w+yVeVMx>b-lM$#=s1tot*}ApOVF zbq6L^>C5qX6qU?ft#;O=JH7*JSR_^T-KaR8eirTk3VF<`+px~y^zOmZ8}Z2q<7~94 zcu>aK^#VWZ*U@52dRkDRzq=KbT1=1DxzX9Mm0IdG>mBk(ghY&Y}xFN(1A#Mn9Lx>wf+z{fJ3nMn# zzfJfY#x#Oy6w?@{aZD3-Pt1i8o9y2(K1VQ(Vj9CVj%mV{hI?Wzj2O0mBlsM}G=^y$ z(}XQCOT#@e7eQ%5Yi7J{SeX*A^i~2zt~f|5$QJ~ z{YIqUi1Ztgek0PealM#Rz6t3!A^j$#--Ps=kbV==vthoNrZ9~3!$?1j^utI$jP%1u z&qn=Xn#c&!k0AXB(vKkh2-1%r{flinqewrB^rJ{Wiu9vMKZ^7(wn>d4{TR}ZA^jNA zk0JdS(!bcIHjeb;NI#DB<48Y_^y5hXVw>Ou(oZ1$1kz6+{RGlaAU#_ZTL#ZA&k$>w zHN~T4iMdy%+-?7E!zaz@4orJ6-H9C8D%rBwI(UY8mRQrQEgmsT%{}kN#J}4y-GONj zraQ637R^@4mc`b=Gt9HZnr3bBh*@gxnW_1A2c|uk?u6piz!uF`$(F^|!86RW#F}Pp z@rYS!?wP6iw+9o=nO7382DWInO13Pv4xVA2CDt@+i$}~-bI(l8Kia#lLS9L{8rY)Q zD%rBwI(UY8mRQrQEgmsT%{?>q1^<%g7Upk#-Mm$##7<1S#)(wokEkM6Sf4x==Cc=_ zlYLIxnSzHLfQKA%4m(HSAoQ!d(VclCJnbImP0BfWcG1Q6atwJ*JFl|)8h19s$7s)o z@p(Je8|=YgUq_Mq0jLd_=%WTD+T^Uod@q(5Xa6O?hp)hY+^@80-e>ac;um@&d&;{} lc9w@;xF2O-Z@UQe$YapQ(=w)3pFFbU;zz_z#Q&`$`ro>p9!&rM literal 0 HcmV?d00001 diff --git a/packages/as-sha256/build/untouched.simd.wat b/packages/as-sha256/build/untouched.simd.wat new file mode 100644 index 000000000..f7dd56d33 --- /dev/null +++ b/packages/as-sha256/build/untouched.simd.wat @@ -0,0 +1,11971 @@ +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func (param i32 i32))) + (type $2 (func)) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i64) (result i32))) + (type $8 (func (param i32 i64 i32))) + (type $9 (func (param i64 i32) (result i32))) + (type $10 (func (param i32 i64 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $assembly/utils/const/K i32 (i32.const 320)) + (global $assembly/utils/const/W64 i32 (i32.const 656)) + (global $assembly/simd/H0V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H1V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H2V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H3V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H4V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H5V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H6V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/H7V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/aV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/bV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/cV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/dV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/eV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/fV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/gV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/hV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/iV128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/t1V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/t2V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $assembly/simd/i (mut i32) (i32.const 0)) + (global $assembly/simd/tmpW (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/rt/tcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/tcms/total (mut i32) (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 1)) + (global $assembly/simd/kV128ArrayBuffer (mut i32) (i32.const 0)) + (global $assembly/simd/kV128Ptr (mut i32) (i32.const 0)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $assembly/simd/w64V12ArrayBuffer (mut i32) (i32.const 0)) + (global $assembly/simd/w64V128Ptr (mut i32) (i32.const 0)) + (global $assembly/simd/DEFAULT_H0V128 v128 (v128.const i32x4 0x6a09e667 0x6a09e667 0x6a09e667 0x6a09e667)) + (global $assembly/simd/DEFAULT_H1V128 v128 (v128.const i32x4 0xbb67ae85 0xbb67ae85 0xbb67ae85 0xbb67ae85)) + (global $assembly/simd/DEFAULT_H2V128 v128 (v128.const i32x4 0x3c6ef372 0x3c6ef372 0x3c6ef372 0x3c6ef372)) + (global $assembly/simd/DEFAULT_H3V128 v128 (v128.const i32x4 0xa54ff53a 0xa54ff53a 0xa54ff53a 0xa54ff53a)) + (global $assembly/simd/DEFAULT_H4V128 v128 (v128.const i32x4 0x510e527f 0x510e527f 0x510e527f 0x510e527f)) + (global $assembly/simd/DEFAULT_H5V128 v128 (v128.const i32x4 0x9b05688c 0x9b05688c 0x9b05688c 0x9b05688c)) + (global $assembly/simd/DEFAULT_H6V128 v128 (v128.const i32x4 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab 0x1f83d9ab)) + (global $assembly/simd/DEFAULT_H7V128 v128 (v128.const i32x4 0x5be0cd19 0x5be0cd19 0x5be0cd19 0x5be0cd19)) + (global $assembly/common/PARALLEL_FACTOR i32 (i32.const 4)) + (global $assembly/common/DIGEST_LENGTH i32 (i32.const 32)) + (global $assembly/common/INPUT_LENGTH i32 (i32.const 512)) + (global $assembly/common/kPtr (mut i32) (i32.const 0)) + (global $assembly/common/w64Ptr (mut i32) (i32.const 0)) + (global $assembly/common/H0 (mut i32) (i32.const 0)) + (global $assembly/common/H1 (mut i32) (i32.const 0)) + (global $assembly/common/H2 (mut i32) (i32.const 0)) + (global $assembly/common/H3 (mut i32) (i32.const 0)) + (global $assembly/common/H4 (mut i32) (i32.const 0)) + (global $assembly/common/H5 (mut i32) (i32.const 0)) + (global $assembly/common/H6 (mut i32) (i32.const 0)) + (global $assembly/common/H7 (mut i32) (i32.const 0)) + (global $assembly/common/a (mut i32) (i32.const 0)) + (global $assembly/common/b (mut i32) (i32.const 0)) + (global $assembly/common/c (mut i32) (i32.const 0)) + (global $assembly/common/d (mut i32) (i32.const 0)) + (global $assembly/common/e (mut i32) (i32.const 0)) + (global $assembly/common/f (mut i32) (i32.const 0)) + (global $assembly/common/g (mut i32) (i32.const 0)) + (global $assembly/common/h (mut i32) (i32.const 0)) + (global $assembly/common/i (mut i32) (i32.const 0)) + (global $assembly/common/t1 (mut i32) (i32.const 0)) + (global $assembly/common/t2 (mut i32) (i32.const 0)) + (global $assembly/common/M (mut i32) (i32.const 0)) + (global $assembly/common/mPtr (mut i32) (i32.const 0)) + (global $assembly/common/W (mut i32) (i32.const 0)) + (global $assembly/common/wPtr (mut i32) (i32.const 0)) + (global $assembly/common/input (mut i32) (i32.const 0)) + (global $assembly/common/inputPtr (mut i32) (i32.const 0)) + (global $assembly/common/output (mut i32) (i32.const 0)) + (global $assembly/common/outputPtr (mut i32) (i32.const 0)) + (global $assembly/common/mLength (mut i32) (i32.const 0)) + (global $assembly/common/bytesHashed (mut i32) (i32.const 0)) + (global $~lib/memory/__heap_base i32 (i32.const 3196)) + (memory $0 1) + (data $0 (i32.const 12) "\1c\01\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\98/\8aB\91D7q\cf\fb\c0\b5\a5\db\b5\e9[\c2V9\f1\11\f1Y\a4\82?\92\d5^\1c\ab\98\aa\07\d8\01[\83\12\be\851$\c3}\0cUt]\ber\fe\b1\de\80\a7\06\dc\9bt\f1\9b\c1\c1i\9b\e4\86G\be\ef\c6\9d\c1\0f\cc\a1\0c$o,\e9-\aa\84tJ\dc\a9\b0\\\da\88\f9vRQ>\98m\c61\a8\c8\'\03\b0\c7\7fY\bf\f3\0b\e0\c6G\91\a7\d5Qc\ca\06g))\14\85\n\b7\'8!\1b.\fcm,M\13\r8STs\ne\bb\njv.\c9\c2\81\85,r\92\a1\e8\bf\a2Kf\1a\a8p\8bK\c2\a3Ql\c7\19\e8\92\d1$\06\99\d6\855\0e\f4p\a0j\10\16\c1\a4\19\08l7\1eLwH\'\b5\bc\b04\b3\0c\1c9J\aa\d8NO\ca\9c[\f3o.h\ee\82\8ftoc\a5x\14x\c8\84\08\02\c7\8c\fa\ff\be\90\eblP\a4\f7\a3\f9\be\f2xq\c6\00\00\00\00\00\00\00\00\00\00\00\00") + (data $1 (i32.const 300) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\10\00\00\00 \00\00\00 \00\00\00\00\01\00\00@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 348) "\1c\01\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\98/\8a\c2\91D7q\cf\fb\c0\b5\a5\db\b5\e9[\c2V9\f1\11\f1Y\a4\82?\92\d5^\1c\ab\98\aa\07\d8\01[\83\12\be\851$\c3}\0cUt]\ber\fe\b1\de\80\a7\06\dc\9bt\f3\9b\c1\c1i\9bd\86G\fe\f0\c6\ed\e1\0fT\f2\0c$o4\e9O\be\84\c9l\1eA\b9a\fa\88\f9\16RQ\c6\f2mZ\8e\a8e\fc\19\b0\c7\9e\d9\b9\c31\12\9a\a0\ea\0e\e7+#\b1\fd\b0>5\c7\d5\bai0_m\97\cb\8f\11\0fZ\fd\ee\1e\dc\89\b65\n\04z\0b\de\9d\ca\f4X\16[]\e1\86>\7f\00\80\89\0872\ea\07\a57\95\abo\10a@\17\f1\d6\8c\rm;\aa\cd7\be\bb\c0\da;a\83c\a3H\db1\e9\02\0b\a7\\\d1o\ca\fa\1aR1\8431\95\1a\d4n\90xCm\f2\91\9c\c3\bd\ab\cc\9e\e6\a0\c9\b5<\b6/S\c6A\c7\d2\a3~#\07hK\95\a4v\1d\19L\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 636) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\10\00\00\00p\01\00\00p\01\00\00\00\01\00\00@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 684) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $5 (i32.const 732) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data $6 (i32.const 796) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $7 (i32.const 860) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 924) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 992) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 1020) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 1084) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $12 (i32.const 1132) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") + (data $13 (i32.const 1260) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data $14 (i32.const 1324) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data $15 (i32.const 1356) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data $16 (i32.const 1756) "\1c\04\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 2812) "\\\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") + (data $18 (i32.const 2908) "\\\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00H\00\00\00s\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 \00\00\00\00\00") + (data $19 (i32.const 3004) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $20 (i32.const 3036) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00,\00\00\00a\00s\00s\00e\00m\00b\00l\00y\00/\00u\00t\00i\00l\00s\00/\00v\001\002\008\00.\00t\00s\00") + (data $21 (i32.const 3100) "\\\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00H\00\00\00g\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 \00\00\00\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "batchHash4UintArray64s" (func $assembly/index.simd/batchHash4UintArray64s)) + (export "batchHash4HashObjectInputs" (func $assembly/index.simd/batchHash4HashObjectInputs)) + (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) + (export "input" (global $assembly/common/input)) + (export "output" (global $assembly/common/output)) + (export "init" (func $assembly/common/init)) + (export "update" (func $assembly/common/update)) + (export "final" (func $assembly/common/final)) + (export "digest" (func $assembly/common/digest)) + (export "digest64" (func $assembly/common/digest64)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/tlsf/Root#set:flMap (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $0 i32) (result i32) + local.get $0 + i32.load + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $0 i32) (result i32) + local.get $0 + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $0 i32) (result i32) + local.get $0 + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + local.get $1 + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $2 + i32.const 1 + drop + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $3 + i32.const 1 + drop + local.get $3 + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $4 + local.get $3 + i32.const 4 + i32.shr_u + local.set $5 + else + local.get $3 + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $8 + i32.const 31 + local.get $8 + i32.clz + i32.sub + local.set $4 + local.get $8 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $5 + local.get $4 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $4 + end + i32.const 1 + drop + local.get $4 + i32.const 23 + i32.lt_u + if (result i32) + local.get $5 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/tlsf/Block#get:prev + local.set $9 + local.get $1 + call $~lib/rt/tlsf/Block#get:next + local.set $10 + local.get $9 + if + local.get $9 + local.get $10 + call $~lib/rt/tlsf/Block#set:next + end + local.get $10 + if + local.get $10 + local.get $9 + call $~lib/rt/tlsf/Block#set:prev + end + local.get $1 + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $0 + local.set $11 + local.get $4 + local.set $12 + local.get $5 + local.set $13 + local.get $11 + local.get $12 + i32.const 4 + i32.shl + local.get $13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $0 + local.set $14 + local.get $4 + local.set $15 + local.get $5 + local.set $16 + local.get $10 + local.set $17 + local.get $14 + local.get $15 + i32.const 4 + i32.shl + local.get $16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $17 + i32.store offset=96 + local.get $10 + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $0 + local.set $18 + local.get $4 + local.set $19 + local.get $18 + local.get $19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $20 + local.get $0 + local.set $21 + local.get $4 + local.set $22 + local.get $20 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $20 + local.set $23 + local.get $21 + local.get $22 + i32.const 2 + i32.shl + i32.add + local.get $23 + i32.store offset=4 + local.get $20 + i32.eqz + if + local.get $0 + local.get $0 + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $4 + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + i32.const 1 + drop + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $2 + i32.const 1 + drop + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 4 + i32.add + local.get $3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $4 + local.get $4 + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $5 + local.get $5 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + i32.const 4 + i32.add + local.get $5 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $2 + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $1 + local.set $6 + local.get $6 + i32.const 4 + i32.add + local.get $6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $4 + local.get $4 + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $5 + end + local.get $2 + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $1 + local.set $7 + local.get $7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $8 + local.get $8 + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $9 + i32.const 1 + drop + local.get $9 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/removeBlock + local.get $8 + local.set $1 + local.get $1 + local.get $9 + i32.const 4 + i32.add + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $2 + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $10 + i32.const 1 + drop + local.get $10 + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $1 + i32.const 4 + i32.add + local.get $10 + i32.add + local.get $4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $10 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $11 + local.get $10 + i32.const 4 + i32.shr_u + local.set $12 + else + local.get $10 + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $15 + i32.const 31 + local.get $15 + i32.clz + i32.sub + local.set $11 + local.get $15 + local.get $11 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $12 + local.get $11 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $11 + end + i32.const 1 + drop + local.get $11 + i32.const 23 + i32.lt_u + if (result i32) + local.get $12 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $0 + local.set $16 + local.get $11 + local.set $17 + local.get $12 + local.set $18 + local.get $16 + local.get $17 + i32.const 4 + i32.shl + local.get $18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $19 + local.get $1 + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $1 + local.get $19 + call $~lib/rt/tlsf/Block#set:next + local.get $19 + if + local.get $19 + local.get $1 + call $~lib/rt/tlsf/Block#set:prev + end + local.get $0 + local.set $20 + local.get $11 + local.set $21 + local.get $12 + local.set $22 + local.get $1 + local.set $23 + local.get $20 + local.get $21 + i32.const 4 + i32.shl + local.get $22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $23 + i32.store offset=96 + local.get $0 + local.get $0 + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $11 + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $0 + local.set $26 + local.get $11 + local.set $27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $0 + local.set $24 + local.get $11 + local.set $25 + local.get $24 + local.get $25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $12 + i32.shl + i32.or + local.set $28 + local.get $26 + local.get $27 + i32.const 2 + i32.shl + i32.add + local.get $28 + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + local.get $2 + i32.wrap_i64 + local.set $3 + i32.const 1 + drop + local.get $1 + i64.extend_i32_u + local.get $2 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $3 + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $3 + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $4 + local.get $4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $5 + i32.const 0 + local.set $6 + local.get $5 + if + i32.const 1 + drop + local.get $1 + local.get $5 + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $5 + i32.eq + if + local.get $1 + i32.const 16 + i32.sub + local.set $1 + local.get $5 + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $6 + else + end + else + i32.const 1 + drop + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + local.get $1 + i32.sub + local.set $7 + local.get $7 + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $7 + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $8 + local.get $1 + local.set $9 + local.get $9 + local.get $8 + i32.const 1 + i32.or + local.get $6 + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $9 + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $9 + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $1 + i32.const 4 + i32.add + local.get $8 + i32.add + local.set $5 + local.get $5 + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $0 + local.set $10 + local.get $5 + local.set $11 + local.get $10 + local.get $11 + i32.store offset=1568 + local.get $0 + local.get $9 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + memory.size + local.set $1 + local.get $0 + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $3 + local.set $4 + i32.const 0 + local.set $5 + local.get $4 + local.get $5 + i32.store offset=1568 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + i32.const 23 + i32.lt_u + if + local.get $3 + local.set $7 + local.get $6 + local.set $8 + i32.const 0 + local.set $9 + local.get $7 + local.get $8 + i32.const 2 + i32.shl + i32.add + local.get $9 + i32.store offset=4 + i32.const 0 + local.set $10 + loop $for-loop|1 + local.get $10 + i32.const 16 + i32.lt_u + if + local.get $3 + local.set $11 + local.get $6 + local.set $12 + local.get $10 + local.set $13 + i32.const 0 + local.set $14 + local.get $11 + local.get $12 + i32.const 4 + i32.shl + local.get $13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $14 + i32.store offset=96 + local.get $10 + i32.const 1 + i32.add + local.set $10 + br $for-loop|1 + end + end + local.get $6 + i32.const 1 + i32.add + local.set $6 + br $for-loop|0 + end + end + local.get $0 + i32.const 1572 + i32.add + local.set $15 + i32.const 0 + drop + local.get $3 + local.get $15 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/computeSize (param $0 i32) (result i32) + local.get $0 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $0 + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 816 + i32.const 944 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $0 i32) (result i32) + local.get $0 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $0 + i32.const 1 + i32.const 27 + local.get $0 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $0 + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $2 + local.get $1 + i32.const 4 + i32.shr_u + local.set $3 + else + local.get $1 + call $~lib/rt/tlsf/roundSize + local.set $4 + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $4 + i32.clz + i32.sub + local.set $2 + local.get $4 + local.get $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $3 + local.get $2 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $2 + end + i32.const 1 + drop + local.get $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $3 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $0 + local.set $5 + local.get $2 + local.set $6 + local.get $5 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $7 + i32.const 0 + local.set $8 + local.get $7 + i32.eqz + if + local.get $0 + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.set $9 + local.get $9 + i32.eqz + if + i32.const 0 + local.set $8 + else + local.get $9 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $10 + local.get $2 + local.set $11 + local.get $10 + local.get $11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $7 + i32.const 1 + drop + local.get $7 + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $12 + local.get $2 + local.set $13 + local.get $7 + i32.ctz + local.set $14 + local.get $12 + local.get $13 + i32.const 4 + i32.shl + local.get $14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $8 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $15 + local.get $2 + local.set $16 + local.get $7 + i32.ctz + local.set $17 + local.get $15 + local.get $16 + i32.const 4 + i32.shl + local.get $17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $8 + end + local.get $8 + return + ) + (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + i32.const 0 + drop + local.get $1 + i32.const 256 + i32.ge_u + if + local.get $1 + call $~lib/rt/tlsf/roundSize + local.set $1 + end + memory.size + local.set $2 + local.get $1 + i32.const 4 + local.get $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $1 + local.get $1 + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $4 + local.get $2 + local.tee $5 + local.get $4 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $7 + local.get $7 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $8 + local.get $0 + local.get $2 + i32.const 16 + i32.shl + local.get $8 + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $3 + i32.const 1 + drop + local.get $2 + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.sub + local.set $4 + local.get $4 + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + local.set $5 + local.get $5 + local.get $4 + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $0 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $1 + local.set $7 + local.get $7 + i32.const 4 + i32.add + local.get $7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $1 + local.set $6 + local.get $6 + i32.const 4 + i32.add + local.get $6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + i32.const 1 + drop + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $3 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $3 + local.get $2 + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $3 + return + ) + (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/tcms/Object#set:rtId (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/rt/tcms/Object#set:rtSize (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/rt/tcms/Object#set:nextWithColor (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/rt/tcms/Object#set:prev (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/rt/tcms/initLazy (param $0 i32) (result i32) + local.get $0 + local.get $0 + call $~lib/rt/tcms/Object#set:nextWithColor + local.get $0 + local.get $0 + call $~lib/rt/tcms/Object#set:prev + local.get $0 + return + ) + (func $~lib/rt/tcms/Object#get:prev (param $0 i32) (result i32) + local.get $0 + i32.load offset=8 + ) + (func $~lib/rt/tcms/Object#get:nextWithColor (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + ) + (func $~lib/rt/tcms/Object#set:next (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + local.get $0 + call $~lib/rt/tcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/tcms/Object#set:nextWithColor + ) + (func $~lib/rt/tcms/Object#linkTo (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + call $~lib/rt/tcms/Object#get:prev + local.set $3 + local.get $0 + local.get $1 + local.get $2 + i32.or + call $~lib/rt/tcms/Object#set:nextWithColor + local.get $0 + local.get $3 + call $~lib/rt/tcms/Object#set:prev + local.get $3 + local.get $0 + call $~lib/rt/tcms/Object#set:next + local.get $1 + local.get $0 + call $~lib/rt/tcms/Object#set:prev + ) + (func $~lib/rt/tcms/Object#get:size (param $0 i32) (result i32) + i32.const 4 + local.get $0 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + i32.const 1073741804 + i32.gt_u + if + i32.const 816 + i32.const 880 + i32.const 125 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + i32.const 16 + local.get $0 + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/tcms/Object#set:rtId + local.get $2 + local.get $0 + call $~lib/rt/tcms/Object#set:rtSize + local.get $2 + global.get $~lib/rt/tcms/fromSpace + global.get $~lib/rt/tcms/white + call $~lib/rt/tcms/Object#linkTo + global.get $~lib/rt/tcms/total + local.get $2 + call $~lib/rt/tcms/Object#get:size + i32.add + global.set $~lib/rt/tcms/total + local.get $2 + i32.const 20 + i32.add + return + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 704 + i32.const 752 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + call $~lib/rt/tcms/__new + local.set $2 + i32.const 1 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $2 + i32.const 0 + local.get $1 + memory.fill + local.get $2 + return + ) + (func $~lib/array/Array#get:length_ (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + ) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + local.get $0 + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 1040 + i32.const 1104 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/array/Array#get:dataStart + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $2 + i32.const 0 + drop + local.get $2 + return + ) + (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32) + local.get $0 + i32.const 100000 + i32.lt_u + if + local.get $0 + i32.const 100 + i32.lt_u + if + i32.const 1 + local.get $0 + i32.const 10 + i32.ge_u + i32.add + return + else + i32.const 3 + local.get $0 + i32.const 10000 + i32.ge_u + i32.add + local.get $0 + i32.const 1000 + i32.ge_u + i32.add + return + end + unreachable + else + local.get $0 + i32.const 10000000 + i32.lt_u + if + i32.const 6 + local.get $0 + i32.const 1000000 + i32.ge_u + i32.add + return + else + i32.const 8 + local.get $0 + i32.const 1000000000 + i32.ge_u + i32.add + local.get $0 + i32.const 100000000 + i32.ge_u + i32.add + return + end + unreachable + end + unreachable + ) + (func $~lib/util/number/utoa32_dec_lut (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i64) + (local $8 i64) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + if + local.get $1 + i32.const 10000 + i32.div_u + local.set $3 + local.get $1 + i32.const 10000 + i32.rem_u + local.set $4 + local.get $3 + local.set $1 + local.get $4 + i32.const 100 + i32.div_u + local.set $5 + local.get $4 + i32.const 100 + i32.rem_u + local.set $6 + i32.const 1356 + local.get $5 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.set $7 + i32.const 1356 + local.get $6 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.set $8 + local.get $2 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + local.get $2 + i32.const 1 + i32.shl + i32.add + local.get $7 + local.get $8 + i64.const 32 + i64.shl + i64.or + i64.store + br $while-continue|0 + end + end + local.get $1 + i32.const 100 + i32.ge_u + if + local.get $1 + i32.const 100 + i32.div_u + local.set $9 + local.get $1 + i32.const 100 + i32.rem_u + local.set $10 + local.get $9 + local.set $1 + local.get $2 + i32.const 2 + i32.sub + local.set $2 + i32.const 1356 + local.get $10 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $11 + local.get $0 + local.get $2 + i32.const 1 + i32.shl + i32.add + local.get $11 + i32.store + end + local.get $1 + i32.const 10 + i32.ge_u + if + local.get $2 + i32.const 2 + i32.sub + local.set $2 + i32.const 1356 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $12 + local.get $0 + local.get $2 + i32.const 1 + i32.shl + i32.add + local.get $12 + i32.store + else + local.get $2 + i32.const 1 + i32.sub + local.set $2 + i32.const 48 + local.get $1 + i32.add + local.set $13 + local.get $0 + local.get $2 + i32.const 1 + i32.shl + i32.add + local.get $13 + i32.store16 + end + ) + (func $~lib/util/number/utoa_hex_lut (param $0 i32) (param $1 i64) (param $2 i32) + loop $while-continue|0 + local.get $2 + i32.const 2 + i32.ge_u + if + local.get $2 + i32.const 2 + i32.sub + local.set $2 + local.get $0 + local.get $2 + i32.const 1 + i32.shl + i32.add + i32.const 1776 + local.get $1 + i32.wrap_i64 + i32.const 255 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $1 + i64.const 8 + i64.shr_u + local.set $1 + br $while-continue|0 + end + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + i32.const 1776 + local.get $1 + i32.wrap_i64 + i32.const 6 + i32.shl + i32.add + i32.load16_u + i32.store16 + end + ) + (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i64) + (local $4 i64) + (local $5 i32) + block $~lib/util/number/isPowerOf2|inlined.0 (result i32) + local.get $1 + local.set $2 + local.get $2 + i32.popcnt + i32.const 1 + i32.eq + br $~lib/util/number/isPowerOf2|inlined.0 + end + if + i32.const 63 + local.get $0 + i64.clz + i32.wrap_i64 + i32.sub + i32.const 31 + local.get $1 + i32.clz + i32.sub + i32.div_u + i32.const 1 + i32.add + return + end + local.get $1 + i64.extend_i32_s + local.set $3 + local.get $3 + local.set $4 + i32.const 1 + local.set $5 + loop $while-continue|0 + local.get $0 + local.get $4 + i64.ge_u + if + local.get $0 + local.get $4 + i64.div_u + local.set $0 + local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 + i32.const 1 + i32.shl + local.set $5 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $0 + i64.const 1 + i64.ge_u + if + local.get $0 + local.get $3 + i64.div_u + local.set $0 + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $while-continue|1 + end + end + local.get $5 + i32.const 1 + i32.sub + return + ) + (func $~lib/util/number/utoa64_any_core (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i32) + (local $4 i64) + (local $5 i64) + (local $6 i64) + (local $7 i64) + local.get $3 + i64.extend_i32_s + local.set $4 + local.get $3 + local.get $3 + i32.const 1 + i32.sub + i32.and + i32.const 0 + i32.eq + if + local.get $3 + i32.ctz + i32.const 7 + i32.and + i64.extend_i32_s + local.set $5 + local.get $4 + i64.const 1 + i64.sub + local.set $6 + loop $do-loop|0 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + local.get $0 + local.get $2 + i32.const 1 + i32.shl + i32.add + i32.const 2832 + local.get $1 + local.get $6 + i64.and + i32.wrap_i64 + i32.const 1 + i32.shl + i32.add + i32.load16_u + i32.store16 + local.get $1 + local.get $5 + i64.shr_u + local.set $1 + local.get $1 + i64.const 0 + i64.ne + br_if $do-loop|0 + end + else + loop $do-loop|1 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + local.get $1 + local.get $4 + i64.div_u + local.set $7 + local.get $0 + local.get $2 + i32.const 1 + i32.shl + i32.add + i32.const 2832 + local.get $1 + local.get $7 + local.get $4 + i64.mul + i64.sub + i32.wrap_i64 + i32.const 1 + i32.shl + i32.add + i32.load16_u + i32.store16 + local.get $7 + local.set $1 + local.get $1 + i64.const 0 + i64.ne + br_if $do-loop|1 + end + end + ) + (func $~lib/util/number/itoa32 (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + local.get $1 + i32.const 2 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 36 + i32.gt_s + end + if + i32.const 1152 + i32.const 1280 + i32.const 373 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.eqz + if + i32.const 1344 + return + end + local.get $0 + i32.const 31 + i32.shr_u + i32.const 1 + i32.shl + local.set $2 + local.get $2 + if + i32.const 0 + local.get $0 + i32.sub + local.set $0 + end + local.get $1 + i32.const 10 + i32.eq + if + local.get $0 + call $~lib/util/number/decimalCount32 + local.set $4 + local.get $4 + i32.const 1 + i32.shl + local.get $2 + i32.add + i32.const 2 + call $~lib/rt/tcms/__new + local.set $3 + local.get $3 + local.get $2 + i32.add + local.set $5 + local.get $0 + local.set $6 + local.get $4 + local.set $7 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $5 + local.get $6 + local.get $7 + call $~lib/util/number/utoa32_dec_lut + else + local.get $1 + i32.const 16 + i32.eq + if + i32.const 31 + local.get $0 + i32.clz + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $8 + local.get $8 + i32.const 1 + i32.shl + local.get $2 + i32.add + i32.const 2 + call $~lib/rt/tcms/__new + local.set $3 + local.get $3 + local.get $2 + i32.add + local.set $9 + local.get $0 + local.set $10 + local.get $8 + local.set $11 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $9 + local.get $10 + i64.extend_i32_u + local.get $11 + call $~lib/util/number/utoa_hex_lut + else + local.get $0 + local.set $12 + local.get $12 + i64.extend_i32_u + local.get $1 + call $~lib/util/number/ulog_base + local.set $13 + local.get $13 + i32.const 1 + i32.shl + local.get $2 + i32.add + i32.const 2 + call $~lib/rt/tcms/__new + local.set $3 + local.get $3 + local.get $2 + i32.add + local.get $12 + i64.extend_i32_u + local.get $13 + local.get $1 + call $~lib/util/number/utoa64_any_core + end + end + local.get $2 + if + local.get $3 + i32.const 45 + i32.store16 + end + local.get $3 + return + ) + (func $~lib/number/I32#toString (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + call $~lib/util/number/itoa32 + return + ) + (func $~lib/rt/common/OBJECT#get:rtSize (param $0 i32) (result i32) + local.get $0 + i32.load offset=16 + ) + (func $~lib/string/String#get:length (param $0 i32) (result i32) + local.get $0 + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.const 1 + i32.shr_u + return + ) + (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $2 + local.get $1 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $3 + local.get $2 + local.get $3 + i32.add + local.set $4 + local.get $4 + i32.const 0 + i32.eq + if + i32.const 3024 + return + end + local.get $4 + i32.const 2 + call $~lib/rt/tcms/__new + local.set $5 + local.get $5 + local.get $0 + local.get $2 + memory.copy + local.get $5 + local.get $2 + i32.add + local.get $1 + local.get $3 + memory.copy + local.get $5 + return + ) + (func $start:assembly/simd + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 v128) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 v128) + (local $9 i32) + i32.const 992 + call $~lib/rt/tcms/initLazy + global.set $~lib/rt/tcms/fromSpace + i32.const 0 + i32.const 4 + i32.const 64 + i32.mul + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/simd/kV128ArrayBuffer + global.get $assembly/simd/kV128ArrayBuffer + global.set $assembly/simd/kV128Ptr + i32.const 0 + local.set $0 + loop $for-loop|0 + local.get $0 + i32.const 64 + i32.lt_s + if + global.get $assembly/simd/kV128Ptr + local.set $1 + local.get $0 + local.set $2 + global.get $assembly/utils/const/K + local.get $0 + call $~lib/array/Array#__get + i32x4.splat + local.set $3 + block $break|1 + block $case64|1 + block $case63|1 + block $case62|1 + block $case61|1 + block $case60|1 + block $case59|1 + block $case58|1 + block $case57|1 + block $case56|1 + block $case55|1 + block $case54|1 + block $case53|1 + block $case52|1 + block $case51|1 + block $case50|1 + block $case49|1 + block $case48|1 + block $case47|1 + block $case46|1 + block $case45|1 + block $case44|1 + block $case43|1 + block $case42|1 + block $case41|1 + block $case40|1 + block $case39|1 + block $case38|1 + block $case37|1 + block $case36|1 + block $case35|1 + block $case34|1 + block $case33|1 + block $case32|1 + block $case31|1 + block $case30|1 + block $case29|1 + block $case28|1 + block $case27|1 + block $case26|1 + block $case25|1 + block $case24|1 + block $case23|1 + block $case22|1 + block $case21|1 + block $case20|1 + block $case19|1 + block $case18|1 + block $case17|1 + block $case16|1 + block $case15|1 + block $case14|1 + block $case13|1 + block $case12|1 + block $case11|1 + block $case10|1 + block $case9|1 + block $case8|1 + block $case7|1 + block $case6|1 + block $case5|1 + block $case4|1 + block $case3|1 + block $case2|1 + block $case1|1 + block $case0|1 + local.get $2 + local.set $4 + local.get $4 + i32.const 0 + i32.eq + br_if $case0|1 + local.get $4 + i32.const 1 + i32.eq + br_if $case1|1 + local.get $4 + i32.const 2 + i32.eq + br_if $case2|1 + local.get $4 + i32.const 3 + i32.eq + br_if $case3|1 + local.get $4 + i32.const 4 + i32.eq + br_if $case4|1 + local.get $4 + i32.const 5 + i32.eq + br_if $case5|1 + local.get $4 + i32.const 6 + i32.eq + br_if $case6|1 + local.get $4 + i32.const 7 + i32.eq + br_if $case7|1 + local.get $4 + i32.const 8 + i32.eq + br_if $case8|1 + local.get $4 + i32.const 9 + i32.eq + br_if $case9|1 + local.get $4 + i32.const 10 + i32.eq + br_if $case10|1 + local.get $4 + i32.const 11 + i32.eq + br_if $case11|1 + local.get $4 + i32.const 12 + i32.eq + br_if $case12|1 + local.get $4 + i32.const 13 + i32.eq + br_if $case13|1 + local.get $4 + i32.const 14 + i32.eq + br_if $case14|1 + local.get $4 + i32.const 15 + i32.eq + br_if $case15|1 + local.get $4 + i32.const 16 + i32.eq + br_if $case16|1 + local.get $4 + i32.const 17 + i32.eq + br_if $case17|1 + local.get $4 + i32.const 18 + i32.eq + br_if $case18|1 + local.get $4 + i32.const 19 + i32.eq + br_if $case19|1 + local.get $4 + i32.const 20 + i32.eq + br_if $case20|1 + local.get $4 + i32.const 21 + i32.eq + br_if $case21|1 + local.get $4 + i32.const 22 + i32.eq + br_if $case22|1 + local.get $4 + i32.const 23 + i32.eq + br_if $case23|1 + local.get $4 + i32.const 24 + i32.eq + br_if $case24|1 + local.get $4 + i32.const 25 + i32.eq + br_if $case25|1 + local.get $4 + i32.const 26 + i32.eq + br_if $case26|1 + local.get $4 + i32.const 27 + i32.eq + br_if $case27|1 + local.get $4 + i32.const 28 + i32.eq + br_if $case28|1 + local.get $4 + i32.const 29 + i32.eq + br_if $case29|1 + local.get $4 + i32.const 30 + i32.eq + br_if $case30|1 + local.get $4 + i32.const 31 + i32.eq + br_if $case31|1 + local.get $4 + i32.const 32 + i32.eq + br_if $case32|1 + local.get $4 + i32.const 33 + i32.eq + br_if $case33|1 + local.get $4 + i32.const 34 + i32.eq + br_if $case34|1 + local.get $4 + i32.const 35 + i32.eq + br_if $case35|1 + local.get $4 + i32.const 36 + i32.eq + br_if $case36|1 + local.get $4 + i32.const 37 + i32.eq + br_if $case37|1 + local.get $4 + i32.const 38 + i32.eq + br_if $case38|1 + local.get $4 + i32.const 39 + i32.eq + br_if $case39|1 + local.get $4 + i32.const 40 + i32.eq + br_if $case40|1 + local.get $4 + i32.const 41 + i32.eq + br_if $case41|1 + local.get $4 + i32.const 42 + i32.eq + br_if $case42|1 + local.get $4 + i32.const 43 + i32.eq + br_if $case43|1 + local.get $4 + i32.const 44 + i32.eq + br_if $case44|1 + local.get $4 + i32.const 45 + i32.eq + br_if $case45|1 + local.get $4 + i32.const 46 + i32.eq + br_if $case46|1 + local.get $4 + i32.const 47 + i32.eq + br_if $case47|1 + local.get $4 + i32.const 48 + i32.eq + br_if $case48|1 + local.get $4 + i32.const 49 + i32.eq + br_if $case49|1 + local.get $4 + i32.const 50 + i32.eq + br_if $case50|1 + local.get $4 + i32.const 51 + i32.eq + br_if $case51|1 + local.get $4 + i32.const 52 + i32.eq + br_if $case52|1 + local.get $4 + i32.const 53 + i32.eq + br_if $case53|1 + local.get $4 + i32.const 54 + i32.eq + br_if $case54|1 + local.get $4 + i32.const 55 + i32.eq + br_if $case55|1 + local.get $4 + i32.const 56 + i32.eq + br_if $case56|1 + local.get $4 + i32.const 57 + i32.eq + br_if $case57|1 + local.get $4 + i32.const 58 + i32.eq + br_if $case58|1 + local.get $4 + i32.const 59 + i32.eq + br_if $case59|1 + local.get $4 + i32.const 60 + i32.eq + br_if $case60|1 + local.get $4 + i32.const 61 + i32.eq + br_if $case61|1 + local.get $4 + i32.const 62 + i32.eq + br_if $case62|1 + local.get $4 + i32.const 63 + i32.eq + br_if $case63|1 + br $case64|1 + end + local.get $1 + local.get $3 + v128.store + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=16 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=32 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=48 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=64 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=80 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=96 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=112 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=128 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=144 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=160 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=176 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=192 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=208 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=224 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=240 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=256 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=272 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=288 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=304 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=320 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=336 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=352 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=368 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=384 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=400 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=416 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=432 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=448 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=464 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=480 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=496 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=512 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=528 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=544 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=560 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=576 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=592 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=608 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=624 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=640 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=656 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=672 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=688 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=704 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=720 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=736 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=752 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=768 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=784 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=800 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=816 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=832 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=848 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=864 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=880 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=896 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=912 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=928 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=944 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=960 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=976 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=992 + br $break|1 + end + local.get $1 + local.get $3 + v128.store offset=1008 + br $break|1 + end + i32.const 2928 + local.get $2 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 201 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 0 + i32.const 4 + i32.const 64 + i32.mul + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/simd/w64V12ArrayBuffer + global.get $assembly/simd/w64V12ArrayBuffer + global.set $assembly/simd/w64V128Ptr + i32.const 0 + local.set $5 + loop $for-loop|2 + local.get $5 + i32.const 64 + i32.lt_s + if + global.get $assembly/simd/w64V128Ptr + local.set $6 + local.get $5 + local.set $7 + global.get $assembly/utils/const/W64 + local.get $5 + call $~lib/array/Array#__get + i32x4.splat + local.set $8 + block $break|3 + block $case64|3 + block $case63|3 + block $case62|3 + block $case61|3 + block $case60|3 + block $case59|3 + block $case58|3 + block $case57|3 + block $case56|3 + block $case55|3 + block $case54|3 + block $case53|3 + block $case52|3 + block $case51|3 + block $case50|3 + block $case49|3 + block $case48|3 + block $case47|3 + block $case46|3 + block $case45|3 + block $case44|3 + block $case43|3 + block $case42|3 + block $case41|3 + block $case40|3 + block $case39|3 + block $case38|3 + block $case37|3 + block $case36|3 + block $case35|3 + block $case34|3 + block $case33|3 + block $case32|3 + block $case31|3 + block $case30|3 + block $case29|3 + block $case28|3 + block $case27|3 + block $case26|3 + block $case25|3 + block $case24|3 + block $case23|3 + block $case22|3 + block $case21|3 + block $case20|3 + block $case19|3 + block $case18|3 + block $case17|3 + block $case16|3 + block $case15|3 + block $case14|3 + block $case13|3 + block $case12|3 + block $case11|3 + block $case10|3 + block $case9|3 + block $case8|3 + block $case7|3 + block $case6|3 + block $case5|3 + block $case4|3 + block $case3|3 + block $case2|3 + block $case1|3 + block $case0|3 + local.get $7 + local.set $9 + local.get $9 + i32.const 0 + i32.eq + br_if $case0|3 + local.get $9 + i32.const 1 + i32.eq + br_if $case1|3 + local.get $9 + i32.const 2 + i32.eq + br_if $case2|3 + local.get $9 + i32.const 3 + i32.eq + br_if $case3|3 + local.get $9 + i32.const 4 + i32.eq + br_if $case4|3 + local.get $9 + i32.const 5 + i32.eq + br_if $case5|3 + local.get $9 + i32.const 6 + i32.eq + br_if $case6|3 + local.get $9 + i32.const 7 + i32.eq + br_if $case7|3 + local.get $9 + i32.const 8 + i32.eq + br_if $case8|3 + local.get $9 + i32.const 9 + i32.eq + br_if $case9|3 + local.get $9 + i32.const 10 + i32.eq + br_if $case10|3 + local.get $9 + i32.const 11 + i32.eq + br_if $case11|3 + local.get $9 + i32.const 12 + i32.eq + br_if $case12|3 + local.get $9 + i32.const 13 + i32.eq + br_if $case13|3 + local.get $9 + i32.const 14 + i32.eq + br_if $case14|3 + local.get $9 + i32.const 15 + i32.eq + br_if $case15|3 + local.get $9 + i32.const 16 + i32.eq + br_if $case16|3 + local.get $9 + i32.const 17 + i32.eq + br_if $case17|3 + local.get $9 + i32.const 18 + i32.eq + br_if $case18|3 + local.get $9 + i32.const 19 + i32.eq + br_if $case19|3 + local.get $9 + i32.const 20 + i32.eq + br_if $case20|3 + local.get $9 + i32.const 21 + i32.eq + br_if $case21|3 + local.get $9 + i32.const 22 + i32.eq + br_if $case22|3 + local.get $9 + i32.const 23 + i32.eq + br_if $case23|3 + local.get $9 + i32.const 24 + i32.eq + br_if $case24|3 + local.get $9 + i32.const 25 + i32.eq + br_if $case25|3 + local.get $9 + i32.const 26 + i32.eq + br_if $case26|3 + local.get $9 + i32.const 27 + i32.eq + br_if $case27|3 + local.get $9 + i32.const 28 + i32.eq + br_if $case28|3 + local.get $9 + i32.const 29 + i32.eq + br_if $case29|3 + local.get $9 + i32.const 30 + i32.eq + br_if $case30|3 + local.get $9 + i32.const 31 + i32.eq + br_if $case31|3 + local.get $9 + i32.const 32 + i32.eq + br_if $case32|3 + local.get $9 + i32.const 33 + i32.eq + br_if $case33|3 + local.get $9 + i32.const 34 + i32.eq + br_if $case34|3 + local.get $9 + i32.const 35 + i32.eq + br_if $case35|3 + local.get $9 + i32.const 36 + i32.eq + br_if $case36|3 + local.get $9 + i32.const 37 + i32.eq + br_if $case37|3 + local.get $9 + i32.const 38 + i32.eq + br_if $case38|3 + local.get $9 + i32.const 39 + i32.eq + br_if $case39|3 + local.get $9 + i32.const 40 + i32.eq + br_if $case40|3 + local.get $9 + i32.const 41 + i32.eq + br_if $case41|3 + local.get $9 + i32.const 42 + i32.eq + br_if $case42|3 + local.get $9 + i32.const 43 + i32.eq + br_if $case43|3 + local.get $9 + i32.const 44 + i32.eq + br_if $case44|3 + local.get $9 + i32.const 45 + i32.eq + br_if $case45|3 + local.get $9 + i32.const 46 + i32.eq + br_if $case46|3 + local.get $9 + i32.const 47 + i32.eq + br_if $case47|3 + local.get $9 + i32.const 48 + i32.eq + br_if $case48|3 + local.get $9 + i32.const 49 + i32.eq + br_if $case49|3 + local.get $9 + i32.const 50 + i32.eq + br_if $case50|3 + local.get $9 + i32.const 51 + i32.eq + br_if $case51|3 + local.get $9 + i32.const 52 + i32.eq + br_if $case52|3 + local.get $9 + i32.const 53 + i32.eq + br_if $case53|3 + local.get $9 + i32.const 54 + i32.eq + br_if $case54|3 + local.get $9 + i32.const 55 + i32.eq + br_if $case55|3 + local.get $9 + i32.const 56 + i32.eq + br_if $case56|3 + local.get $9 + i32.const 57 + i32.eq + br_if $case57|3 + local.get $9 + i32.const 58 + i32.eq + br_if $case58|3 + local.get $9 + i32.const 59 + i32.eq + br_if $case59|3 + local.get $9 + i32.const 60 + i32.eq + br_if $case60|3 + local.get $9 + i32.const 61 + i32.eq + br_if $case61|3 + local.get $9 + i32.const 62 + i32.eq + br_if $case62|3 + local.get $9 + i32.const 63 + i32.eq + br_if $case63|3 + br $case64|3 + end + local.get $6 + local.get $8 + v128.store + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=16 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=32 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=48 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=64 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=80 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=96 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=112 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=128 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=144 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=160 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=176 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=192 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=208 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=224 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=240 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=256 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=272 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=288 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=304 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=320 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=336 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=352 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=368 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=384 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=400 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=416 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=432 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=448 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=464 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=480 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=496 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=512 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=528 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=544 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=560 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=576 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=592 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=608 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=624 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=640 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=656 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=672 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=688 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=704 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=720 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=736 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=752 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=768 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=784 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=800 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=816 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=832 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=848 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=864 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=880 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=896 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=912 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=928 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=944 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=960 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=976 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=992 + br $break|3 + end + local.get $6 + local.get $8 + v128.store offset=1008 + br $break|3 + end + i32.const 2928 + local.get $7 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 201 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|2 + end + end + ) + (func $start:assembly/common + global.get $assembly/utils/const/K + call $~lib/array/Array#get:dataStart + global.set $assembly/common/kPtr + global.get $assembly/utils/const/W64 + call $~lib/array/Array#get:dataStart + global.set $assembly/common/w64Ptr + i32.const 0 + i32.const 64 + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/M + global.get $assembly/common/M + global.set $assembly/common/mPtr + i32.const 0 + i32.const 256 + global.get $assembly/common/PARALLEL_FACTOR + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/W + global.get $assembly/common/W + global.set $assembly/common/wPtr + i32.const 0 + global.get $assembly/common/INPUT_LENGTH + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/input + global.get $assembly/common/input + global.set $assembly/common/inputPtr + i32.const 0 + global.get $assembly/common/DIGEST_LENGTH + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/output + global.get $assembly/common/output + global.set $assembly/common/outputPtr + ) + (func $start:assembly/index.simd + call $start:assembly/simd + call $start:assembly/common + ) + (func $assembly/simd/initV128 + global.get $assembly/simd/DEFAULT_H0V128 + global.set $assembly/simd/H0V128 + global.get $assembly/simd/DEFAULT_H1V128 + global.set $assembly/simd/H1V128 + global.get $assembly/simd/DEFAULT_H2V128 + global.set $assembly/simd/H2V128 + global.get $assembly/simd/DEFAULT_H3V128 + global.set $assembly/simd/H3V128 + global.get $assembly/simd/DEFAULT_H4V128 + global.set $assembly/simd/H4V128 + global.get $assembly/simd/DEFAULT_H5V128 + global.set $assembly/simd/H5V128 + global.get $assembly/simd/DEFAULT_H6V128 + global.set $assembly/simd/H6V128 + global.get $assembly/simd/DEFAULT_H7V128 + global.set $assembly/simd/H7V128 + ) + (func $assembly/simd/hashPreCompWV128 + (local $0 v128) + (local $1 v128) + (local $2 i32) + (local $3 i32) + (local $4 v128) + (local $5 v128) + (local $6 v128) + (local $7 i32) + (local $8 i32) + (local $9 v128) + (local $10 v128) + (local $11 v128) + (local $12 i32) + (local $13 i32) + (local $14 v128) + (local $15 v128) + (local $16 v128) + (local $17 v128) + (local $18 v128) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 v128) + (local $23 v128) + (local $24 i32) + (local $25 i32) + (local $26 v128) + (local $27 v128) + (local $28 v128) + (local $29 i32) + (local $30 i32) + (local $31 v128) + (local $32 v128) + (local $33 v128) + (local $34 i32) + (local $35 i32) + (local $36 v128) + (local $37 v128) + (local $38 v128) + (local $39 v128) + (local $40 v128) + global.get $assembly/simd/H0V128 + global.set $assembly/simd/aV128 + global.get $assembly/simd/H1V128 + global.set $assembly/simd/bV128 + global.get $assembly/simd/H2V128 + global.set $assembly/simd/cV128 + global.get $assembly/simd/H3V128 + global.set $assembly/simd/dV128 + global.get $assembly/simd/H4V128 + global.set $assembly/simd/eV128 + global.get $assembly/simd/H5V128 + global.set $assembly/simd/fV128 + global.get $assembly/simd/H6V128 + global.set $assembly/simd/gV128 + global.get $assembly/simd/H7V128 + global.set $assembly/simd/hV128 + i32.const 0 + global.set $assembly/simd/i + loop $for-loop|0 + global.get $assembly/simd/i + i32.const 64 + i32.lt_s + if + global.get $assembly/simd/hV128 + block $assembly/simd/EP1V128|inlined.1 (result v128) + global.get $assembly/simd/eV128 + local.set $0 + block $assembly/simd/rotrV128|inlined.10 (result v128) + local.get $0 + local.set $1 + i32.const 6 + local.set $2 + i32.const 32 + local.get $2 + i32.sub + local.set $3 + local.get $1 + local.get $2 + i32x4.shr_u + local.set $4 + local.get $1 + local.get $3 + i32x4.shl + local.set $5 + local.get $4 + local.get $5 + v128.or + br $assembly/simd/rotrV128|inlined.10 + end + block $assembly/simd/rotrV128|inlined.11 (result v128) + local.get $0 + local.set $6 + i32.const 11 + local.set $7 + i32.const 32 + local.get $7 + i32.sub + local.set $8 + local.get $6 + local.get $7 + i32x4.shr_u + local.set $9 + local.get $6 + local.get $8 + i32x4.shl + local.set $10 + local.get $9 + local.get $10 + v128.or + br $assembly/simd/rotrV128|inlined.11 + end + v128.xor + block $assembly/simd/rotrV128|inlined.12 (result v128) + local.get $0 + local.set $11 + i32.const 25 + local.set $12 + i32.const 32 + local.get $12 + i32.sub + local.set $13 + local.get $11 + local.get $12 + i32x4.shr_u + local.set $14 + local.get $11 + local.get $13 + i32x4.shl + local.set $15 + local.get $14 + local.get $15 + v128.or + br $assembly/simd/rotrV128|inlined.12 + end + v128.xor + br $assembly/simd/EP1V128|inlined.1 + end + i32x4.add + block $assembly/simd/CHV128|inlined.1 (result v128) + global.get $assembly/simd/eV128 + local.set $16 + global.get $assembly/simd/fV128 + local.set $17 + global.get $assembly/simd/gV128 + local.set $18 + local.get $16 + local.get $17 + v128.and + local.get $16 + v128.not + local.get $18 + v128.and + v128.xor + br $assembly/simd/CHV128|inlined.1 + end + i32x4.add + block $assembly/utils/v128/getV128|inlined.6 (result v128) + global.get $assembly/simd/w64V128Ptr + local.set $19 + global.get $assembly/simd/i + local.set $20 + block $case64|1 + block $case63|1 + block $case62|1 + block $case61|1 + block $case60|1 + block $case59|1 + block $case58|1 + block $case57|1 + block $case56|1 + block $case55|1 + block $case54|1 + block $case53|1 + block $case52|1 + block $case51|1 + block $case50|1 + block $case49|1 + block $case48|1 + block $case47|1 + block $case46|1 + block $case45|1 + block $case44|1 + block $case43|1 + block $case42|1 + block $case41|1 + block $case40|1 + block $case39|1 + block $case38|1 + block $case37|1 + block $case36|1 + block $case35|1 + block $case34|1 + block $case33|1 + block $case32|1 + block $case31|1 + block $case30|1 + block $case29|1 + block $case28|1 + block $case27|1 + block $case26|1 + block $case25|1 + block $case24|1 + block $case23|1 + block $case22|1 + block $case21|1 + block $case20|1 + block $case19|1 + block $case18|1 + block $case17|1 + block $case16|1 + block $case15|1 + block $case14|1 + block $case13|1 + block $case12|1 + block $case11|1 + block $case10|1 + block $case9|1 + block $case8|1 + block $case7|1 + block $case6|1 + block $case5|1 + block $case4|1 + block $case3|1 + block $case2|1 + block $case1|1 + block $case0|1 + local.get $20 + local.set $21 + local.get $21 + i32.const 0 + i32.eq + br_if $case0|1 + local.get $21 + i32.const 1 + i32.eq + br_if $case1|1 + local.get $21 + i32.const 2 + i32.eq + br_if $case2|1 + local.get $21 + i32.const 3 + i32.eq + br_if $case3|1 + local.get $21 + i32.const 4 + i32.eq + br_if $case4|1 + local.get $21 + i32.const 5 + i32.eq + br_if $case5|1 + local.get $21 + i32.const 6 + i32.eq + br_if $case6|1 + local.get $21 + i32.const 7 + i32.eq + br_if $case7|1 + local.get $21 + i32.const 8 + i32.eq + br_if $case8|1 + local.get $21 + i32.const 9 + i32.eq + br_if $case9|1 + local.get $21 + i32.const 10 + i32.eq + br_if $case10|1 + local.get $21 + i32.const 11 + i32.eq + br_if $case11|1 + local.get $21 + i32.const 12 + i32.eq + br_if $case12|1 + local.get $21 + i32.const 13 + i32.eq + br_if $case13|1 + local.get $21 + i32.const 14 + i32.eq + br_if $case14|1 + local.get $21 + i32.const 15 + i32.eq + br_if $case15|1 + local.get $21 + i32.const 16 + i32.eq + br_if $case16|1 + local.get $21 + i32.const 17 + i32.eq + br_if $case17|1 + local.get $21 + i32.const 18 + i32.eq + br_if $case18|1 + local.get $21 + i32.const 19 + i32.eq + br_if $case19|1 + local.get $21 + i32.const 20 + i32.eq + br_if $case20|1 + local.get $21 + i32.const 21 + i32.eq + br_if $case21|1 + local.get $21 + i32.const 22 + i32.eq + br_if $case22|1 + local.get $21 + i32.const 23 + i32.eq + br_if $case23|1 + local.get $21 + i32.const 24 + i32.eq + br_if $case24|1 + local.get $21 + i32.const 25 + i32.eq + br_if $case25|1 + local.get $21 + i32.const 26 + i32.eq + br_if $case26|1 + local.get $21 + i32.const 27 + i32.eq + br_if $case27|1 + local.get $21 + i32.const 28 + i32.eq + br_if $case28|1 + local.get $21 + i32.const 29 + i32.eq + br_if $case29|1 + local.get $21 + i32.const 30 + i32.eq + br_if $case30|1 + local.get $21 + i32.const 31 + i32.eq + br_if $case31|1 + local.get $21 + i32.const 32 + i32.eq + br_if $case32|1 + local.get $21 + i32.const 33 + i32.eq + br_if $case33|1 + local.get $21 + i32.const 34 + i32.eq + br_if $case34|1 + local.get $21 + i32.const 35 + i32.eq + br_if $case35|1 + local.get $21 + i32.const 36 + i32.eq + br_if $case36|1 + local.get $21 + i32.const 37 + i32.eq + br_if $case37|1 + local.get $21 + i32.const 38 + i32.eq + br_if $case38|1 + local.get $21 + i32.const 39 + i32.eq + br_if $case39|1 + local.get $21 + i32.const 40 + i32.eq + br_if $case40|1 + local.get $21 + i32.const 41 + i32.eq + br_if $case41|1 + local.get $21 + i32.const 42 + i32.eq + br_if $case42|1 + local.get $21 + i32.const 43 + i32.eq + br_if $case43|1 + local.get $21 + i32.const 44 + i32.eq + br_if $case44|1 + local.get $21 + i32.const 45 + i32.eq + br_if $case45|1 + local.get $21 + i32.const 46 + i32.eq + br_if $case46|1 + local.get $21 + i32.const 47 + i32.eq + br_if $case47|1 + local.get $21 + i32.const 48 + i32.eq + br_if $case48|1 + local.get $21 + i32.const 49 + i32.eq + br_if $case49|1 + local.get $21 + i32.const 50 + i32.eq + br_if $case50|1 + local.get $21 + i32.const 51 + i32.eq + br_if $case51|1 + local.get $21 + i32.const 52 + i32.eq + br_if $case52|1 + local.get $21 + i32.const 53 + i32.eq + br_if $case53|1 + local.get $21 + i32.const 54 + i32.eq + br_if $case54|1 + local.get $21 + i32.const 55 + i32.eq + br_if $case55|1 + local.get $21 + i32.const 56 + i32.eq + br_if $case56|1 + local.get $21 + i32.const 57 + i32.eq + br_if $case57|1 + local.get $21 + i32.const 58 + i32.eq + br_if $case58|1 + local.get $21 + i32.const 59 + i32.eq + br_if $case59|1 + local.get $21 + i32.const 60 + i32.eq + br_if $case60|1 + local.get $21 + i32.const 61 + i32.eq + br_if $case61|1 + local.get $21 + i32.const 62 + i32.eq + br_if $case62|1 + local.get $21 + i32.const 63 + i32.eq + br_if $case63|1 + br $case64|1 + end + local.get $19 + v128.load + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.6 + end + local.get $19 + v128.load offset=1008 + br $assembly/utils/v128/getV128|inlined.6 + end + i32.const 3120 + local.get $20 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + i32x4.add + global.set $assembly/simd/t1V128 + block $assembly/simd/EP0V128|inlined.1 (result v128) + global.get $assembly/simd/aV128 + local.set $22 + block $assembly/simd/rotrV128|inlined.13 (result v128) + local.get $22 + local.set $23 + i32.const 2 + local.set $24 + i32.const 32 + local.get $24 + i32.sub + local.set $25 + local.get $23 + local.get $24 + i32x4.shr_u + local.set $26 + local.get $23 + local.get $25 + i32x4.shl + local.set $27 + local.get $26 + local.get $27 + v128.or + br $assembly/simd/rotrV128|inlined.13 + end + block $assembly/simd/rotrV128|inlined.14 (result v128) + local.get $22 + local.set $28 + i32.const 13 + local.set $29 + i32.const 32 + local.get $29 + i32.sub + local.set $30 + local.get $28 + local.get $29 + i32x4.shr_u + local.set $31 + local.get $28 + local.get $30 + i32x4.shl + local.set $32 + local.get $31 + local.get $32 + v128.or + br $assembly/simd/rotrV128|inlined.14 + end + v128.xor + block $assembly/simd/rotrV128|inlined.15 (result v128) + local.get $22 + local.set $33 + i32.const 22 + local.set $34 + i32.const 32 + local.get $34 + i32.sub + local.set $35 + local.get $33 + local.get $34 + i32x4.shr_u + local.set $36 + local.get $33 + local.get $35 + i32x4.shl + local.set $37 + local.get $36 + local.get $37 + v128.or + br $assembly/simd/rotrV128|inlined.15 + end + v128.xor + br $assembly/simd/EP0V128|inlined.1 + end + block $assembly/simd/MAJV128|inlined.1 (result v128) + global.get $assembly/simd/aV128 + local.set $38 + global.get $assembly/simd/bV128 + local.set $39 + global.get $assembly/simd/cV128 + local.set $40 + local.get $38 + local.get $39 + v128.and + local.get $38 + local.get $40 + v128.and + v128.xor + local.get $39 + local.get $40 + v128.and + v128.xor + br $assembly/simd/MAJV128|inlined.1 + end + i32x4.add + global.set $assembly/simd/t2V128 + global.get $assembly/simd/gV128 + global.set $assembly/simd/hV128 + global.get $assembly/simd/fV128 + global.set $assembly/simd/gV128 + global.get $assembly/simd/eV128 + global.set $assembly/simd/fV128 + global.get $assembly/simd/dV128 + global.get $assembly/simd/t1V128 + i32x4.add + global.set $assembly/simd/eV128 + global.get $assembly/simd/cV128 + global.set $assembly/simd/dV128 + global.get $assembly/simd/bV128 + global.set $assembly/simd/cV128 + global.get $assembly/simd/aV128 + global.set $assembly/simd/bV128 + global.get $assembly/simd/t1V128 + global.get $assembly/simd/t2V128 + i32x4.add + global.set $assembly/simd/aV128 + global.get $assembly/simd/i + i32.const 1 + i32.add + global.set $assembly/simd/i + br $for-loop|0 + end + end + global.get $assembly/simd/H0V128 + global.get $assembly/simd/aV128 + i32x4.add + global.set $assembly/simd/H0V128 + global.get $assembly/simd/H1V128 + global.get $assembly/simd/bV128 + i32x4.add + global.set $assembly/simd/H1V128 + global.get $assembly/simd/H2V128 + global.get $assembly/simd/cV128 + i32x4.add + global.set $assembly/simd/H2V128 + global.get $assembly/simd/H3V128 + global.get $assembly/simd/dV128 + i32x4.add + global.set $assembly/simd/H3V128 + global.get $assembly/simd/H4V128 + global.get $assembly/simd/eV128 + i32x4.add + global.set $assembly/simd/H4V128 + global.get $assembly/simd/H5V128 + global.get $assembly/simd/fV128 + i32x4.add + global.set $assembly/simd/H5V128 + global.get $assembly/simd/H6V128 + global.get $assembly/simd/gV128 + i32x4.add + global.set $assembly/simd/H6V128 + global.get $assembly/simd/H7V128 + global.get $assembly/simd/hV128 + i32x4.add + global.set $assembly/simd/H7V128 + ) + (func $~lib/polyfills/bswap (param $0 i32) (result i32) + i32.const 1 + drop + i32.const 4 + i32.const 1 + i32.eq + drop + i32.const 4 + i32.const 2 + i32.eq + drop + i32.const 4 + i32.const 4 + i32.eq + drop + local.get $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + return + ) + (func $assembly/simd/digest64V128 (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 v128) + (local $10 v128) + (local $11 i32) + (local $12 i32) + (local $13 v128) + (local $14 v128) + (local $15 v128) + (local $16 i32) + (local $17 i32) + (local $18 v128) + (local $19 v128) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 v128) + (local $27 v128) + (local $28 i32) + (local $29 i32) + (local $30 v128) + (local $31 v128) + (local $32 v128) + (local $33 i32) + (local $34 i32) + (local $35 v128) + (local $36 v128) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 v128) + (local $43 i32) + (local $44 v128) + (local $45 v128) + (local $46 i32) + (local $47 i32) + (local $48 v128) + (local $49 v128) + (local $50 v128) + (local $51 i32) + (local $52 i32) + (local $53 v128) + (local $54 v128) + (local $55 v128) + (local $56 i32) + (local $57 i32) + (local $58 v128) + (local $59 v128) + (local $60 v128) + (local $61 v128) + (local $62 v128) + (local $63 i32) + (local $64 i32) + (local $65 i32) + (local $66 v128) + (local $67 v128) + (local $68 i32) + (local $69 i32) + (local $70 v128) + (local $71 v128) + (local $72 v128) + (local $73 i32) + (local $74 i32) + (local $75 v128) + (local $76 v128) + (local $77 v128) + (local $78 i32) + (local $79 i32) + (local $80 v128) + (local $81 v128) + (local $82 v128) + (local $83 v128) + (local $84 v128) + (local $85 i32) + (local $86 i32) + (local $87 i32) + (local $88 i32) + (local $89 i32) + (local $90 i32) + (local $91 i32) + (local $92 i32) + (local $93 i32) + (local $94 i32) + (local $95 i32) + (local $96 i32) + (local $97 i32) + (local $98 i32) + (local $99 i32) + (local $100 i32) + (local $101 i32) + (local $102 i32) + (local $103 i32) + (local $104 i32) + (local $105 i32) + (local $106 i32) + (local $107 i32) + (local $108 i32) + (local $109 i32) + (local $110 i32) + (local $111 i32) + (local $112 i32) + (local $113 i32) + (local $114 i32) + (local $115 i32) + (local $116 i32) + (local $117 i32) + (local $118 i32) + (local $119 i32) + (local $120 i32) + (local $121 i32) + (local $122 i32) + (local $123 i32) + (local $124 i32) + (local $125 i32) + (local $126 i32) + (local $127 i32) + (local $128 i32) + (local $129 i32) + (local $130 i32) + (local $131 i32) + (local $132 i32) + (local $133 i32) + (local $134 i32) + (local $135 i32) + (local $136 i32) + (local $137 i32) + (local $138 i32) + (local $139 i32) + (local $140 i32) + (local $141 i32) + (local $142 i32) + (local $143 i32) + (local $144 i32) + (local $145 i32) + (local $146 i32) + (local $147 i32) + (local $148 i32) + (local $149 i32) + (local $150 i32) + (local $151 i32) + (local $152 i32) + (local $153 i32) + (local $154 i32) + (local $155 i32) + (local $156 i32) + (local $157 i32) + (local $158 i32) + (local $159 i32) + (local $160 i32) + (local $161 i32) + (local $162 i32) + (local $163 i32) + (local $164 i32) + (local $165 i32) + (local $166 i32) + (local $167 i32) + (local $168 i32) + (local $169 i32) + (local $170 i32) + (local $171 i32) + (local $172 i32) + (local $173 i32) + (local $174 i32) + (local $175 i32) + (local $176 i32) + (local $177 i32) + (local $178 i32) + (local $179 i32) + (local $180 i32) + call $assembly/simd/initV128 + local.get $0 + local.set $2 + global.get $assembly/simd/H0V128 + global.set $assembly/simd/aV128 + global.get $assembly/simd/H1V128 + global.set $assembly/simd/bV128 + global.get $assembly/simd/H2V128 + global.set $assembly/simd/cV128 + global.get $assembly/simd/H3V128 + global.set $assembly/simd/dV128 + global.get $assembly/simd/H4V128 + global.set $assembly/simd/eV128 + global.get $assembly/simd/H5V128 + global.set $assembly/simd/fV128 + global.get $assembly/simd/H6V128 + global.set $assembly/simd/gV128 + global.get $assembly/simd/H7V128 + global.set $assembly/simd/hV128 + i32.const 0 + global.set $assembly/simd/i + loop $for-loop|0 + global.get $assembly/simd/i + i32.const 64 + i32.lt_s + if + global.get $assembly/simd/i + i32.const 16 + i32.lt_s + if (result v128) + block $assembly/utils/v128/getV128|inlined.0 (result v128) + local.get $2 + local.set $3 + global.get $assembly/simd/i + local.set $4 + block $case64|1 + block $case63|1 + block $case62|1 + block $case61|1 + block $case60|1 + block $case59|1 + block $case58|1 + block $case57|1 + block $case56|1 + block $case55|1 + block $case54|1 + block $case53|1 + block $case52|1 + block $case51|1 + block $case50|1 + block $case49|1 + block $case48|1 + block $case47|1 + block $case46|1 + block $case45|1 + block $case44|1 + block $case43|1 + block $case42|1 + block $case41|1 + block $case40|1 + block $case39|1 + block $case38|1 + block $case37|1 + block $case36|1 + block $case35|1 + block $case34|1 + block $case33|1 + block $case32|1 + block $case31|1 + block $case30|1 + block $case29|1 + block $case28|1 + block $case27|1 + block $case26|1 + block $case25|1 + block $case24|1 + block $case23|1 + block $case22|1 + block $case21|1 + block $case20|1 + block $case19|1 + block $case18|1 + block $case17|1 + block $case16|1 + block $case15|1 + block $case14|1 + block $case13|1 + block $case12|1 + block $case11|1 + block $case10|1 + block $case9|1 + block $case8|1 + block $case7|1 + block $case6|1 + block $case5|1 + block $case4|1 + block $case3|1 + block $case2|1 + block $case1|1 + block $case0|1 + local.get $4 + local.set $5 + local.get $5 + i32.const 0 + i32.eq + br_if $case0|1 + local.get $5 + i32.const 1 + i32.eq + br_if $case1|1 + local.get $5 + i32.const 2 + i32.eq + br_if $case2|1 + local.get $5 + i32.const 3 + i32.eq + br_if $case3|1 + local.get $5 + i32.const 4 + i32.eq + br_if $case4|1 + local.get $5 + i32.const 5 + i32.eq + br_if $case5|1 + local.get $5 + i32.const 6 + i32.eq + br_if $case6|1 + local.get $5 + i32.const 7 + i32.eq + br_if $case7|1 + local.get $5 + i32.const 8 + i32.eq + br_if $case8|1 + local.get $5 + i32.const 9 + i32.eq + br_if $case9|1 + local.get $5 + i32.const 10 + i32.eq + br_if $case10|1 + local.get $5 + i32.const 11 + i32.eq + br_if $case11|1 + local.get $5 + i32.const 12 + i32.eq + br_if $case12|1 + local.get $5 + i32.const 13 + i32.eq + br_if $case13|1 + local.get $5 + i32.const 14 + i32.eq + br_if $case14|1 + local.get $5 + i32.const 15 + i32.eq + br_if $case15|1 + local.get $5 + i32.const 16 + i32.eq + br_if $case16|1 + local.get $5 + i32.const 17 + i32.eq + br_if $case17|1 + local.get $5 + i32.const 18 + i32.eq + br_if $case18|1 + local.get $5 + i32.const 19 + i32.eq + br_if $case19|1 + local.get $5 + i32.const 20 + i32.eq + br_if $case20|1 + local.get $5 + i32.const 21 + i32.eq + br_if $case21|1 + local.get $5 + i32.const 22 + i32.eq + br_if $case22|1 + local.get $5 + i32.const 23 + i32.eq + br_if $case23|1 + local.get $5 + i32.const 24 + i32.eq + br_if $case24|1 + local.get $5 + i32.const 25 + i32.eq + br_if $case25|1 + local.get $5 + i32.const 26 + i32.eq + br_if $case26|1 + local.get $5 + i32.const 27 + i32.eq + br_if $case27|1 + local.get $5 + i32.const 28 + i32.eq + br_if $case28|1 + local.get $5 + i32.const 29 + i32.eq + br_if $case29|1 + local.get $5 + i32.const 30 + i32.eq + br_if $case30|1 + local.get $5 + i32.const 31 + i32.eq + br_if $case31|1 + local.get $5 + i32.const 32 + i32.eq + br_if $case32|1 + local.get $5 + i32.const 33 + i32.eq + br_if $case33|1 + local.get $5 + i32.const 34 + i32.eq + br_if $case34|1 + local.get $5 + i32.const 35 + i32.eq + br_if $case35|1 + local.get $5 + i32.const 36 + i32.eq + br_if $case36|1 + local.get $5 + i32.const 37 + i32.eq + br_if $case37|1 + local.get $5 + i32.const 38 + i32.eq + br_if $case38|1 + local.get $5 + i32.const 39 + i32.eq + br_if $case39|1 + local.get $5 + i32.const 40 + i32.eq + br_if $case40|1 + local.get $5 + i32.const 41 + i32.eq + br_if $case41|1 + local.get $5 + i32.const 42 + i32.eq + br_if $case42|1 + local.get $5 + i32.const 43 + i32.eq + br_if $case43|1 + local.get $5 + i32.const 44 + i32.eq + br_if $case44|1 + local.get $5 + i32.const 45 + i32.eq + br_if $case45|1 + local.get $5 + i32.const 46 + i32.eq + br_if $case46|1 + local.get $5 + i32.const 47 + i32.eq + br_if $case47|1 + local.get $5 + i32.const 48 + i32.eq + br_if $case48|1 + local.get $5 + i32.const 49 + i32.eq + br_if $case49|1 + local.get $5 + i32.const 50 + i32.eq + br_if $case50|1 + local.get $5 + i32.const 51 + i32.eq + br_if $case51|1 + local.get $5 + i32.const 52 + i32.eq + br_if $case52|1 + local.get $5 + i32.const 53 + i32.eq + br_if $case53|1 + local.get $5 + i32.const 54 + i32.eq + br_if $case54|1 + local.get $5 + i32.const 55 + i32.eq + br_if $case55|1 + local.get $5 + i32.const 56 + i32.eq + br_if $case56|1 + local.get $5 + i32.const 57 + i32.eq + br_if $case57|1 + local.get $5 + i32.const 58 + i32.eq + br_if $case58|1 + local.get $5 + i32.const 59 + i32.eq + br_if $case59|1 + local.get $5 + i32.const 60 + i32.eq + br_if $case60|1 + local.get $5 + i32.const 61 + i32.eq + br_if $case61|1 + local.get $5 + i32.const 62 + i32.eq + br_if $case62|1 + local.get $5 + i32.const 63 + i32.eq + br_if $case63|1 + br $case64|1 + end + local.get $3 + v128.load + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.0 + end + local.get $3 + v128.load offset=1008 + br $assembly/utils/v128/getV128|inlined.0 + end + i32.const 3120 + local.get $4 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + else + block $assembly/simd/SIG1V128|inlined.0 (result v128) + block $assembly/utils/v128/getV128|inlined.1 (result v128) + local.get $2 + local.set $6 + global.get $assembly/simd/i + i32.const 2 + i32.sub + local.set $7 + block $case64|2 + block $case63|2 + block $case62|2 + block $case61|2 + block $case60|2 + block $case59|2 + block $case58|2 + block $case57|2 + block $case56|2 + block $case55|2 + block $case54|2 + block $case53|2 + block $case52|2 + block $case51|2 + block $case50|2 + block $case49|2 + block $case48|2 + block $case47|2 + block $case46|2 + block $case45|2 + block $case44|2 + block $case43|2 + block $case42|2 + block $case41|2 + block $case40|2 + block $case39|2 + block $case38|2 + block $case37|2 + block $case36|2 + block $case35|2 + block $case34|2 + block $case33|2 + block $case32|2 + block $case31|2 + block $case30|2 + block $case29|2 + block $case28|2 + block $case27|2 + block $case26|2 + block $case25|2 + block $case24|2 + block $case23|2 + block $case22|2 + block $case21|2 + block $case20|2 + block $case19|2 + block $case18|2 + block $case17|2 + block $case16|2 + block $case15|2 + block $case14|2 + block $case13|2 + block $case12|2 + block $case11|2 + block $case10|2 + block $case9|2 + block $case8|2 + block $case7|2 + block $case6|2 + block $case5|2 + block $case4|2 + block $case3|2 + block $case2|2 + block $case1|2 + block $case0|2 + local.get $7 + local.set $8 + local.get $8 + i32.const 0 + i32.eq + br_if $case0|2 + local.get $8 + i32.const 1 + i32.eq + br_if $case1|2 + local.get $8 + i32.const 2 + i32.eq + br_if $case2|2 + local.get $8 + i32.const 3 + i32.eq + br_if $case3|2 + local.get $8 + i32.const 4 + i32.eq + br_if $case4|2 + local.get $8 + i32.const 5 + i32.eq + br_if $case5|2 + local.get $8 + i32.const 6 + i32.eq + br_if $case6|2 + local.get $8 + i32.const 7 + i32.eq + br_if $case7|2 + local.get $8 + i32.const 8 + i32.eq + br_if $case8|2 + local.get $8 + i32.const 9 + i32.eq + br_if $case9|2 + local.get $8 + i32.const 10 + i32.eq + br_if $case10|2 + local.get $8 + i32.const 11 + i32.eq + br_if $case11|2 + local.get $8 + i32.const 12 + i32.eq + br_if $case12|2 + local.get $8 + i32.const 13 + i32.eq + br_if $case13|2 + local.get $8 + i32.const 14 + i32.eq + br_if $case14|2 + local.get $8 + i32.const 15 + i32.eq + br_if $case15|2 + local.get $8 + i32.const 16 + i32.eq + br_if $case16|2 + local.get $8 + i32.const 17 + i32.eq + br_if $case17|2 + local.get $8 + i32.const 18 + i32.eq + br_if $case18|2 + local.get $8 + i32.const 19 + i32.eq + br_if $case19|2 + local.get $8 + i32.const 20 + i32.eq + br_if $case20|2 + local.get $8 + i32.const 21 + i32.eq + br_if $case21|2 + local.get $8 + i32.const 22 + i32.eq + br_if $case22|2 + local.get $8 + i32.const 23 + i32.eq + br_if $case23|2 + local.get $8 + i32.const 24 + i32.eq + br_if $case24|2 + local.get $8 + i32.const 25 + i32.eq + br_if $case25|2 + local.get $8 + i32.const 26 + i32.eq + br_if $case26|2 + local.get $8 + i32.const 27 + i32.eq + br_if $case27|2 + local.get $8 + i32.const 28 + i32.eq + br_if $case28|2 + local.get $8 + i32.const 29 + i32.eq + br_if $case29|2 + local.get $8 + i32.const 30 + i32.eq + br_if $case30|2 + local.get $8 + i32.const 31 + i32.eq + br_if $case31|2 + local.get $8 + i32.const 32 + i32.eq + br_if $case32|2 + local.get $8 + i32.const 33 + i32.eq + br_if $case33|2 + local.get $8 + i32.const 34 + i32.eq + br_if $case34|2 + local.get $8 + i32.const 35 + i32.eq + br_if $case35|2 + local.get $8 + i32.const 36 + i32.eq + br_if $case36|2 + local.get $8 + i32.const 37 + i32.eq + br_if $case37|2 + local.get $8 + i32.const 38 + i32.eq + br_if $case38|2 + local.get $8 + i32.const 39 + i32.eq + br_if $case39|2 + local.get $8 + i32.const 40 + i32.eq + br_if $case40|2 + local.get $8 + i32.const 41 + i32.eq + br_if $case41|2 + local.get $8 + i32.const 42 + i32.eq + br_if $case42|2 + local.get $8 + i32.const 43 + i32.eq + br_if $case43|2 + local.get $8 + i32.const 44 + i32.eq + br_if $case44|2 + local.get $8 + i32.const 45 + i32.eq + br_if $case45|2 + local.get $8 + i32.const 46 + i32.eq + br_if $case46|2 + local.get $8 + i32.const 47 + i32.eq + br_if $case47|2 + local.get $8 + i32.const 48 + i32.eq + br_if $case48|2 + local.get $8 + i32.const 49 + i32.eq + br_if $case49|2 + local.get $8 + i32.const 50 + i32.eq + br_if $case50|2 + local.get $8 + i32.const 51 + i32.eq + br_if $case51|2 + local.get $8 + i32.const 52 + i32.eq + br_if $case52|2 + local.get $8 + i32.const 53 + i32.eq + br_if $case53|2 + local.get $8 + i32.const 54 + i32.eq + br_if $case54|2 + local.get $8 + i32.const 55 + i32.eq + br_if $case55|2 + local.get $8 + i32.const 56 + i32.eq + br_if $case56|2 + local.get $8 + i32.const 57 + i32.eq + br_if $case57|2 + local.get $8 + i32.const 58 + i32.eq + br_if $case58|2 + local.get $8 + i32.const 59 + i32.eq + br_if $case59|2 + local.get $8 + i32.const 60 + i32.eq + br_if $case60|2 + local.get $8 + i32.const 61 + i32.eq + br_if $case61|2 + local.get $8 + i32.const 62 + i32.eq + br_if $case62|2 + local.get $8 + i32.const 63 + i32.eq + br_if $case63|2 + br $case64|2 + end + local.get $6 + v128.load + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.1 + end + local.get $6 + v128.load offset=1008 + br $assembly/utils/v128/getV128|inlined.1 + end + i32.const 3120 + local.get $7 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.set $9 + block $assembly/simd/rotrV128|inlined.0 (result v128) + local.get $9 + local.set $10 + i32.const 17 + local.set $11 + i32.const 32 + local.get $11 + i32.sub + local.set $12 + local.get $10 + local.get $11 + i32x4.shr_u + local.set $13 + local.get $10 + local.get $12 + i32x4.shl + local.set $14 + local.get $13 + local.get $14 + v128.or + br $assembly/simd/rotrV128|inlined.0 + end + block $assembly/simd/rotrV128|inlined.1 (result v128) + local.get $9 + local.set $15 + i32.const 19 + local.set $16 + i32.const 32 + local.get $16 + i32.sub + local.set $17 + local.get $15 + local.get $16 + i32x4.shr_u + local.set $18 + local.get $15 + local.get $17 + i32x4.shl + local.set $19 + local.get $18 + local.get $19 + v128.or + br $assembly/simd/rotrV128|inlined.1 + end + v128.xor + local.get $9 + i32.const 10 + i32x4.shr_u + v128.xor + br $assembly/simd/SIG1V128|inlined.0 + end + block $assembly/utils/v128/getV128|inlined.2 (result v128) + local.get $2 + local.set $20 + global.get $assembly/simd/i + i32.const 7 + i32.sub + local.set $21 + block $case64|3 + block $case63|3 + block $case62|3 + block $case61|3 + block $case60|3 + block $case59|3 + block $case58|3 + block $case57|3 + block $case56|3 + block $case55|3 + block $case54|3 + block $case53|3 + block $case52|3 + block $case51|3 + block $case50|3 + block $case49|3 + block $case48|3 + block $case47|3 + block $case46|3 + block $case45|3 + block $case44|3 + block $case43|3 + block $case42|3 + block $case41|3 + block $case40|3 + block $case39|3 + block $case38|3 + block $case37|3 + block $case36|3 + block $case35|3 + block $case34|3 + block $case33|3 + block $case32|3 + block $case31|3 + block $case30|3 + block $case29|3 + block $case28|3 + block $case27|3 + block $case26|3 + block $case25|3 + block $case24|3 + block $case23|3 + block $case22|3 + block $case21|3 + block $case20|3 + block $case19|3 + block $case18|3 + block $case17|3 + block $case16|3 + block $case15|3 + block $case14|3 + block $case13|3 + block $case12|3 + block $case11|3 + block $case10|3 + block $case9|3 + block $case8|3 + block $case7|3 + block $case6|3 + block $case5|3 + block $case4|3 + block $case3|3 + block $case2|3 + block $case1|3 + block $case0|3 + local.get $21 + local.set $22 + local.get $22 + i32.const 0 + i32.eq + br_if $case0|3 + local.get $22 + i32.const 1 + i32.eq + br_if $case1|3 + local.get $22 + i32.const 2 + i32.eq + br_if $case2|3 + local.get $22 + i32.const 3 + i32.eq + br_if $case3|3 + local.get $22 + i32.const 4 + i32.eq + br_if $case4|3 + local.get $22 + i32.const 5 + i32.eq + br_if $case5|3 + local.get $22 + i32.const 6 + i32.eq + br_if $case6|3 + local.get $22 + i32.const 7 + i32.eq + br_if $case7|3 + local.get $22 + i32.const 8 + i32.eq + br_if $case8|3 + local.get $22 + i32.const 9 + i32.eq + br_if $case9|3 + local.get $22 + i32.const 10 + i32.eq + br_if $case10|3 + local.get $22 + i32.const 11 + i32.eq + br_if $case11|3 + local.get $22 + i32.const 12 + i32.eq + br_if $case12|3 + local.get $22 + i32.const 13 + i32.eq + br_if $case13|3 + local.get $22 + i32.const 14 + i32.eq + br_if $case14|3 + local.get $22 + i32.const 15 + i32.eq + br_if $case15|3 + local.get $22 + i32.const 16 + i32.eq + br_if $case16|3 + local.get $22 + i32.const 17 + i32.eq + br_if $case17|3 + local.get $22 + i32.const 18 + i32.eq + br_if $case18|3 + local.get $22 + i32.const 19 + i32.eq + br_if $case19|3 + local.get $22 + i32.const 20 + i32.eq + br_if $case20|3 + local.get $22 + i32.const 21 + i32.eq + br_if $case21|3 + local.get $22 + i32.const 22 + i32.eq + br_if $case22|3 + local.get $22 + i32.const 23 + i32.eq + br_if $case23|3 + local.get $22 + i32.const 24 + i32.eq + br_if $case24|3 + local.get $22 + i32.const 25 + i32.eq + br_if $case25|3 + local.get $22 + i32.const 26 + i32.eq + br_if $case26|3 + local.get $22 + i32.const 27 + i32.eq + br_if $case27|3 + local.get $22 + i32.const 28 + i32.eq + br_if $case28|3 + local.get $22 + i32.const 29 + i32.eq + br_if $case29|3 + local.get $22 + i32.const 30 + i32.eq + br_if $case30|3 + local.get $22 + i32.const 31 + i32.eq + br_if $case31|3 + local.get $22 + i32.const 32 + i32.eq + br_if $case32|3 + local.get $22 + i32.const 33 + i32.eq + br_if $case33|3 + local.get $22 + i32.const 34 + i32.eq + br_if $case34|3 + local.get $22 + i32.const 35 + i32.eq + br_if $case35|3 + local.get $22 + i32.const 36 + i32.eq + br_if $case36|3 + local.get $22 + i32.const 37 + i32.eq + br_if $case37|3 + local.get $22 + i32.const 38 + i32.eq + br_if $case38|3 + local.get $22 + i32.const 39 + i32.eq + br_if $case39|3 + local.get $22 + i32.const 40 + i32.eq + br_if $case40|3 + local.get $22 + i32.const 41 + i32.eq + br_if $case41|3 + local.get $22 + i32.const 42 + i32.eq + br_if $case42|3 + local.get $22 + i32.const 43 + i32.eq + br_if $case43|3 + local.get $22 + i32.const 44 + i32.eq + br_if $case44|3 + local.get $22 + i32.const 45 + i32.eq + br_if $case45|3 + local.get $22 + i32.const 46 + i32.eq + br_if $case46|3 + local.get $22 + i32.const 47 + i32.eq + br_if $case47|3 + local.get $22 + i32.const 48 + i32.eq + br_if $case48|3 + local.get $22 + i32.const 49 + i32.eq + br_if $case49|3 + local.get $22 + i32.const 50 + i32.eq + br_if $case50|3 + local.get $22 + i32.const 51 + i32.eq + br_if $case51|3 + local.get $22 + i32.const 52 + i32.eq + br_if $case52|3 + local.get $22 + i32.const 53 + i32.eq + br_if $case53|3 + local.get $22 + i32.const 54 + i32.eq + br_if $case54|3 + local.get $22 + i32.const 55 + i32.eq + br_if $case55|3 + local.get $22 + i32.const 56 + i32.eq + br_if $case56|3 + local.get $22 + i32.const 57 + i32.eq + br_if $case57|3 + local.get $22 + i32.const 58 + i32.eq + br_if $case58|3 + local.get $22 + i32.const 59 + i32.eq + br_if $case59|3 + local.get $22 + i32.const 60 + i32.eq + br_if $case60|3 + local.get $22 + i32.const 61 + i32.eq + br_if $case61|3 + local.get $22 + i32.const 62 + i32.eq + br_if $case62|3 + local.get $22 + i32.const 63 + i32.eq + br_if $case63|3 + br $case64|3 + end + local.get $20 + v128.load + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.2 + end + local.get $20 + v128.load offset=1008 + br $assembly/utils/v128/getV128|inlined.2 + end + i32.const 3120 + local.get $21 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + i32x4.add + block $assembly/simd/SIG0V128|inlined.0 (result v128) + block $assembly/utils/v128/getV128|inlined.3 (result v128) + local.get $2 + local.set $23 + global.get $assembly/simd/i + i32.const 15 + i32.sub + local.set $24 + block $case64|4 + block $case63|4 + block $case62|4 + block $case61|4 + block $case60|4 + block $case59|4 + block $case58|4 + block $case57|4 + block $case56|4 + block $case55|4 + block $case54|4 + block $case53|4 + block $case52|4 + block $case51|4 + block $case50|4 + block $case49|4 + block $case48|4 + block $case47|4 + block $case46|4 + block $case45|4 + block $case44|4 + block $case43|4 + block $case42|4 + block $case41|4 + block $case40|4 + block $case39|4 + block $case38|4 + block $case37|4 + block $case36|4 + block $case35|4 + block $case34|4 + block $case33|4 + block $case32|4 + block $case31|4 + block $case30|4 + block $case29|4 + block $case28|4 + block $case27|4 + block $case26|4 + block $case25|4 + block $case24|4 + block $case23|4 + block $case22|4 + block $case21|4 + block $case20|4 + block $case19|4 + block $case18|4 + block $case17|4 + block $case16|4 + block $case15|4 + block $case14|4 + block $case13|4 + block $case12|4 + block $case11|4 + block $case10|4 + block $case9|4 + block $case8|4 + block $case7|4 + block $case6|4 + block $case5|4 + block $case4|4 + block $case3|4 + block $case2|4 + block $case1|4 + block $case0|4 + local.get $24 + local.set $25 + local.get $25 + i32.const 0 + i32.eq + br_if $case0|4 + local.get $25 + i32.const 1 + i32.eq + br_if $case1|4 + local.get $25 + i32.const 2 + i32.eq + br_if $case2|4 + local.get $25 + i32.const 3 + i32.eq + br_if $case3|4 + local.get $25 + i32.const 4 + i32.eq + br_if $case4|4 + local.get $25 + i32.const 5 + i32.eq + br_if $case5|4 + local.get $25 + i32.const 6 + i32.eq + br_if $case6|4 + local.get $25 + i32.const 7 + i32.eq + br_if $case7|4 + local.get $25 + i32.const 8 + i32.eq + br_if $case8|4 + local.get $25 + i32.const 9 + i32.eq + br_if $case9|4 + local.get $25 + i32.const 10 + i32.eq + br_if $case10|4 + local.get $25 + i32.const 11 + i32.eq + br_if $case11|4 + local.get $25 + i32.const 12 + i32.eq + br_if $case12|4 + local.get $25 + i32.const 13 + i32.eq + br_if $case13|4 + local.get $25 + i32.const 14 + i32.eq + br_if $case14|4 + local.get $25 + i32.const 15 + i32.eq + br_if $case15|4 + local.get $25 + i32.const 16 + i32.eq + br_if $case16|4 + local.get $25 + i32.const 17 + i32.eq + br_if $case17|4 + local.get $25 + i32.const 18 + i32.eq + br_if $case18|4 + local.get $25 + i32.const 19 + i32.eq + br_if $case19|4 + local.get $25 + i32.const 20 + i32.eq + br_if $case20|4 + local.get $25 + i32.const 21 + i32.eq + br_if $case21|4 + local.get $25 + i32.const 22 + i32.eq + br_if $case22|4 + local.get $25 + i32.const 23 + i32.eq + br_if $case23|4 + local.get $25 + i32.const 24 + i32.eq + br_if $case24|4 + local.get $25 + i32.const 25 + i32.eq + br_if $case25|4 + local.get $25 + i32.const 26 + i32.eq + br_if $case26|4 + local.get $25 + i32.const 27 + i32.eq + br_if $case27|4 + local.get $25 + i32.const 28 + i32.eq + br_if $case28|4 + local.get $25 + i32.const 29 + i32.eq + br_if $case29|4 + local.get $25 + i32.const 30 + i32.eq + br_if $case30|4 + local.get $25 + i32.const 31 + i32.eq + br_if $case31|4 + local.get $25 + i32.const 32 + i32.eq + br_if $case32|4 + local.get $25 + i32.const 33 + i32.eq + br_if $case33|4 + local.get $25 + i32.const 34 + i32.eq + br_if $case34|4 + local.get $25 + i32.const 35 + i32.eq + br_if $case35|4 + local.get $25 + i32.const 36 + i32.eq + br_if $case36|4 + local.get $25 + i32.const 37 + i32.eq + br_if $case37|4 + local.get $25 + i32.const 38 + i32.eq + br_if $case38|4 + local.get $25 + i32.const 39 + i32.eq + br_if $case39|4 + local.get $25 + i32.const 40 + i32.eq + br_if $case40|4 + local.get $25 + i32.const 41 + i32.eq + br_if $case41|4 + local.get $25 + i32.const 42 + i32.eq + br_if $case42|4 + local.get $25 + i32.const 43 + i32.eq + br_if $case43|4 + local.get $25 + i32.const 44 + i32.eq + br_if $case44|4 + local.get $25 + i32.const 45 + i32.eq + br_if $case45|4 + local.get $25 + i32.const 46 + i32.eq + br_if $case46|4 + local.get $25 + i32.const 47 + i32.eq + br_if $case47|4 + local.get $25 + i32.const 48 + i32.eq + br_if $case48|4 + local.get $25 + i32.const 49 + i32.eq + br_if $case49|4 + local.get $25 + i32.const 50 + i32.eq + br_if $case50|4 + local.get $25 + i32.const 51 + i32.eq + br_if $case51|4 + local.get $25 + i32.const 52 + i32.eq + br_if $case52|4 + local.get $25 + i32.const 53 + i32.eq + br_if $case53|4 + local.get $25 + i32.const 54 + i32.eq + br_if $case54|4 + local.get $25 + i32.const 55 + i32.eq + br_if $case55|4 + local.get $25 + i32.const 56 + i32.eq + br_if $case56|4 + local.get $25 + i32.const 57 + i32.eq + br_if $case57|4 + local.get $25 + i32.const 58 + i32.eq + br_if $case58|4 + local.get $25 + i32.const 59 + i32.eq + br_if $case59|4 + local.get $25 + i32.const 60 + i32.eq + br_if $case60|4 + local.get $25 + i32.const 61 + i32.eq + br_if $case61|4 + local.get $25 + i32.const 62 + i32.eq + br_if $case62|4 + local.get $25 + i32.const 63 + i32.eq + br_if $case63|4 + br $case64|4 + end + local.get $23 + v128.load + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.3 + end + local.get $23 + v128.load offset=1008 + br $assembly/utils/v128/getV128|inlined.3 + end + i32.const 3120 + local.get $24 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.set $26 + block $assembly/simd/rotrV128|inlined.2 (result v128) + local.get $26 + local.set $27 + i32.const 7 + local.set $28 + i32.const 32 + local.get $28 + i32.sub + local.set $29 + local.get $27 + local.get $28 + i32x4.shr_u + local.set $30 + local.get $27 + local.get $29 + i32x4.shl + local.set $31 + local.get $30 + local.get $31 + v128.or + br $assembly/simd/rotrV128|inlined.2 + end + block $assembly/simd/rotrV128|inlined.3 (result v128) + local.get $26 + local.set $32 + i32.const 18 + local.set $33 + i32.const 32 + local.get $33 + i32.sub + local.set $34 + local.get $32 + local.get $33 + i32x4.shr_u + local.set $35 + local.get $32 + local.get $34 + i32x4.shl + local.set $36 + local.get $35 + local.get $36 + v128.or + br $assembly/simd/rotrV128|inlined.3 + end + v128.xor + local.get $26 + i32.const 3 + i32x4.shr_u + v128.xor + br $assembly/simd/SIG0V128|inlined.0 + end + i32x4.add + block $assembly/utils/v128/getV128|inlined.4 (result v128) + local.get $2 + local.set $37 + global.get $assembly/simd/i + i32.const 16 + i32.sub + local.set $38 + block $case64|5 + block $case63|5 + block $case62|5 + block $case61|5 + block $case60|5 + block $case59|5 + block $case58|5 + block $case57|5 + block $case56|5 + block $case55|5 + block $case54|5 + block $case53|5 + block $case52|5 + block $case51|5 + block $case50|5 + block $case49|5 + block $case48|5 + block $case47|5 + block $case46|5 + block $case45|5 + block $case44|5 + block $case43|5 + block $case42|5 + block $case41|5 + block $case40|5 + block $case39|5 + block $case38|5 + block $case37|5 + block $case36|5 + block $case35|5 + block $case34|5 + block $case33|5 + block $case32|5 + block $case31|5 + block $case30|5 + block $case29|5 + block $case28|5 + block $case27|5 + block $case26|5 + block $case25|5 + block $case24|5 + block $case23|5 + block $case22|5 + block $case21|5 + block $case20|5 + block $case19|5 + block $case18|5 + block $case17|5 + block $case16|5 + block $case15|5 + block $case14|5 + block $case13|5 + block $case12|5 + block $case11|5 + block $case10|5 + block $case9|5 + block $case8|5 + block $case7|5 + block $case6|5 + block $case5|5 + block $case4|5 + block $case3|5 + block $case2|5 + block $case1|5 + block $case0|5 + local.get $38 + local.set $39 + local.get $39 + i32.const 0 + i32.eq + br_if $case0|5 + local.get $39 + i32.const 1 + i32.eq + br_if $case1|5 + local.get $39 + i32.const 2 + i32.eq + br_if $case2|5 + local.get $39 + i32.const 3 + i32.eq + br_if $case3|5 + local.get $39 + i32.const 4 + i32.eq + br_if $case4|5 + local.get $39 + i32.const 5 + i32.eq + br_if $case5|5 + local.get $39 + i32.const 6 + i32.eq + br_if $case6|5 + local.get $39 + i32.const 7 + i32.eq + br_if $case7|5 + local.get $39 + i32.const 8 + i32.eq + br_if $case8|5 + local.get $39 + i32.const 9 + i32.eq + br_if $case9|5 + local.get $39 + i32.const 10 + i32.eq + br_if $case10|5 + local.get $39 + i32.const 11 + i32.eq + br_if $case11|5 + local.get $39 + i32.const 12 + i32.eq + br_if $case12|5 + local.get $39 + i32.const 13 + i32.eq + br_if $case13|5 + local.get $39 + i32.const 14 + i32.eq + br_if $case14|5 + local.get $39 + i32.const 15 + i32.eq + br_if $case15|5 + local.get $39 + i32.const 16 + i32.eq + br_if $case16|5 + local.get $39 + i32.const 17 + i32.eq + br_if $case17|5 + local.get $39 + i32.const 18 + i32.eq + br_if $case18|5 + local.get $39 + i32.const 19 + i32.eq + br_if $case19|5 + local.get $39 + i32.const 20 + i32.eq + br_if $case20|5 + local.get $39 + i32.const 21 + i32.eq + br_if $case21|5 + local.get $39 + i32.const 22 + i32.eq + br_if $case22|5 + local.get $39 + i32.const 23 + i32.eq + br_if $case23|5 + local.get $39 + i32.const 24 + i32.eq + br_if $case24|5 + local.get $39 + i32.const 25 + i32.eq + br_if $case25|5 + local.get $39 + i32.const 26 + i32.eq + br_if $case26|5 + local.get $39 + i32.const 27 + i32.eq + br_if $case27|5 + local.get $39 + i32.const 28 + i32.eq + br_if $case28|5 + local.get $39 + i32.const 29 + i32.eq + br_if $case29|5 + local.get $39 + i32.const 30 + i32.eq + br_if $case30|5 + local.get $39 + i32.const 31 + i32.eq + br_if $case31|5 + local.get $39 + i32.const 32 + i32.eq + br_if $case32|5 + local.get $39 + i32.const 33 + i32.eq + br_if $case33|5 + local.get $39 + i32.const 34 + i32.eq + br_if $case34|5 + local.get $39 + i32.const 35 + i32.eq + br_if $case35|5 + local.get $39 + i32.const 36 + i32.eq + br_if $case36|5 + local.get $39 + i32.const 37 + i32.eq + br_if $case37|5 + local.get $39 + i32.const 38 + i32.eq + br_if $case38|5 + local.get $39 + i32.const 39 + i32.eq + br_if $case39|5 + local.get $39 + i32.const 40 + i32.eq + br_if $case40|5 + local.get $39 + i32.const 41 + i32.eq + br_if $case41|5 + local.get $39 + i32.const 42 + i32.eq + br_if $case42|5 + local.get $39 + i32.const 43 + i32.eq + br_if $case43|5 + local.get $39 + i32.const 44 + i32.eq + br_if $case44|5 + local.get $39 + i32.const 45 + i32.eq + br_if $case45|5 + local.get $39 + i32.const 46 + i32.eq + br_if $case46|5 + local.get $39 + i32.const 47 + i32.eq + br_if $case47|5 + local.get $39 + i32.const 48 + i32.eq + br_if $case48|5 + local.get $39 + i32.const 49 + i32.eq + br_if $case49|5 + local.get $39 + i32.const 50 + i32.eq + br_if $case50|5 + local.get $39 + i32.const 51 + i32.eq + br_if $case51|5 + local.get $39 + i32.const 52 + i32.eq + br_if $case52|5 + local.get $39 + i32.const 53 + i32.eq + br_if $case53|5 + local.get $39 + i32.const 54 + i32.eq + br_if $case54|5 + local.get $39 + i32.const 55 + i32.eq + br_if $case55|5 + local.get $39 + i32.const 56 + i32.eq + br_if $case56|5 + local.get $39 + i32.const 57 + i32.eq + br_if $case57|5 + local.get $39 + i32.const 58 + i32.eq + br_if $case58|5 + local.get $39 + i32.const 59 + i32.eq + br_if $case59|5 + local.get $39 + i32.const 60 + i32.eq + br_if $case60|5 + local.get $39 + i32.const 61 + i32.eq + br_if $case61|5 + local.get $39 + i32.const 62 + i32.eq + br_if $case62|5 + local.get $39 + i32.const 63 + i32.eq + br_if $case63|5 + br $case64|5 + end + local.get $37 + v128.load + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.4 + end + local.get $37 + v128.load offset=1008 + br $assembly/utils/v128/getV128|inlined.4 + end + i32.const 3120 + local.get $38 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + i32x4.add + end + global.set $assembly/simd/tmpW + global.get $assembly/simd/i + i32.const 16 + i32.ge_s + if + local.get $2 + local.set $40 + global.get $assembly/simd/i + local.set $41 + global.get $assembly/simd/tmpW + local.set $42 + block $break|6 + block $case64|6 + block $case63|6 + block $case62|6 + block $case61|6 + block $case60|6 + block $case59|6 + block $case58|6 + block $case57|6 + block $case56|6 + block $case55|6 + block $case54|6 + block $case53|6 + block $case52|6 + block $case51|6 + block $case50|6 + block $case49|6 + block $case48|6 + block $case47|6 + block $case46|6 + block $case45|6 + block $case44|6 + block $case43|6 + block $case42|6 + block $case41|6 + block $case40|6 + block $case39|6 + block $case38|6 + block $case37|6 + block $case36|6 + block $case35|6 + block $case34|6 + block $case33|6 + block $case32|6 + block $case31|6 + block $case30|6 + block $case29|6 + block $case28|6 + block $case27|6 + block $case26|6 + block $case25|6 + block $case24|6 + block $case23|6 + block $case22|6 + block $case21|6 + block $case20|6 + block $case19|6 + block $case18|6 + block $case17|6 + block $case16|6 + block $case15|6 + block $case14|6 + block $case13|6 + block $case12|6 + block $case11|6 + block $case10|6 + block $case9|6 + block $case8|6 + block $case7|6 + block $case6|6 + block $case5|6 + block $case4|6 + block $case3|6 + block $case2|6 + block $case1|6 + block $case0|6 + local.get $41 + local.set $43 + local.get $43 + i32.const 0 + i32.eq + br_if $case0|6 + local.get $43 + i32.const 1 + i32.eq + br_if $case1|6 + local.get $43 + i32.const 2 + i32.eq + br_if $case2|6 + local.get $43 + i32.const 3 + i32.eq + br_if $case3|6 + local.get $43 + i32.const 4 + i32.eq + br_if $case4|6 + local.get $43 + i32.const 5 + i32.eq + br_if $case5|6 + local.get $43 + i32.const 6 + i32.eq + br_if $case6|6 + local.get $43 + i32.const 7 + i32.eq + br_if $case7|6 + local.get $43 + i32.const 8 + i32.eq + br_if $case8|6 + local.get $43 + i32.const 9 + i32.eq + br_if $case9|6 + local.get $43 + i32.const 10 + i32.eq + br_if $case10|6 + local.get $43 + i32.const 11 + i32.eq + br_if $case11|6 + local.get $43 + i32.const 12 + i32.eq + br_if $case12|6 + local.get $43 + i32.const 13 + i32.eq + br_if $case13|6 + local.get $43 + i32.const 14 + i32.eq + br_if $case14|6 + local.get $43 + i32.const 15 + i32.eq + br_if $case15|6 + local.get $43 + i32.const 16 + i32.eq + br_if $case16|6 + local.get $43 + i32.const 17 + i32.eq + br_if $case17|6 + local.get $43 + i32.const 18 + i32.eq + br_if $case18|6 + local.get $43 + i32.const 19 + i32.eq + br_if $case19|6 + local.get $43 + i32.const 20 + i32.eq + br_if $case20|6 + local.get $43 + i32.const 21 + i32.eq + br_if $case21|6 + local.get $43 + i32.const 22 + i32.eq + br_if $case22|6 + local.get $43 + i32.const 23 + i32.eq + br_if $case23|6 + local.get $43 + i32.const 24 + i32.eq + br_if $case24|6 + local.get $43 + i32.const 25 + i32.eq + br_if $case25|6 + local.get $43 + i32.const 26 + i32.eq + br_if $case26|6 + local.get $43 + i32.const 27 + i32.eq + br_if $case27|6 + local.get $43 + i32.const 28 + i32.eq + br_if $case28|6 + local.get $43 + i32.const 29 + i32.eq + br_if $case29|6 + local.get $43 + i32.const 30 + i32.eq + br_if $case30|6 + local.get $43 + i32.const 31 + i32.eq + br_if $case31|6 + local.get $43 + i32.const 32 + i32.eq + br_if $case32|6 + local.get $43 + i32.const 33 + i32.eq + br_if $case33|6 + local.get $43 + i32.const 34 + i32.eq + br_if $case34|6 + local.get $43 + i32.const 35 + i32.eq + br_if $case35|6 + local.get $43 + i32.const 36 + i32.eq + br_if $case36|6 + local.get $43 + i32.const 37 + i32.eq + br_if $case37|6 + local.get $43 + i32.const 38 + i32.eq + br_if $case38|6 + local.get $43 + i32.const 39 + i32.eq + br_if $case39|6 + local.get $43 + i32.const 40 + i32.eq + br_if $case40|6 + local.get $43 + i32.const 41 + i32.eq + br_if $case41|6 + local.get $43 + i32.const 42 + i32.eq + br_if $case42|6 + local.get $43 + i32.const 43 + i32.eq + br_if $case43|6 + local.get $43 + i32.const 44 + i32.eq + br_if $case44|6 + local.get $43 + i32.const 45 + i32.eq + br_if $case45|6 + local.get $43 + i32.const 46 + i32.eq + br_if $case46|6 + local.get $43 + i32.const 47 + i32.eq + br_if $case47|6 + local.get $43 + i32.const 48 + i32.eq + br_if $case48|6 + local.get $43 + i32.const 49 + i32.eq + br_if $case49|6 + local.get $43 + i32.const 50 + i32.eq + br_if $case50|6 + local.get $43 + i32.const 51 + i32.eq + br_if $case51|6 + local.get $43 + i32.const 52 + i32.eq + br_if $case52|6 + local.get $43 + i32.const 53 + i32.eq + br_if $case53|6 + local.get $43 + i32.const 54 + i32.eq + br_if $case54|6 + local.get $43 + i32.const 55 + i32.eq + br_if $case55|6 + local.get $43 + i32.const 56 + i32.eq + br_if $case56|6 + local.get $43 + i32.const 57 + i32.eq + br_if $case57|6 + local.get $43 + i32.const 58 + i32.eq + br_if $case58|6 + local.get $43 + i32.const 59 + i32.eq + br_if $case59|6 + local.get $43 + i32.const 60 + i32.eq + br_if $case60|6 + local.get $43 + i32.const 61 + i32.eq + br_if $case61|6 + local.get $43 + i32.const 62 + i32.eq + br_if $case62|6 + local.get $43 + i32.const 63 + i32.eq + br_if $case63|6 + br $case64|6 + end + local.get $40 + local.get $42 + v128.store + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=16 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=32 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=48 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=64 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=80 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=96 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=112 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=128 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=144 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=160 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=176 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=192 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=208 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=224 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=240 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=256 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=272 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=288 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=304 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=320 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=336 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=352 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=368 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=384 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=400 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=416 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=432 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=448 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=464 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=480 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=496 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=512 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=528 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=544 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=560 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=576 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=592 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=608 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=624 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=640 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=656 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=672 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=688 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=704 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=720 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=736 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=752 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=768 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=784 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=800 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=816 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=832 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=848 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=864 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=880 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=896 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=912 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=928 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=944 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=960 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=976 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=992 + br $break|6 + end + local.get $40 + local.get $42 + v128.store offset=1008 + br $break|6 + end + i32.const 2928 + local.get $41 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 201 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + end + global.get $assembly/simd/hV128 + block $assembly/simd/EP1V128|inlined.0 (result v128) + global.get $assembly/simd/eV128 + local.set $44 + block $assembly/simd/rotrV128|inlined.4 (result v128) + local.get $44 + local.set $45 + i32.const 6 + local.set $46 + i32.const 32 + local.get $46 + i32.sub + local.set $47 + local.get $45 + local.get $46 + i32x4.shr_u + local.set $48 + local.get $45 + local.get $47 + i32x4.shl + local.set $49 + local.get $48 + local.get $49 + v128.or + br $assembly/simd/rotrV128|inlined.4 + end + block $assembly/simd/rotrV128|inlined.5 (result v128) + local.get $44 + local.set $50 + i32.const 11 + local.set $51 + i32.const 32 + local.get $51 + i32.sub + local.set $52 + local.get $50 + local.get $51 + i32x4.shr_u + local.set $53 + local.get $50 + local.get $52 + i32x4.shl + local.set $54 + local.get $53 + local.get $54 + v128.or + br $assembly/simd/rotrV128|inlined.5 + end + v128.xor + block $assembly/simd/rotrV128|inlined.6 (result v128) + local.get $44 + local.set $55 + i32.const 25 + local.set $56 + i32.const 32 + local.get $56 + i32.sub + local.set $57 + local.get $55 + local.get $56 + i32x4.shr_u + local.set $58 + local.get $55 + local.get $57 + i32x4.shl + local.set $59 + local.get $58 + local.get $59 + v128.or + br $assembly/simd/rotrV128|inlined.6 + end + v128.xor + br $assembly/simd/EP1V128|inlined.0 + end + i32x4.add + block $assembly/simd/CHV128|inlined.0 (result v128) + global.get $assembly/simd/eV128 + local.set $60 + global.get $assembly/simd/fV128 + local.set $61 + global.get $assembly/simd/gV128 + local.set $62 + local.get $60 + local.get $61 + v128.and + local.get $60 + v128.not + local.get $62 + v128.and + v128.xor + br $assembly/simd/CHV128|inlined.0 + end + i32x4.add + block $assembly/utils/v128/getV128|inlined.5 (result v128) + global.get $assembly/simd/kV128Ptr + local.set $63 + global.get $assembly/simd/i + local.set $64 + block $case64|7 + block $case63|7 + block $case62|7 + block $case61|7 + block $case60|7 + block $case59|7 + block $case58|7 + block $case57|7 + block $case56|7 + block $case55|7 + block $case54|7 + block $case53|7 + block $case52|7 + block $case51|7 + block $case50|7 + block $case49|7 + block $case48|7 + block $case47|7 + block $case46|7 + block $case45|7 + block $case44|7 + block $case43|7 + block $case42|7 + block $case41|7 + block $case40|7 + block $case39|7 + block $case38|7 + block $case37|7 + block $case36|7 + block $case35|7 + block $case34|7 + block $case33|7 + block $case32|7 + block $case31|7 + block $case30|7 + block $case29|7 + block $case28|7 + block $case27|7 + block $case26|7 + block $case25|7 + block $case24|7 + block $case23|7 + block $case22|7 + block $case21|7 + block $case20|7 + block $case19|7 + block $case18|7 + block $case17|7 + block $case16|7 + block $case15|7 + block $case14|7 + block $case13|7 + block $case12|7 + block $case11|7 + block $case10|7 + block $case9|7 + block $case8|7 + block $case7|7 + block $case6|7 + block $case5|7 + block $case4|7 + block $case3|7 + block $case2|7 + block $case1|7 + block $case0|7 + local.get $64 + local.set $65 + local.get $65 + i32.const 0 + i32.eq + br_if $case0|7 + local.get $65 + i32.const 1 + i32.eq + br_if $case1|7 + local.get $65 + i32.const 2 + i32.eq + br_if $case2|7 + local.get $65 + i32.const 3 + i32.eq + br_if $case3|7 + local.get $65 + i32.const 4 + i32.eq + br_if $case4|7 + local.get $65 + i32.const 5 + i32.eq + br_if $case5|7 + local.get $65 + i32.const 6 + i32.eq + br_if $case6|7 + local.get $65 + i32.const 7 + i32.eq + br_if $case7|7 + local.get $65 + i32.const 8 + i32.eq + br_if $case8|7 + local.get $65 + i32.const 9 + i32.eq + br_if $case9|7 + local.get $65 + i32.const 10 + i32.eq + br_if $case10|7 + local.get $65 + i32.const 11 + i32.eq + br_if $case11|7 + local.get $65 + i32.const 12 + i32.eq + br_if $case12|7 + local.get $65 + i32.const 13 + i32.eq + br_if $case13|7 + local.get $65 + i32.const 14 + i32.eq + br_if $case14|7 + local.get $65 + i32.const 15 + i32.eq + br_if $case15|7 + local.get $65 + i32.const 16 + i32.eq + br_if $case16|7 + local.get $65 + i32.const 17 + i32.eq + br_if $case17|7 + local.get $65 + i32.const 18 + i32.eq + br_if $case18|7 + local.get $65 + i32.const 19 + i32.eq + br_if $case19|7 + local.get $65 + i32.const 20 + i32.eq + br_if $case20|7 + local.get $65 + i32.const 21 + i32.eq + br_if $case21|7 + local.get $65 + i32.const 22 + i32.eq + br_if $case22|7 + local.get $65 + i32.const 23 + i32.eq + br_if $case23|7 + local.get $65 + i32.const 24 + i32.eq + br_if $case24|7 + local.get $65 + i32.const 25 + i32.eq + br_if $case25|7 + local.get $65 + i32.const 26 + i32.eq + br_if $case26|7 + local.get $65 + i32.const 27 + i32.eq + br_if $case27|7 + local.get $65 + i32.const 28 + i32.eq + br_if $case28|7 + local.get $65 + i32.const 29 + i32.eq + br_if $case29|7 + local.get $65 + i32.const 30 + i32.eq + br_if $case30|7 + local.get $65 + i32.const 31 + i32.eq + br_if $case31|7 + local.get $65 + i32.const 32 + i32.eq + br_if $case32|7 + local.get $65 + i32.const 33 + i32.eq + br_if $case33|7 + local.get $65 + i32.const 34 + i32.eq + br_if $case34|7 + local.get $65 + i32.const 35 + i32.eq + br_if $case35|7 + local.get $65 + i32.const 36 + i32.eq + br_if $case36|7 + local.get $65 + i32.const 37 + i32.eq + br_if $case37|7 + local.get $65 + i32.const 38 + i32.eq + br_if $case38|7 + local.get $65 + i32.const 39 + i32.eq + br_if $case39|7 + local.get $65 + i32.const 40 + i32.eq + br_if $case40|7 + local.get $65 + i32.const 41 + i32.eq + br_if $case41|7 + local.get $65 + i32.const 42 + i32.eq + br_if $case42|7 + local.get $65 + i32.const 43 + i32.eq + br_if $case43|7 + local.get $65 + i32.const 44 + i32.eq + br_if $case44|7 + local.get $65 + i32.const 45 + i32.eq + br_if $case45|7 + local.get $65 + i32.const 46 + i32.eq + br_if $case46|7 + local.get $65 + i32.const 47 + i32.eq + br_if $case47|7 + local.get $65 + i32.const 48 + i32.eq + br_if $case48|7 + local.get $65 + i32.const 49 + i32.eq + br_if $case49|7 + local.get $65 + i32.const 50 + i32.eq + br_if $case50|7 + local.get $65 + i32.const 51 + i32.eq + br_if $case51|7 + local.get $65 + i32.const 52 + i32.eq + br_if $case52|7 + local.get $65 + i32.const 53 + i32.eq + br_if $case53|7 + local.get $65 + i32.const 54 + i32.eq + br_if $case54|7 + local.get $65 + i32.const 55 + i32.eq + br_if $case55|7 + local.get $65 + i32.const 56 + i32.eq + br_if $case56|7 + local.get $65 + i32.const 57 + i32.eq + br_if $case57|7 + local.get $65 + i32.const 58 + i32.eq + br_if $case58|7 + local.get $65 + i32.const 59 + i32.eq + br_if $case59|7 + local.get $65 + i32.const 60 + i32.eq + br_if $case60|7 + local.get $65 + i32.const 61 + i32.eq + br_if $case61|7 + local.get $65 + i32.const 62 + i32.eq + br_if $case62|7 + local.get $65 + i32.const 63 + i32.eq + br_if $case63|7 + br $case64|7 + end + local.get $63 + v128.load + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=16 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=32 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=48 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=64 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=80 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=96 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=112 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=128 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=144 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=160 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=176 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=192 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=208 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=224 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=240 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=256 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=272 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=288 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=304 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=320 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=336 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=352 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=368 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=384 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=400 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=416 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=432 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=448 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=464 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=480 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=496 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=512 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=528 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=544 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=560 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=576 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=592 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=608 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=624 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=640 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=656 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=672 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=688 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=704 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=720 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=736 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=752 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=768 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=784 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=800 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=816 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=832 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=848 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=864 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=880 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=896 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=912 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=928 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=944 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=960 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=976 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=992 + br $assembly/utils/v128/getV128|inlined.5 + end + local.get $63 + v128.load offset=1008 + br $assembly/utils/v128/getV128|inlined.5 + end + i32.const 3120 + local.get $64 + i32.const 10 + call $~lib/number/I32#toString + call $~lib/string/String#concat + i32.const 3056 + i32.const 341 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + i32x4.add + global.get $assembly/simd/tmpW + i32x4.add + global.set $assembly/simd/t1V128 + block $assembly/simd/EP0V128|inlined.0 (result v128) + global.get $assembly/simd/aV128 + local.set $66 + block $assembly/simd/rotrV128|inlined.7 (result v128) + local.get $66 + local.set $67 + i32.const 2 + local.set $68 + i32.const 32 + local.get $68 + i32.sub + local.set $69 + local.get $67 + local.get $68 + i32x4.shr_u + local.set $70 + local.get $67 + local.get $69 + i32x4.shl + local.set $71 + local.get $70 + local.get $71 + v128.or + br $assembly/simd/rotrV128|inlined.7 + end + block $assembly/simd/rotrV128|inlined.8 (result v128) + local.get $66 + local.set $72 + i32.const 13 + local.set $73 + i32.const 32 + local.get $73 + i32.sub + local.set $74 + local.get $72 + local.get $73 + i32x4.shr_u + local.set $75 + local.get $72 + local.get $74 + i32x4.shl + local.set $76 + local.get $75 + local.get $76 + v128.or + br $assembly/simd/rotrV128|inlined.8 + end + v128.xor + block $assembly/simd/rotrV128|inlined.9 (result v128) + local.get $66 + local.set $77 + i32.const 22 + local.set $78 + i32.const 32 + local.get $78 + i32.sub + local.set $79 + local.get $77 + local.get $78 + i32x4.shr_u + local.set $80 + local.get $77 + local.get $79 + i32x4.shl + local.set $81 + local.get $80 + local.get $81 + v128.or + br $assembly/simd/rotrV128|inlined.9 + end + v128.xor + br $assembly/simd/EP0V128|inlined.0 + end + block $assembly/simd/MAJV128|inlined.0 (result v128) + global.get $assembly/simd/aV128 + local.set $82 + global.get $assembly/simd/bV128 + local.set $83 + global.get $assembly/simd/cV128 + local.set $84 + local.get $82 + local.get $83 + v128.and + local.get $82 + local.get $84 + v128.and + v128.xor + local.get $83 + local.get $84 + v128.and + v128.xor + br $assembly/simd/MAJV128|inlined.0 + end + i32x4.add + global.set $assembly/simd/t2V128 + global.get $assembly/simd/gV128 + global.set $assembly/simd/hV128 + global.get $assembly/simd/fV128 + global.set $assembly/simd/gV128 + global.get $assembly/simd/eV128 + global.set $assembly/simd/fV128 + global.get $assembly/simd/dV128 + global.get $assembly/simd/t1V128 + i32x4.add + global.set $assembly/simd/eV128 + global.get $assembly/simd/cV128 + global.set $assembly/simd/dV128 + global.get $assembly/simd/bV128 + global.set $assembly/simd/cV128 + global.get $assembly/simd/aV128 + global.set $assembly/simd/bV128 + global.get $assembly/simd/t1V128 + global.get $assembly/simd/t2V128 + i32x4.add + global.set $assembly/simd/aV128 + global.get $assembly/simd/i + i32.const 1 + i32.add + global.set $assembly/simd/i + br $for-loop|0 + end + end + global.get $assembly/simd/H0V128 + global.get $assembly/simd/aV128 + i32x4.add + global.set $assembly/simd/H0V128 + global.get $assembly/simd/H1V128 + global.get $assembly/simd/bV128 + i32x4.add + global.set $assembly/simd/H1V128 + global.get $assembly/simd/H2V128 + global.get $assembly/simd/cV128 + i32x4.add + global.set $assembly/simd/H2V128 + global.get $assembly/simd/H3V128 + global.get $assembly/simd/dV128 + i32x4.add + global.set $assembly/simd/H3V128 + global.get $assembly/simd/H4V128 + global.get $assembly/simd/eV128 + i32x4.add + global.set $assembly/simd/H4V128 + global.get $assembly/simd/H5V128 + global.get $assembly/simd/fV128 + i32x4.add + global.set $assembly/simd/H5V128 + global.get $assembly/simd/H6V128 + global.get $assembly/simd/gV128 + i32x4.add + global.set $assembly/simd/H6V128 + global.get $assembly/simd/H7V128 + global.get $assembly/simd/hV128 + i32x4.add + global.set $assembly/simd/H7V128 + call $assembly/simd/hashPreCompWV128 + local.get $1 + local.set $85 + i32.const 0 + local.set $86 + global.get $assembly/simd/H0V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + local.set $87 + local.get $85 + local.get $86 + i32.const 2 + i32.shl + i32.add + local.get $87 + i32.store + local.get $1 + local.set $88 + i32.const 1 + local.set $89 + global.get $assembly/simd/H1V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + local.set $90 + local.get $88 + local.get $89 + i32.const 2 + i32.shl + i32.add + local.get $90 + i32.store + local.get $1 + local.set $91 + i32.const 2 + local.set $92 + global.get $assembly/simd/H2V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + local.set $93 + local.get $91 + local.get $92 + i32.const 2 + i32.shl + i32.add + local.get $93 + i32.store + local.get $1 + local.set $94 + i32.const 3 + local.set $95 + global.get $assembly/simd/H3V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + local.set $96 + local.get $94 + local.get $95 + i32.const 2 + i32.shl + i32.add + local.get $96 + i32.store + local.get $1 + local.set $97 + i32.const 4 + local.set $98 + global.get $assembly/simd/H4V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + local.set $99 + local.get $97 + local.get $98 + i32.const 2 + i32.shl + i32.add + local.get $99 + i32.store + local.get $1 + local.set $100 + i32.const 5 + local.set $101 + global.get $assembly/simd/H5V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + local.set $102 + local.get $100 + local.get $101 + i32.const 2 + i32.shl + i32.add + local.get $102 + i32.store + local.get $1 + local.set $103 + i32.const 6 + local.set $104 + global.get $assembly/simd/H6V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + local.set $105 + local.get $103 + local.get $104 + i32.const 2 + i32.shl + i32.add + local.get $105 + i32.store + local.get $1 + local.set $106 + i32.const 7 + local.set $107 + global.get $assembly/simd/H7V128 + i32x4.extract_lane 0 + call $~lib/polyfills/bswap + local.set $108 + local.get $106 + local.get $107 + i32.const 2 + i32.shl + i32.add + local.get $108 + i32.store + local.get $1 + local.set $109 + i32.const 8 + local.set $110 + global.get $assembly/simd/H0V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + local.set $111 + local.get $109 + local.get $110 + i32.const 2 + i32.shl + i32.add + local.get $111 + i32.store + local.get $1 + local.set $112 + i32.const 9 + local.set $113 + global.get $assembly/simd/H1V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + local.set $114 + local.get $112 + local.get $113 + i32.const 2 + i32.shl + i32.add + local.get $114 + i32.store + local.get $1 + local.set $115 + i32.const 10 + local.set $116 + global.get $assembly/simd/H2V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + local.set $117 + local.get $115 + local.get $116 + i32.const 2 + i32.shl + i32.add + local.get $117 + i32.store + local.get $1 + local.set $118 + i32.const 11 + local.set $119 + global.get $assembly/simd/H3V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + local.set $120 + local.get $118 + local.get $119 + i32.const 2 + i32.shl + i32.add + local.get $120 + i32.store + local.get $1 + local.set $121 + i32.const 12 + local.set $122 + global.get $assembly/simd/H4V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + local.set $123 + local.get $121 + local.get $122 + i32.const 2 + i32.shl + i32.add + local.get $123 + i32.store + local.get $1 + local.set $124 + i32.const 13 + local.set $125 + global.get $assembly/simd/H5V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + local.set $126 + local.get $124 + local.get $125 + i32.const 2 + i32.shl + i32.add + local.get $126 + i32.store + local.get $1 + local.set $127 + i32.const 14 + local.set $128 + global.get $assembly/simd/H6V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + local.set $129 + local.get $127 + local.get $128 + i32.const 2 + i32.shl + i32.add + local.get $129 + i32.store + local.get $1 + local.set $130 + i32.const 15 + local.set $131 + global.get $assembly/simd/H7V128 + i32x4.extract_lane 1 + call $~lib/polyfills/bswap + local.set $132 + local.get $130 + local.get $131 + i32.const 2 + i32.shl + i32.add + local.get $132 + i32.store + local.get $1 + local.set $133 + i32.const 16 + local.set $134 + global.get $assembly/simd/H0V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + local.set $135 + local.get $133 + local.get $134 + i32.const 2 + i32.shl + i32.add + local.get $135 + i32.store + local.get $1 + local.set $136 + i32.const 17 + local.set $137 + global.get $assembly/simd/H1V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + local.set $138 + local.get $136 + local.get $137 + i32.const 2 + i32.shl + i32.add + local.get $138 + i32.store + local.get $1 + local.set $139 + i32.const 18 + local.set $140 + global.get $assembly/simd/H2V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + local.set $141 + local.get $139 + local.get $140 + i32.const 2 + i32.shl + i32.add + local.get $141 + i32.store + local.get $1 + local.set $142 + i32.const 19 + local.set $143 + global.get $assembly/simd/H3V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + local.set $144 + local.get $142 + local.get $143 + i32.const 2 + i32.shl + i32.add + local.get $144 + i32.store + local.get $1 + local.set $145 + i32.const 20 + local.set $146 + global.get $assembly/simd/H4V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + local.set $147 + local.get $145 + local.get $146 + i32.const 2 + i32.shl + i32.add + local.get $147 + i32.store + local.get $1 + local.set $148 + i32.const 21 + local.set $149 + global.get $assembly/simd/H5V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + local.set $150 + local.get $148 + local.get $149 + i32.const 2 + i32.shl + i32.add + local.get $150 + i32.store + local.get $1 + local.set $151 + i32.const 22 + local.set $152 + global.get $assembly/simd/H6V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + local.set $153 + local.get $151 + local.get $152 + i32.const 2 + i32.shl + i32.add + local.get $153 + i32.store + local.get $1 + local.set $154 + i32.const 23 + local.set $155 + global.get $assembly/simd/H7V128 + i32x4.extract_lane 2 + call $~lib/polyfills/bswap + local.set $156 + local.get $154 + local.get $155 + i32.const 2 + i32.shl + i32.add + local.get $156 + i32.store + local.get $1 + local.set $157 + i32.const 24 + local.set $158 + global.get $assembly/simd/H0V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + local.set $159 + local.get $157 + local.get $158 + i32.const 2 + i32.shl + i32.add + local.get $159 + i32.store + local.get $1 + local.set $160 + i32.const 25 + local.set $161 + global.get $assembly/simd/H1V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + local.set $162 + local.get $160 + local.get $161 + i32.const 2 + i32.shl + i32.add + local.get $162 + i32.store + local.get $1 + local.set $163 + i32.const 26 + local.set $164 + global.get $assembly/simd/H2V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + local.set $165 + local.get $163 + local.get $164 + i32.const 2 + i32.shl + i32.add + local.get $165 + i32.store + local.get $1 + local.set $166 + i32.const 27 + local.set $167 + global.get $assembly/simd/H3V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + local.set $168 + local.get $166 + local.get $167 + i32.const 2 + i32.shl + i32.add + local.get $168 + i32.store + local.get $1 + local.set $169 + i32.const 28 + local.set $170 + global.get $assembly/simd/H4V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + local.set $171 + local.get $169 + local.get $170 + i32.const 2 + i32.shl + i32.add + local.get $171 + i32.store + local.get $1 + local.set $172 + i32.const 29 + local.set $173 + global.get $assembly/simd/H5V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + local.set $174 + local.get $172 + local.get $173 + i32.const 2 + i32.shl + i32.add + local.get $174 + i32.store + local.get $1 + local.set $175 + i32.const 30 + local.set $176 + global.get $assembly/simd/H6V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + local.set $177 + local.get $175 + local.get $176 + i32.const 2 + i32.shl + i32.add + local.get $177 + i32.store + local.get $1 + local.set $178 + i32.const 31 + local.set $179 + global.get $assembly/simd/H7V128 + i32x4.extract_lane 3 + call $~lib/polyfills/bswap + local.set $180 + local.get $178 + local.get $179 + i32.const 2 + i32.shl + i32.add + local.get $180 + i32.store + ) + (func $assembly/index.simd/batchHash4UintArray64s (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (local $53 i32) + (local $54 i32) + (local $55 i32) + (local $56 i32) + (local $57 i32) + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 16 + i32.lt_s + if + global.get $assembly/common/wPtr + local.set $13 + global.get $assembly/common/PARALLEL_FACTOR + local.get $1 + i32.mul + local.set $14 + block $assembly/common/load32be|inlined.0 (result i32) + global.get $assembly/common/inputPtr + local.set $2 + local.get $1 + local.set $3 + local.get $3 + i32.const 2 + i32.shl + local.set $4 + block $assembly/common/load8|inlined.0 (result i32) + local.get $2 + local.set $5 + local.get $4 + i32.const 0 + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.0 + end + i32.const 255 + i32.and + i32.const 24 + i32.shl + block $assembly/common/load8|inlined.1 (result i32) + local.get $2 + local.set $7 + local.get $4 + i32.const 1 + i32.add + local.set $8 + local.get $7 + local.get $8 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.1 + end + i32.const 255 + i32.and + i32.const 16 + i32.shl + i32.or + block $assembly/common/load8|inlined.2 (result i32) + local.get $2 + local.set $9 + local.get $4 + i32.const 2 + i32.add + local.set $10 + local.get $9 + local.get $10 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.2 + end + i32.const 255 + i32.and + i32.const 8 + i32.shl + i32.or + block $assembly/common/load8|inlined.3 (result i32) + local.get $2 + local.set $11 + local.get $4 + i32.const 3 + i32.add + local.set $12 + local.get $11 + local.get $12 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.3 + end + i32.const 255 + i32.and + i32.const 0 + i32.shl + i32.or + br $assembly/common/load32be|inlined.0 + end + local.set $15 + local.get $13 + local.get $14 + i32.const 2 + i32.shl + i32.add + local.get $15 + i32.store + global.get $assembly/common/wPtr + local.set $27 + global.get $assembly/common/PARALLEL_FACTOR + local.get $1 + i32.mul + i32.const 1 + i32.add + local.set $28 + block $assembly/common/load32be|inlined.1 (result i32) + global.get $assembly/common/inputPtr + local.set $16 + local.get $1 + i32.const 16 + i32.add + local.set $17 + local.get $17 + i32.const 2 + i32.shl + local.set $18 + block $assembly/common/load8|inlined.4 (result i32) + local.get $16 + local.set $19 + local.get $18 + i32.const 0 + i32.add + local.set $20 + local.get $19 + local.get $20 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.4 + end + i32.const 255 + i32.and + i32.const 24 + i32.shl + block $assembly/common/load8|inlined.5 (result i32) + local.get $16 + local.set $21 + local.get $18 + i32.const 1 + i32.add + local.set $22 + local.get $21 + local.get $22 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.5 + end + i32.const 255 + i32.and + i32.const 16 + i32.shl + i32.or + block $assembly/common/load8|inlined.6 (result i32) + local.get $16 + local.set $23 + local.get $18 + i32.const 2 + i32.add + local.set $24 + local.get $23 + local.get $24 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.6 + end + i32.const 255 + i32.and + i32.const 8 + i32.shl + i32.or + block $assembly/common/load8|inlined.7 (result i32) + local.get $16 + local.set $25 + local.get $18 + i32.const 3 + i32.add + local.set $26 + local.get $25 + local.get $26 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.7 + end + i32.const 255 + i32.and + i32.const 0 + i32.shl + i32.or + br $assembly/common/load32be|inlined.1 + end + local.set $29 + local.get $27 + local.get $28 + i32.const 2 + i32.shl + i32.add + local.get $29 + i32.store + global.get $assembly/common/wPtr + local.set $41 + global.get $assembly/common/PARALLEL_FACTOR + local.get $1 + i32.mul + i32.const 2 + i32.add + local.set $42 + block $assembly/common/load32be|inlined.2 (result i32) + global.get $assembly/common/inputPtr + local.set $30 + local.get $1 + i32.const 32 + i32.add + local.set $31 + local.get $31 + i32.const 2 + i32.shl + local.set $32 + block $assembly/common/load8|inlined.8 (result i32) + local.get $30 + local.set $33 + local.get $32 + i32.const 0 + i32.add + local.set $34 + local.get $33 + local.get $34 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.8 + end + i32.const 255 + i32.and + i32.const 24 + i32.shl + block $assembly/common/load8|inlined.9 (result i32) + local.get $30 + local.set $35 + local.get $32 + i32.const 1 + i32.add + local.set $36 + local.get $35 + local.get $36 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.9 + end + i32.const 255 + i32.and + i32.const 16 + i32.shl + i32.or + block $assembly/common/load8|inlined.10 (result i32) + local.get $30 + local.set $37 + local.get $32 + i32.const 2 + i32.add + local.set $38 + local.get $37 + local.get $38 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.10 + end + i32.const 255 + i32.and + i32.const 8 + i32.shl + i32.or + block $assembly/common/load8|inlined.11 (result i32) + local.get $30 + local.set $39 + local.get $32 + i32.const 3 + i32.add + local.set $40 + local.get $39 + local.get $40 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.11 + end + i32.const 255 + i32.and + i32.const 0 + i32.shl + i32.or + br $assembly/common/load32be|inlined.2 + end + local.set $43 + local.get $41 + local.get $42 + i32.const 2 + i32.shl + i32.add + local.get $43 + i32.store + global.get $assembly/common/wPtr + local.set $55 + global.get $assembly/common/PARALLEL_FACTOR + local.get $1 + i32.mul + i32.const 3 + i32.add + local.set $56 + block $assembly/common/load32be|inlined.3 (result i32) + global.get $assembly/common/inputPtr + local.set $44 + local.get $1 + i32.const 48 + i32.add + local.set $45 + local.get $45 + i32.const 2 + i32.shl + local.set $46 + block $assembly/common/load8|inlined.12 (result i32) + local.get $44 + local.set $47 + local.get $46 + i32.const 0 + i32.add + local.set $48 + local.get $47 + local.get $48 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.12 + end + i32.const 255 + i32.and + i32.const 24 + i32.shl + block $assembly/common/load8|inlined.13 (result i32) + local.get $44 + local.set $49 + local.get $46 + i32.const 1 + i32.add + local.set $50 + local.get $49 + local.get $50 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.13 + end + i32.const 255 + i32.and + i32.const 16 + i32.shl + i32.or + block $assembly/common/load8|inlined.14 (result i32) + local.get $44 + local.set $51 + local.get $46 + i32.const 2 + i32.add + local.set $52 + local.get $51 + local.get $52 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.14 + end + i32.const 255 + i32.and + i32.const 8 + i32.shl + i32.or + block $assembly/common/load8|inlined.15 (result i32) + local.get $44 + local.set $53 + local.get $46 + i32.const 3 + i32.add + local.set $54 + local.get $53 + local.get $54 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.15 + end + i32.const 255 + i32.and + i32.const 0 + i32.shl + i32.or + br $assembly/common/load32be|inlined.3 + end + local.set $57 + local.get $55 + local.get $56 + i32.const 2 + i32.shl + i32.add + local.get $57 + i32.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $assembly/common/wPtr + local.get $0 + call $assembly/simd/digest64V128 + ) + (func $assembly/index.simd/batchHash4HashObjectInputs (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 16 + global.get $assembly/common/PARALLEL_FACTOR + i32.mul + i32.lt_s + if + global.get $assembly/common/wPtr + local.set $13 + local.get $1 + local.set $14 + block $assembly/common/load32be|inlined.4 (result i32) + global.get $assembly/common/inputPtr + local.set $2 + local.get $1 + local.set $3 + local.get $3 + i32.const 2 + i32.shl + local.set $4 + block $assembly/common/load8|inlined.16 (result i32) + local.get $2 + local.set $5 + local.get $4 + i32.const 0 + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.16 + end + i32.const 255 + i32.and + i32.const 24 + i32.shl + block $assembly/common/load8|inlined.17 (result i32) + local.get $2 + local.set $7 + local.get $4 + i32.const 1 + i32.add + local.set $8 + local.get $7 + local.get $8 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.17 + end + i32.const 255 + i32.and + i32.const 16 + i32.shl + i32.or + block $assembly/common/load8|inlined.18 (result i32) + local.get $2 + local.set $9 + local.get $4 + i32.const 2 + i32.add + local.set $10 + local.get $9 + local.get $10 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.18 + end + i32.const 255 + i32.and + i32.const 8 + i32.shl + i32.or + block $assembly/common/load8|inlined.19 (result i32) + local.get $2 + local.set $11 + local.get $4 + i32.const 3 + i32.add + local.set $12 + local.get $11 + local.get $12 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.19 + end + i32.const 255 + i32.and + i32.const 0 + i32.shl + i32.or + br $assembly/common/load32be|inlined.4 + end + local.set $15 + local.get $13 + local.get $14 + i32.const 2 + i32.shl + i32.add + local.get $15 + i32.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $assembly/common/wPtr + local.get $0 + call $assembly/simd/digest64V128 + ) + (func $assembly/common/init + i32.const 1779033703 + global.set $assembly/common/H0 + i32.const -1150833019 + global.set $assembly/common/H1 + i32.const 1013904242 + global.set $assembly/common/H2 + i32.const -1521486534 + global.set $assembly/common/H3 + i32.const 1359893119 + global.set $assembly/common/H4 + i32.const -1694144372 + global.set $assembly/common/H5 + i32.const 528734635 + global.set $assembly/common/H6 + i32.const 1541459225 + global.set $assembly/common/H7 + i32.const 0 + global.set $assembly/common/mLength + i32.const 0 + global.set $assembly/common/bytesHashed + ) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h + i32.const 0 + global.set $assembly/common/i + loop $for-loop|0 + global.get $assembly/common/i + i32.const 16 + i32.lt_u + if + local.get $0 + local.set $13 + global.get $assembly/common/i + local.set $14 + block $assembly/common/load32be|inlined.5 (result i32) + local.get $1 + local.set $2 + global.get $assembly/common/i + local.set $3 + local.get $3 + i32.const 2 + i32.shl + local.set $4 + block $assembly/common/load8|inlined.20 (result i32) + local.get $2 + local.set $5 + local.get $4 + i32.const 0 + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.20 + end + i32.const 255 + i32.and + i32.const 24 + i32.shl + block $assembly/common/load8|inlined.21 (result i32) + local.get $2 + local.set $7 + local.get $4 + i32.const 1 + i32.add + local.set $8 + local.get $7 + local.get $8 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.21 + end + i32.const 255 + i32.and + i32.const 16 + i32.shl + i32.or + block $assembly/common/load8|inlined.22 (result i32) + local.get $2 + local.set $9 + local.get $4 + i32.const 2 + i32.add + local.set $10 + local.get $9 + local.get $10 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.22 + end + i32.const 255 + i32.and + i32.const 8 + i32.shl + i32.or + block $assembly/common/load8|inlined.23 (result i32) + local.get $2 + local.set $11 + local.get $4 + i32.const 3 + i32.add + local.set $12 + local.get $11 + local.get $12 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.23 + end + i32.const 255 + i32.and + i32.const 0 + i32.shl + i32.or + br $assembly/common/load32be|inlined.5 + end + local.set $15 + local.get $13 + local.get $14 + i32.const 2 + i32.shl + i32.add + local.get $15 + i32.store + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|0 + end + end + i32.const 16 + global.set $assembly/common/i + loop $for-loop|1 + global.get $assembly/common/i + i32.const 64 + i32.lt_u + if + local.get $0 + local.set $26 + global.get $assembly/common/i + local.set $27 + block $assembly/common/SIG1|inlined.0 (result i32) + block $assembly/common/load32|inlined.0 (result i32) + local.get $0 + local.set $16 + global.get $assembly/common/i + i32.const 2 + i32.sub + local.set $17 + local.get $16 + local.get $17 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.0 + end + local.set $18 + local.get $18 + i32.const 17 + i32.rotr + local.get $18 + i32.const 19 + i32.rotr + i32.xor + local.get $18 + i32.const 10 + i32.shr_u + i32.xor + br $assembly/common/SIG1|inlined.0 + end + block $assembly/common/load32|inlined.1 (result i32) + local.get $0 + local.set $19 + global.get $assembly/common/i + i32.const 7 + i32.sub + local.set $20 + local.get $19 + local.get $20 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.1 + end + i32.add + block $assembly/common/SIG0|inlined.0 (result i32) + block $assembly/common/load32|inlined.2 (result i32) + local.get $0 + local.set $21 + global.get $assembly/common/i + i32.const 15 + i32.sub + local.set $22 + local.get $21 + local.get $22 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.2 + end + local.set $23 + local.get $23 + i32.const 7 + i32.rotr + local.get $23 + i32.const 18 + i32.rotr + i32.xor + local.get $23 + i32.const 3 + i32.shr_u + i32.xor + br $assembly/common/SIG0|inlined.0 + end + i32.add + block $assembly/common/load32|inlined.3 (result i32) + local.get $0 + local.set $24 + global.get $assembly/common/i + i32.const 16 + i32.sub + local.set $25 + local.get $24 + local.get $25 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.3 + end + i32.add + local.set $28 + local.get $26 + local.get $27 + i32.const 2 + i32.shl + i32.add + local.get $28 + i32.store + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|1 + end + end + i32.const 0 + global.set $assembly/common/i + loop $for-loop|2 + global.get $assembly/common/i + i32.const 64 + i32.lt_u + if + global.get $assembly/common/h + block $assembly/common/EP1|inlined.0 (result i32) + global.get $assembly/common/e + local.set $29 + local.get $29 + i32.const 6 + i32.rotr + local.get $29 + i32.const 11 + i32.rotr + i32.xor + local.get $29 + i32.const 25 + i32.rotr + i32.xor + br $assembly/common/EP1|inlined.0 + end + i32.add + block $assembly/common/CH|inlined.0 (result i32) + global.get $assembly/common/e + local.set $30 + global.get $assembly/common/f + local.set $31 + global.get $assembly/common/g + local.set $32 + local.get $30 + local.get $31 + i32.and + local.get $30 + i32.const -1 + i32.xor + local.get $32 + i32.and + i32.xor + br $assembly/common/CH|inlined.0 + end + i32.add + block $assembly/common/load32|inlined.4 (result i32) + global.get $assembly/common/kPtr + local.set $33 + global.get $assembly/common/i + local.set $34 + local.get $33 + local.get $34 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.4 + end + i32.add + block $assembly/common/load32|inlined.5 (result i32) + local.get $0 + local.set $35 + global.get $assembly/common/i + local.set $36 + local.get $35 + local.get $36 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.5 + end + i32.add + global.set $assembly/common/t1 + block $assembly/common/EP0|inlined.0 (result i32) + global.get $assembly/common/a + local.set $37 + local.get $37 + i32.const 2 + i32.rotr + local.get $37 + i32.const 13 + i32.rotr + i32.xor + local.get $37 + i32.const 22 + i32.rotr + i32.xor + br $assembly/common/EP0|inlined.0 + end + block $assembly/common/MAJ|inlined.0 (result i32) + global.get $assembly/common/a + local.set $38 + global.get $assembly/common/b + local.set $39 + global.get $assembly/common/c + local.set $40 + local.get $38 + local.get $39 + i32.and + local.get $38 + local.get $40 + i32.and + i32.xor + local.get $39 + local.get $40 + i32.and + i32.xor + br $assembly/common/MAJ|inlined.0 + end + i32.add + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|2 + end + end + global.get $assembly/common/H0 + global.get $assembly/common/a + i32.add + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b + i32.add + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c + i32.add + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d + i32.add + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e + i32.add + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f + i32.add + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g + i32.add + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h + i32.add + global.set $assembly/common/H7 + ) + (func $assembly/common/update (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + local.set $2 + global.get $assembly/common/bytesHashed + local.get $1 + i32.add + global.set $assembly/common/bytesHashed + global.get $assembly/common/mLength + if + i32.const 64 + global.get $assembly/common/mLength + i32.sub + local.get $1 + i32.le_s + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.get $0 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + memory.copy + global.get $assembly/common/mLength + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.add + global.set $assembly/common/mLength + local.get $2 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.add + local.set $2 + local.get $1 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.sub + local.set $1 + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + i32.const 0 + global.set $assembly/common/mLength + else + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.get $0 + local.get $1 + memory.copy + global.get $assembly/common/mLength + local.get $1 + i32.add + global.set $assembly/common/mLength + local.get $2 + local.get $1 + i32.add + local.set $2 + local.get $1 + local.get $1 + i32.sub + local.set $1 + return + end + end + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.const 64 + i32.div_s + i32.lt_s + if + global.get $assembly/common/wPtr + local.get $0 + local.get $2 + i32.add + call $assembly/common/hashBlocks + local.get $3 + i32.const 1 + i32.add + local.set $3 + local.get $2 + i32.const 64 + i32.add + local.set $2 + br $for-loop|0 + end + end + local.get $1 + i32.const 63 + i32.and + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.get $0 + local.get $2 + i32.add + local.get $1 + i32.const 63 + i32.and + memory.copy + global.get $assembly/common/mLength + local.get $1 + i32.const 63 + i32.and + i32.add + global.set $assembly/common/mLength + end + ) + (func $~lib/polyfills/bswap (param $0 i32) (result i32) + i32.const 1 + drop + i32.const 4 + i32.const 1 + i32.eq + drop + i32.const 4 + i32.const 2 + i32.eq + drop + i32.const 4 + i32.const 4 + i32.eq + drop + local.get $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + return + ) + (func $assembly/common/final (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 63 + i32.lt_s + if + global.get $assembly/common/mPtr + local.set $1 + global.get $assembly/common/mLength + local.set $2 + i32.const 128 + local.set $3 + local.get $1 + local.get $2 + i32.add + local.get $3 + i32.store8 + global.get $assembly/common/mLength + i32.const 1 + i32.add + global.set $assembly/common/mLength + end + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 56 + i32.ge_s + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.set $4 + i32.const 0 + local.set $5 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + local.set $6 + local.get $4 + local.get $6 + i32.add + local.set $7 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.lt_u + if + local.get $4 + local.get $5 + i32.store8 + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|0 + end + end + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + i32.const 0 + global.set $assembly/common/mLength + end + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 63 + i32.ge_s + if + global.get $assembly/common/mPtr + local.set $8 + global.get $assembly/common/mLength + local.set $9 + i32.const 128 + local.set $10 + local.get $8 + local.get $9 + i32.add + local.get $10 + i32.store8 + global.get $assembly/common/mLength + i32.const 1 + i32.add + global.set $assembly/common/mLength + end + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.set $11 + i32.const 0 + local.set $12 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.const 8 + i32.sub + local.set $13 + local.get $11 + local.get $13 + i32.add + local.set $14 + loop $while-continue|1 + local.get $11 + local.get $14 + i32.lt_u + if + local.get $11 + local.get $12 + i32.store8 + local.get $11 + i32.const 1 + i32.add + local.set $11 + br $while-continue|1 + end + end + global.get $assembly/common/mPtr + i32.const 64 + i32.add + i32.const 8 + i32.sub + global.get $assembly/common/bytesHashed + i32.const 536870912 + i32.div_s + call $~lib/polyfills/bswap + i32.store + global.get $assembly/common/mPtr + i32.const 64 + i32.add + i32.const 4 + i32.sub + global.get $assembly/common/bytesHashed + i32.const 3 + i32.shl + call $~lib/polyfills/bswap + i32.store + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + local.get $0 + local.set $15 + i32.const 0 + local.set $16 + global.get $assembly/common/H0 + call $~lib/polyfills/bswap + local.set $17 + local.get $15 + local.get $16 + i32.const 2 + i32.shl + i32.add + local.get $17 + i32.store + local.get $0 + local.set $18 + i32.const 1 + local.set $19 + global.get $assembly/common/H1 + call $~lib/polyfills/bswap + local.set $20 + local.get $18 + local.get $19 + i32.const 2 + i32.shl + i32.add + local.get $20 + i32.store + local.get $0 + local.set $21 + i32.const 2 + local.set $22 + global.get $assembly/common/H2 + call $~lib/polyfills/bswap + local.set $23 + local.get $21 + local.get $22 + i32.const 2 + i32.shl + i32.add + local.get $23 + i32.store + local.get $0 + local.set $24 + i32.const 3 + local.set $25 + global.get $assembly/common/H3 + call $~lib/polyfills/bswap + local.set $26 + local.get $24 + local.get $25 + i32.const 2 + i32.shl + i32.add + local.get $26 + i32.store + local.get $0 + local.set $27 + i32.const 4 + local.set $28 + global.get $assembly/common/H4 + call $~lib/polyfills/bswap + local.set $29 + local.get $27 + local.get $28 + i32.const 2 + i32.shl + i32.add + local.get $29 + i32.store + local.get $0 + local.set $30 + i32.const 5 + local.set $31 + global.get $assembly/common/H5 + call $~lib/polyfills/bswap + local.set $32 + local.get $30 + local.get $31 + i32.const 2 + i32.shl + i32.add + local.get $32 + i32.store + local.get $0 + local.set $33 + i32.const 6 + local.set $34 + global.get $assembly/common/H6 + call $~lib/polyfills/bswap + local.set $35 + local.get $33 + local.get $34 + i32.const 2 + i32.shl + i32.add + local.get $35 + i32.store + local.get $0 + local.set $36 + i32.const 7 + local.set $37 + global.get $assembly/common/H7 + call $~lib/polyfills/bswap + local.set $38 + local.get $36 + local.get $37 + i32.const 2 + i32.shl + i32.add + local.get $38 + i32.store + ) + (func $assembly/common/digest (param $0 i32) + call $assembly/common/init + global.get $assembly/common/inputPtr + local.get $0 + call $assembly/common/update + global.get $assembly/common/outputPtr + call $assembly/common/final + ) + (func $assembly/common/hashPreCompW (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h + i32.const 0 + global.set $assembly/common/i + loop $for-loop|0 + global.get $assembly/common/i + i32.const 64 + i32.lt_u + if + global.get $assembly/common/h + block $assembly/common/EP1|inlined.1 (result i32) + global.get $assembly/common/e + local.set $1 + local.get $1 + i32.const 6 + i32.rotr + local.get $1 + i32.const 11 + i32.rotr + i32.xor + local.get $1 + i32.const 25 + i32.rotr + i32.xor + br $assembly/common/EP1|inlined.1 + end + i32.add + block $assembly/common/CH|inlined.1 (result i32) + global.get $assembly/common/e + local.set $2 + global.get $assembly/common/f + local.set $3 + global.get $assembly/common/g + local.set $4 + local.get $2 + local.get $3 + i32.and + local.get $2 + i32.const -1 + i32.xor + local.get $4 + i32.and + i32.xor + br $assembly/common/CH|inlined.1 + end + i32.add + block $assembly/common/load32|inlined.6 (result i32) + local.get $0 + local.set $5 + global.get $assembly/common/i + local.set $6 + local.get $5 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.6 + end + i32.add + global.set $assembly/common/t1 + block $assembly/common/EP0|inlined.1 (result i32) + global.get $assembly/common/a + local.set $7 + local.get $7 + i32.const 2 + i32.rotr + local.get $7 + i32.const 13 + i32.rotr + i32.xor + local.get $7 + i32.const 22 + i32.rotr + i32.xor + br $assembly/common/EP0|inlined.1 + end + block $assembly/common/MAJ|inlined.1 (result i32) + global.get $assembly/common/a + local.set $8 + global.get $assembly/common/b + local.set $9 + global.get $assembly/common/c + local.set $10 + local.get $8 + local.get $9 + i32.and + local.get $8 + local.get $10 + i32.and + i32.xor + local.get $9 + local.get $10 + i32.and + i32.xor + br $assembly/common/MAJ|inlined.1 + end + i32.add + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|0 + end + end + global.get $assembly/common/H0 + global.get $assembly/common/a + i32.add + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b + i32.add + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c + i32.add + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d + i32.add + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e + i32.add + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f + i32.add + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g + i32.add + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h + i32.add + global.set $assembly/common/H7 + ) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + call $assembly/common/init + global.get $assembly/common/wPtr + local.get $0 + call $assembly/common/hashBlocks + global.get $assembly/common/w64Ptr + call $assembly/common/hashPreCompW + local.get $1 + local.set $2 + i32.const 0 + local.set $3 + global.get $assembly/common/H0 + call $~lib/polyfills/bswap + local.set $4 + local.get $2 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $4 + i32.store + local.get $1 + local.set $5 + i32.const 1 + local.set $6 + global.get $assembly/common/H1 + call $~lib/polyfills/bswap + local.set $7 + local.get $5 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store + local.get $1 + local.set $8 + i32.const 2 + local.set $9 + global.get $assembly/common/H2 + call $~lib/polyfills/bswap + local.set $10 + local.get $8 + local.get $9 + i32.const 2 + i32.shl + i32.add + local.get $10 + i32.store + local.get $1 + local.set $11 + i32.const 3 + local.set $12 + global.get $assembly/common/H3 + call $~lib/polyfills/bswap + local.set $13 + local.get $11 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $13 + i32.store + local.get $1 + local.set $14 + i32.const 4 + local.set $15 + global.get $assembly/common/H4 + call $~lib/polyfills/bswap + local.set $16 + local.get $14 + local.get $15 + i32.const 2 + i32.shl + i32.add + local.get $16 + i32.store + local.get $1 + local.set $17 + i32.const 5 + local.set $18 + global.get $assembly/common/H5 + call $~lib/polyfills/bswap + local.set $19 + local.get $17 + local.get $18 + i32.const 2 + i32.shl + i32.add + local.get $19 + i32.store + local.get $1 + local.set $20 + i32.const 6 + local.set $21 + global.get $assembly/common/H6 + call $~lib/polyfills/bswap + local.set $22 + local.get $20 + local.get $21 + i32.const 2 + i32.shl + i32.add + local.get $22 + i32.store + local.get $1 + local.set $23 + i32.const 7 + local.set $24 + global.get $assembly/common/H7 + call $~lib/polyfills/bswap + local.set $25 + local.get $23 + local.get $24 + i32.const 2 + i32.shl + i32.add + local.get $25 + i32.store + ) + (func $~start + call $start:assembly/index.simd + ) +) diff --git a/packages/as-sha256/build/untouched.wasm b/packages/as-sha256/build/untouched.wasm index c450859d1f50f818dfd08b882728b53fd7bf1648..216d9545c73e862c8f5bf11faaea25543e307bed 100644 GIT binary patch delta 2571 zcmbVNOKc=Z8Lp~+O?SDX) z#-4>uB4|qp!66c$7Ka591%wm?LR!cvaKIAR2oeqm2|*Abkl+L)oK^~7_1I>C3t-8A z{rx|_`kytQ`#FE*{v~#K|0-vU@r~LgUhv|QC<=CoF@N&nOH18cGnT>DWc=Gc23L8Wp-MM!8DYh0rx%06r`(t*xHet3NU>ot(D_5`YJuO&` zZ>BM4j!RbOS@zT6X2LXE6`@RVYQ81Pm&0>BC`EK_Ym)kwI2g5bq z;=Zt|Wdv}9nlgb79;*5v)bz2)afA!0WA0Ak{uVf;7?a2j;^S6m@yLnAn}KV33-|}< zCa7Kzs*NJ(pe1J*^GUD@Z{$F_)=Fnbz} z^HzbH2Od*Bh~Oa=76wdEzTVuVSyTn72)NCGGS$(7mPxB6GDvSZx2AksYpu{mI8LX| zE?_`_eODs+mV6H*rnrrWgU0SRiCVDBNcxZ|V~NOGd>jZ8PvN^yeLHZBLhwTx+EwrY z_%&Lyr)9|03h>+?UwQG>*e33?zk2?c&)S;%>mPpjyTBHy`@x@n^zCPC=HB||%b$;| zbkDu^+U-*ec>**4R`x1pLsp9O~>py{x{@rBR(uBu`Q}uMX8;l%ubWEZK~TD zYS>w7+BsNuf^F(Jbw1n{ekvQ(G0kds1UNL;iLnXGmM%9sj_0;h=V+ulayw+lehaW( z6a_q)QPe4aqTkLt)j80+F}&LFaGnW8?Em zwL~*!nP!dFOL}>vmoSf7kB;?`F}U+J)9rSQ)ub(=&Q}HV?zRhnR>@c9i_Q#VJwrcgJ9`n6EUF3smC=|A(Jgj%^xs75Nc zHA-nJw<%>bo!g8gwR0<}PBXc!Q=_2S+%~95bGdEGpK+{`V@A-1MqxK-9Sd{FXnj}n zhr?~Mw4Q4}OOV{n7>)^_+jR_KCC)Lre8TP;P6M*4?*||{a>k%mjvgOQWtU8CfRzxr z>X(idPfhN?H(<_;j*Y>>zPv>rpV|QL&YbhZK^9l6mw%x)BJqHdD($;2Otc8sgvckV z0xF00^tqFOj!e%SnVK4{o75d}Jc2cy<~n;2+kXt}ukv6LVD$;uZM*p)3pRJPUEF$r zKXFwJw*;e!IP~IRJP}pbR@2-9grY>Pnkn7V%1?!!f|snc(~g@q)zoTf`int|^9;@m z=i@jf&S!Dfao+AP77d_~HhQH(p%WDA64R$9v;%E*ztRr8RyLWkw2DV%K&RE3{J!AX zf4`CU?gdAC%KHbiX&cirV*;8j9~~?f9sIsU_=WrTSvUSE7q>tf*rUYFReR*O0EJfu zGdijJ2*uAZ|M)5Xf9Aia-h%&S0sdwF4+QTPC=dox^(j{C=m|Fh9Sf?Cg?Nws>yzv7 zsMZ{_h2M1FF{BthHc4G4C+eCL$PSI1Q z)@y8J96SSl1c(y^goKCVh+xMA8zLZNHzDf?IL8D+vQEyDO@fnE5>5hyWW^(A4~d2M z`|elWGs5B=XV0GCJ!d_xuCJ>8_tvdj|N8y!y>&~@?j!qM$8p?k#hct&clIW4cGlq! zq~lYY6mr|Px{mAGtlc1o zGkC7=agW{QJD!JKjvw~)T9wP?cqE_CyHNRjF7LYsVeIFSP2sDBYiFJGq*ui6F~4}P zd!~dO&-(BG?>wtI9Opl-LT26c$D9qf%i%q9`GdPhL+!I_{>Pdu+=N|s^Iqpn>Gr?x znOe9Mx%0tK-2T~xi`{wndv{*EaIrft{FiGUU%1$vv)A`sw{WpLAHKu?(89&;eDW{u zU%ha#J8OS*>c)i&uPo1>Is0oCT*3Ucyj+x%KEJ#eJnELBYt!q~tFON7>NmF2OK-U5 z`rO9S6}zr|)eUdF`m$Y@->@Thfxq|8gLlp3t|%P1Ylh;g{N6kF&NzdGyAIyEduETb z*}rY?oxArrBZXV{-oEF^j58Waj1D{FOK;vibITn&b|1N8_*HxFoJkKK-hI#L@DbPM(Ir8bUEAq3(Pb*jWcviZnd!%zZw^E3EQ0yS?H9h%B z(_?xoe$n(oVn-!kG_E&moVaN6amn~`*%VC)r!wWK)SH=F=iO9titYTQHwmLY7)3Cu znBKVG^qGi;6>DhvN4=YnFG^tZtHN}VshUN~C68R<#Ws^AII`3%PF>^Au(BG9<7H-v zSxQ5*Y}7-M79$tjHK&40HF;}Qaf|rxRNh@N%j`JTYz!3gR8EaAbH0TaogyKCExTm%9$hfnX>7FBSz_J6TuOSCNjkZ zj#$E$9I@t1r`zI2=BMVV@L(=;064<5@$sCY4l2yghr<+nw+OFfGADhkv>@Gk za;ZU;xUI`nBpj|gO%G;fzw6B@4IegHgyJ)Yq}K>JKG$T*cLGb#HRRTYo>B{ z>>1CvR{~L3O-~}c?;xl0lYpgTpGU{utX!N&J%Mh}K3Gl${;wHKNIzHc#X_j{-; z9D+O9MQpciii#!%J+khiBY}H)3f)Cdu{TBJcZLPqAhs;Af70lX%nX42}p#PyZLXMZt5RyiR zF6-97H#-2yrS<_a9wR(&Ego)`8&63tdq(YZ>DlMfwgB+_;>mRYhF*9C%v?TVSy-|F zm@>h_u!PHXaerSNuVCaUZLxTW(ci7~p{8&#l?oq8d(W}a-`T}$;a=Uw?`6!gj@AvO z#+#?wzvQxz>>$+kAQ!l2rD`9nsJPfk29Q^!R7?ioT8mIeQMdV3>Z(dtEo_|i<2gg3 zW%hTuaiSk-rsazjTDY)Tk>pnpmZa zaeZU95c7mM>8GdtbU0ma0pX@@Wp#|FE2&*huR%GVFXDD|uCCN=ln&W^aHbgUk{%1w zXT$WnPI|u0#;G*m&h}Y`=d-$z!_BCV^!U#gKu3tLJB$ygp0xLxsR*qbsAGTZTr-9B zHv;S`I^^5j$Nx4@!vgfl2QIOu@b+}>7yt3OoHd^N{D0qM&5KU)2d>vM>)q!~g2S%O zj;>5`Co0{FgK+a)jJ6y~aHnm=e%(137t*gF%&^2Go)ee2Wm&|nGM^sSE}tqF2$f6mA{P{RwPUXuxy)zQF-cFCjr&CUf_o?{19CI&_VDeot1Cc8 zw!xVh7G|b4xsJ_t&IMFaqkMwlUwc!x4LIY5Y%|V1PfVw)jeGm_ouDxSz55gqf@TJq zx3(}q#OrvojX#I5gm&$HsBqw7CeGRO%4oYQqdbjpbSgVaJslO_=eqg(OpbZ8(d2k2`6uVJ%{pW1Q(&H=h^dRGO?i95)`K3Z6mKAYn!7velMn7);$=1B{ZOYpcjp zR*)9A0MR@3?qbcMd4H}v;Bx46g)yTl^FY_@G#WJocT|8Y`pSpKP#j9L4FDe^!(XIq8$>gT&wel{e z&n`pN2}m$JdXq^UySO$lL6IuSnf^HRu=gkZXFOmi2meJ)!Ij%(Tw?0A%Z#=1XdTe%NJsGQM-H*Ru{L+7h`ovyL<^&TifNWSZ!;Ux0NPAIuo8L=AC(2 zDQ)ZQHKnZ`Ias=+BPUB2cjUFDi#qbA(uEy)ur$$;b8cz8qmQ|zv5r3OmPR}Jgj*Wv z=#y?~xTBwSOItenlv~=|(Wl+gP)E;srNNFq=9M;e^l`6rK}VnPN*g=+q*vO|(a(CN z^&Nf6E1lobr@hj79X*#Tt?TGxxzgH>KAtPB>F5)=Qmdm+=1R?uel}N1I{H+u)adBb zxe`L2>U}PcE`O$v)A>@Zqv!n6 z@{T^{mzH((alf>*qfhvyB^`azFD>rqXZ_Nmjy~m=svUjWFZFlyT%lCy=wpQvBd7JJ z8GCAK)M{i#B!x1&!NNQt(;%kn4VsiV!SJ0bC0nNvB$QC z&PH>RB+Vw!oClgoY@xZypdA+y1YL{fo}V<9d46=&*>$mKMsJa5#=r&990<)AL?fC5 zp*awm1EDz(nggLZ5Sjy_IS`ryp*awm1EDz(nggLZ5Sjy_IS`ryp*awm1EDz(nggLZ z5Sjy_IS`ryp*awm1EDz(nggLZ5Sjy_IS`ryp*awm1EDz(nggLZ5Sjy_IS`ryp*awm z1EDz(nggLZ5Sjy_IS`ryp*awm1EDz(nggLZ5Sjy_IS`ryp*awmgD#pe5YR!hq(!r& zMYE(uv!q3{q(!r&MYE(uv!u{0Ei_9D&C)`%w9qUqG)oK3(n7Pe&@3%9OAF1?LbJ5c zEG;xk3(e9(v$W7GEi_9D&C)`%w9qUqG)oK3(n7Pe&@3%9OAF1?LbJ5cEG;xk3(e9( zv$W7GEi_9D&C)`%w9qUqG)oK3(n7Pe&@3%9OAF1?LbJ5cEG;xk3(e9(v$W7GEi_9D z&C)`%^ht|mX`xyAltr_27tMupp&5M&G`DSc>oTWuL4vM%b1-r7I|NprbkKmlEV-=N z#>SkNY-EG_^5pX7j?_smfW9KRqIo6sCg`h@tD09AuXNIX_{tN{7Mh#W2mk8Puie|+ zl79E^Kl^vN=5YGE-}?QJy}3D(zVO)Zyxnh(rVszg`~Li%=2-gVr{DFw+Z<0n@WK24 zhu@q?o#sv~yNZA7yK85Y&CLswEzOIP;pWB3Nb{0pw7E4IYi>)%o0G{zGlk{$++?!7 zGpvdZd9pq3Q;!sijb?8q&SMAPo#ayo!>H^fO>K1e%ENYhm(SS4=+dc|gn`?IhbuFO z?eQLVMKB=C4${KoVRoEd74%-%{3tCv?#vv1&+|IgBE7?Vy z#jS~-`?06-B^Ez<_rWhyaw=W|!Y{LAirkeI2#m}OnNATNw_Yv&12^JwiFdZ+( zdx^zapB{&%vh0@NXf%x%6xqA1?A^~Yvn&mc;-`x2mZdqH9nzox%aH`9u00Shdpdh$O>$AZHn})n zXV#dthw!uR&=IqizbsJm70F~XO}4?ow!+aaNiLm&&s_}Py9hpbA$;-Du#HMbPO@{_xL4;VlXkL`Ltb_dd%MX_>8a*Uw6*N+DGpFb z;(biABWYLg>^67$Sz?UQ*@Vm=i8wmM5e*D%;4KMXOXSe};_%l=XFpnC$qs{V_Ed#^ zC75!+{v@6mkA4cHZ5RpaWXw)Dc673b#2JdkO=#~8pbPG{`Rm!=d>dn^>D&+RKYAz) z-vs%>Tb~agj~vC`)cOhDys4QM{QMTi| zY|o!H8Uq6uh_cnk(G$=h4!lV=L-A4@;~03mgA9ZN(XlvRu~~lGvi#x@=f<#(3owMH z2QM@ip4(Gxacl(xhxUwVIBnlvm#4rfp0tP;m^dk@!INUR8sm2s$;G72%0~iR!W{nd z_E)xm9og*ubOJ)QuM>uiSN`J>H0Qa?XHkoI?khvdP-P5m;^JWf7_1Z7 z%eGaX&u)l|X9sU=tP=%{rS@phJ&LhxTpOLpUY$M4A!<6Hizgu$m#h<&>GJkyxqGw^ zP83-us@QoOyw#QN(SA5l)jH84(~p?Pql>yn7sH8`SSP}?4ZL{g(WTv^h;9gEbfTJB zW|rHdH6ATCoTSzCk~Pg-vbLE|);0a)yk;RezZoR!n_;q{*;9OPpEq!CG@E$M-Xzy7 zCi!M5@tftO(CkZsW|V}@O48Hp2X~jCHL?UxEm7L<-JA5qj(0D-1nw0Nq{a+P$1A|7 zfioXRB}1$@^CYPS*E(}8qK~!Br^UDq+xj#frM#)r7Ht=^lD5{>tnHcWtTp<1@hVua znvPfFo%1SM4YRN0)~=pSg}dpKxuNdXp$FCKbMaHpMf$Oz)YUrgUc40-I)R zk|lBcvgmxri2V(9z8mU%qaDD`cO$jqq78Mv8|r*F)cJ0x^W9MAyP?i^L!Ix2I^PX- zz8mU%H`MuVsPo-W=ewcKcSD`;hC1I3b-o+wd^gnjZm9F!Q0Kd$&UZtd?}j?x4RyX7 z>U=lU`EIE5-B9Pdq0VU=lU z`EGPO-{y>iQPH$$C@LHtr7#>Er5NPUD8(cPMk%i4uqee%92BKE$RSaRIhP}%ROo19 zJe2CV9Sx;ICmUm-R4467C>1)`7zd>~Wk*4&(7DDKC>6Ta7y+e1#~S0GROnV?^pgsm zYK(nSp-YXCPbze%G44r)?leX{snD6mm?za-jw7B_=tyI{lj^t~?W95{8e^SQC+$cl z6*|xu=cGDiM>(m`dBzwg6}rwC;iN*x8Qi2ow;7|GROmEgY?BIIW{hl7p~GC4LU$RX zn%sxZGR8Ei&{f8WCKWo$7|*0aHyNXuROlpQERzadWQ=4|p@WQZOe%DbF^Wlr&N0R? zsn9jX2qqOe#u&e(Lbn*BmsIE!W9*U&U1E$}QlUePaZ4(6htamALT4CbmQ?5pW5kjQ z9bt@DQlT4+(Ml?Gf-zP}g)T5gDyh%`#yBMvy1y8uq(bKx^Gr@GH}QPu_p6@9B`pk_ zi-1E+!2w9iF*;{)k{Xjt$4vyEgdmL|ngnTu^Ex_+F30_8Ic~wWHH|h&ziH973bBT^ zc0S=eqRa8(bZNX6)@!HH=U8mk(s~KRI$GO~*gT?bftDpj1gnxl75Kc&)JSKxy5=d} zT%1&z{Yiw_(}x&TP8I?02uLLarXm7VF9Ow~WHER4A||0NyoAll#7la)&r5O%0|LTc zJ}FV;6F(_a_(>t@qbMXn5>W(6m{cgjq$la8=qdi)tGsu*v*+Dgnef=M^!}aEaY^&ylCWboEPu?8EP;Gfv?~&Eso>7zCw+!P~$7q_zE?? zLXEFb<15to3N^k$jjvGSE7V|8EMLL-3N^k$jjvGSE7bT3HNHZPuTbMF)c6WDzCw+! zP~$7q_zE??LXEFb<15to3N^k$jjvGSE7bT3HNHZPuTbMF)c6WDzCw+!P~$7q_zE?? zLXEFb<15to3N^k$jjvFH$t8RR=PT6s3N^k$jjvGSE7bT3HNHZPuTbMF)c6WDemB(Q z@bKGELt#S=g$*?nHq=nqP(xuu4TTLg6gJdQDAZ6X)KDqZP$|?EP_XN5EIEq4q4q4q4q4q4q4q4hMIx4Y_O01(2>!`#!DzT1AtfLa^sKh!dv5rctqY~?=#5yXmj!LYf66>hMIx4Y_ zO01(2>!`#!DzT1AtfLa^sKh!dv5rctqY~?=#5yXmj!LYf66>hMIx4Y_O01(2>!`#! zDzT1AtfLa^sKh!dv5rctqY~?=#5yXmj!LYf66>hMIx4Y_s>?dO%kI4HpKn&j4`YnM zJnY6l@234288xP78Y4kJk1s~p?)?RqvX?F2cew^z?{YiMYNR>lri(B{WK3}ygA>PG zj7}iUyIsl>)4azu*m{rBphf&JCP>1>j$GKbWEqIX%MT2#{^b8mA36{ikL8T6NQjMu z*hq-Qhe>QsMnY^P#707FB*aESY$U`+LTn_&MnY^P#707FB*aESY$U`+LTn_&MnY^P z#707FB*aESY$U`+LTn_&MnY^P#Nv}1&ghDS*hq+tgxE-kjfB`ph>e8UNQjMu*hq+t zgxE-kjfB`ph>e8UNQjMu*hq+tgxE-kjfB`ph>e8UNQjMu*hq+tgxE-kjfB`ph>e8U zsEgP#oZcdq!XlQ!B9_7;mck;I!XlQ!B9_7;mO_Z75@M-@SSlfwN{FQrVyT2!Dj}9i zh@}!@sf1W6A(l#rr4nMPgjgyemP&}F5@M-@SSlfwN{FQrVyT2!Dj}9ih^0DaM=q#@ zSgI3tCB#w*u~b4Vl@LoM#8L^dR6;D35KAS*QVFqC zLM)XKOC`io39(c{ER_&TCB#w*u~b4Vl@LoM#8L^dR9(dOoeQz(e`gKK3TTIyx&1$R z)_Ier-@cQ!w8LvAHYhPf&jw{xw5y7CRne|0+Eqons%Tdg?eIFA^H-~)T~)NJigs1e zt}5D9MLWC-=ls>GXoq*=oWEKX?W&?(RkW*$c2&`?D%w>=yQ*kc7452`T~)NJigs1e zt}5D9MZ2nKR~7B5qFq(AtBQ72(XJ}mRYkk1Xjc{Os-j(0w5y7CRne|0+Eqons%Tdg z?W&?(RkW*$c2&`?D%w>=yQ*kc7452`T~)NJc4=3E|5@5mSlUro+EG~AQCQkhSlUro z+EG~AQHXX_$Lu&Qm1swG!j98YiFQ=a+HqPc(T?i09jB!d?WjaMD$$Ngw4)O3s6;y| z(T+;AqY~|?L^~?cj!Lwn678r&J1WtRO0=UA?WjaMD$$Ngw4)O3s6;y|(T+;AqY~|? zL^~?cj!Lwn678r&J1WtRO0=UA?WjaMD$$Ngw4)O3s6;y|(T+;AqY~|?L^~?cj!Lwn z678r&J1WtRs!O~6bI~q-FB_Eab>m;el+t)nYRn=|Zuv!gf6K<<`&`P!Y#jcQYq0f8 z-3BGn{IZ)?<0VM5gi~IA*)>a;=KU_^Ql|NUYq0f!ZiDi@Zkp>fC@p6(KDi8(#RQn; zFAK^p$Ea{kZOWP`i?4-A*_tR@6J=|nY)zD{iLy0OwkFEfMA@1sTN7n#qHIl+t%EQi-xuqAZmtOC`!uiLz9pER`rrCCXBXvQ(lhl_*Ok z%2J84RH7`EC`%>EQi-xuqAZmtOC`!uiLz9pER`rrCCXBXvQ(lhl_*Ok%2J84RH7`E zC`%>EQi-xuqAZmtOC`!uiLz9pER`rrCCXBXvQ(lhl_*Ok%2J84RH7_Zm$J*xMOm<} z*j!4`VPX@QH-L9CE0U%02i=zi^;X1n%qg;M%ettC8AhaDUDT_KdUa8+F6z}qy}GDZ z7xn6*UR~6yi+XiYuP*AY`p<)T@hn zby2S_>eWR(%=zHAQFT$TF6z}qy}GDZ7xn6*UR~6yi+XiYuP*AY`p<)T@hnby2S_>eWTPx~Nwd_3ENty-U3T^Fg;W13%Mt z3Vx>T9Q;h%N%)zzv+y%*r{QPX&cn~Nors@l01=Y{vJEg1UrA*fz#^swWE&tOzLUx} z07py^$Tq-7d?}S}0Fjs`kZpjHm?@BL0F;<4kZpjKm@klR0GF6DkZpjNm^F}X0GgOM zkZpjQm^+Yd0G*gVkZpjTm_d+j0HByekZpjW_-ZQK07fyDAlm>*@!eFm0hnS!LAC*& z;>)RQ14zZRf@}j+#ms_i17OAEf@}k9#r%S719-(0gKPtY#Vmtt1CYf;gKPtw#ax4I z1E|GxgKPt|#f*b&1Hi?kgKPuL#k_-T1K7pXgKPuj#q5J@1MtNJglq%+#T@6 zglq#8#!Q5410cp^glq#W#(acq131Q%glq#u#;k;F15n1qglq#`#@vK#18Bzdglq$J z#temQ1AxXPg=__coIf5?p=;ViS2sWB_3<5lJn7c<7t*!>lkaupl9kGck1k9Hf#Nb{?h z^BAv2n$^>>F~90!-WbvxcPS0ieAqSE`f#U#tTX)@=19gdQpMA8!~B|SVy60tOW9zm z$6SN0$2zGN%sqSD#pJVJcQO0y3D-RCnqPM@!QpWiGti!ZS}+AI#_aATar0#news0- zliTpqQux6%RED3H!cR-#r={@IQut{p{InE)S_(fcg`bwfPfOtklhpZXZcE{(rSQ{I z_-QHpv=n|?3O_A{pO(T8X1DXx+?K*mOW~)b@Y7QGX({})6n+Rp+ZnWgrP!2L3p7; zI6-WoLM%aGp+X=*RG~r?K}exO2thodLi|85p+fLLB%wm&Kp3Gy*gy=SLd-w_p+dkw z^q@ktK=S$DnJ}Wrvkx&b1L9lQ_!08_?~}PhDLX?6hGNKw2zYGA9ds3z`q<3 zuStzrGaaurzu{t98R+^kmvSxX`lM^H^<6-JI>V!+Vo~b_R8f<;Clgds}#*Dd7xtO8$ zX%|z}e#6|b!l`VDFEAU-Mmr1q zg6Dsn)?ln_ zFpdfC6G=e^7n*T1VGSQ>5;*uCN-xY}H4uCfMKcMW!;QL&5lK!a<{PP5AzT+=nUHZ8^1u^wn}y}8z0XAQ3J z8oUzjd;{x&2Cp)&G&fj-S9J|uo%Y2)#d@H@Ys{<7Pg#T4bPZmcM)B)d4>Y*Zyw<$V z8r;}5czs%l-@tnCVDQuC_2v!M;HSF=Z%q5+n^+Gt*lpfuZn6fuy9PI7aPbz_0}XC9 zH=A3m!L40`J$Rjc8|#4vx0^lYHfwNu*WiwHalDuHK!YiBhuLclrn&~x>5_OK>wyOQ z&9vEP4fb~p?!*&(fb~FwgXT_iz#1Iv8XQWO#fMoBG&o`onZwrLNY`K{T^`@XddR`x zZZl)&t-ci;A4el{-GDoe!Jzax0rvvf5tOpwWjCr%U*Bbmx*WfMbiugX( z0}W=)Tg-jdV76;8=ce`etuAYVCU0}ioNL|+4&oz@x7mLd)jq=ayXngK0hjebvj<&s zziS?l*@N?D54q{8_-9?#3eDc`nulETvod@8yxBY4banhrmvuw4pL5MST=Pzu{hT!` ze&2V;@rB-5UzsL5@CD1pWcxl$9G*?CjNN2A|KT2#)&8@JEf#fQ96$21|Ay+q!}`#aUvK32p{f0LW8raqXvz=Ga{SQL{xfz9k7pm6>R+m3#o?b3 z~Y&x)@~QRFDuo>rzXtGU8b_v16qi1U|OYCC&*VYar^5k}nmnV$2Omn=N2 zQb!nF?`Nr(nWbjg!s9A+gn!$zpQW~6kuE%*mHMoI;4&-qI+Yr^o@YzF5~Vg%=-RAe zsaK=aD`RwASZb_Iyf9l^>XmT=hf(UpG)%Jauu8o$ZsIudZ}G#jg~wIumGK%JN2%8u zd@8!|cvkB3%{p_Qb<*>@bv>$5Bh{EK^?HDPaUAC#F~eqL;qk20<7U*1*;0?Q z)F>Y&hucq)lO4vXT*U8E`xbaTzWlZyCR@kf{{Mv6zxbN+PGwWE_)oQ^_!lyZ$Gy7i zbpNvwKkwi4&h77h#n_?$`fn#c^Z3_3^UWJS|LTeF^nd5IkG*Z%d%pV9^(Wu|vEa|$ z8}F|^{oqjZ3vVgCYUT}3AO7Jd|9b9;!gC**`Ob$v_qn|v`uancKm9+S`IXN_U-@vU zd0@jgH-7AanJb_BjT5i`%eVjF?(47H`u_dT41M$u*5*!parU*p|Gna=XD)yD6JNdV zmM<4>KkvN75BC12wd3)M3!dM#uv}yZc}F3m@I{eC@;+AN`Bp`NB~3 zgU7$s_YdonPo6okb>xd*{oTETZ`}XOfB3Hc=yhlQdDV08`0bJ2{F{q^{VQMo{%e-r z_=dlEXzQ#q_l|IE^S6S>$KLnkfy(a5W#9R;hs*mf`q&?hJ^k5}e|gdF`)~Qkj;{@U z(~{7!d!1Wx zgZ4Rlu;+GX#<>GG@;SdadGUhNGu0X__gVX!olQu27=OE+dz_n{yPVtbw+Gu7ApMa} zy7ZC4i*s3rqbYLP=NxcuLHZe-{{YTxpbp@VC1KvTBR~6J`rJ8kS%pLMWjTzro3PyC z?8n*9DueRCDIW=5T$Xd^vJZLO_G5B672sd_JlB8e^XJIF2}{=Vt+xUvJNsTsSz z4Zo~C)_8WE%r*VJ@Wpp)00-u;b-v!a*O`7hEY7(>PB4ux!S%1mum9f+; z5zoe)XvMz?{HYdML%e!k8B5I)@odbAR^Udtcs#5V``LfIa~MEF1~2Va4Z!(hnj15YoTYTe}(QHzWOKq~DD6n~{Dq($l$K z$}Qi5^jnaA3({{v`YlMm1?lOSFU1vxk$xEIhmn35>4%Yi80qQMFU3VhkbVT|N05F5 z=|_-$1nFO@>x?4(DAJE2{V39pBK;`Rzf_kRL;5kKA4B>vq#r~2F{FQ~t~QSJ<48Y_ z^y5fBj`ZV5|59CW0_i7^egf$ykbVN`Cy<_AMbF^f7N|0}G#VB9-_fs)!ZVC$EM1+>XY{UT4agMhw}H7;?Zl=o~@> zVZ6Ev&6zhLrrqPbSvjZAEj{;Hjv%iY=hgOH\98m\c61\a8\c8\'\03\b0\c7\7fY\bf\f3\0b\e0\c6G\91\a7\d5Qc\ca\06g))\14\85\n\b7\'8!\1b.\fcm,M\13\r8STs\ne\bb\njv.\c9\c2\81\85,r\92\a1\e8\bf\a2Kf\1a\a8p\8bK\c2\a3Ql\c7\19\e8\92\d1$\06\99\d6\855\0e\f4p\a0j\10\16\c1\a4\19\08l7\1eLwH\'\b5\bc\b04\b3\0c\1c9J\aa\d8NO\ca\9c[\f3o.h\ee\82\8ftoc\a5x\14x\c8\84\08\02\c7\8c\fa\ff\be\90\eblP\a4\f7\a3\f9\be\f2xq\c6\00\00\00\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 300) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\10\00\00\00 \00\00\00 \00\00\00\00\01\00\00@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") @@ -102,33 +65,22 @@ (data $7 (i32.const 860) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data $8 (i32.const 924) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data $9 (i32.const 992) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data $10 (i32.const 1020) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") - (data $11 (i32.const 1084) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") - (data $12 (i32.const 1132) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") - (data $13 (i32.const 1260) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") - (data $14 (i32.const 1324) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") - (data $15 (i32.const 1356) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data $16 (i32.const 1756) "\1c\04\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data $17 (i32.const 2812) "\\\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") - (data $18 (i32.const 2908) "\\\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00H\00\00\00s\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 \00\00\00\00\00") - (data $19 (i32.const 3004) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data $20 (i32.const 3036) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00,\00\00\00a\00s\00s\00e\00m\00b\00l\00y\00/\00u\00t\00i\00l\00s\00/\00v\001\002\008\00.\00t\00s\00") - (data $21 (i32.const 3100) "\\\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00H\00\00\00g\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 \00\00\00\00\00") (table $0 1 1 funcref) (elem $0 (i32.const 1)) - (export "PARALLEL_FACTOR" (global $assembly/index/PARALLEL_FACTOR)) - (export "INPUT_LENGTH" (global $assembly/index/INPUT_LENGTH)) - (export "input" (global $assembly/index/input)) - (export "output" (global $assembly/index/output)) - (export "init" (func $assembly/index/init)) - (export "update" (func $assembly/index/update)) - (export "final" (func $assembly/index/final)) - (export "digest" (func $assembly/index/digest)) - (export "digest64" (func $assembly/index/digest64)) - (export "batchHash4UintArray64s" (func $assembly/index/batchHash4UintArray64s)) - (export "batchHash4HashObjectInputs" (func $assembly/index/batchHash4HashObjectInputs)) + (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) + (export "input" (global $assembly/common/input)) + (export "output" (global $assembly/common/output)) + (export "init" (func $assembly/common/init)) + (export "update" (func $assembly/common/update)) + (export "final" (func $assembly/common/final)) + (export "digest" (func $assembly/common/digest)) + (export "digest64" (func $assembly/common/digest64)) (export "memory" (memory $0)) (start $~start) + (func $~lib/array/Array#get:dataStart (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + ) (func $~lib/rt/tlsf/Root#set:flMap (param $0 i32) (param $1 i32) local.get $0 local.get $1 @@ -1750,9618 +1702,696 @@ local.get $2 return ) - (func $~lib/array/Array#get:length_ (param $0 i32) (result i32) - local.get $0 - i32.load offset=12 - ) - (func $~lib/array/Array#get:dataStart (param $0 i32) (result i32) - local.get $0 - i32.load offset=4 - ) - (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 - local.get $0 - call $~lib/array/Array#get:length_ - i32.ge_u - if - i32.const 1040 - i32.const 1104 - i32.const 114 - i32.const 42 - call $~lib/builtins/abort - unreachable - end - local.get $0 + (func $start:assembly/common + global.get $assembly/utils/const/K call $~lib/array/Array#get:dataStart - local.get $1 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $2 + global.set $assembly/common/kPtr + global.get $assembly/utils/const/W64 + call $~lib/array/Array#get:dataStart + global.set $assembly/common/w64Ptr + i32.const 992 + call $~lib/rt/tcms/initLazy + global.set $~lib/rt/tcms/fromSpace i32.const 0 - drop - local.get $2 - return + i32.const 64 + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/M + global.get $assembly/common/M + global.set $assembly/common/mPtr + i32.const 0 + i32.const 256 + global.get $assembly/common/PARALLEL_FACTOR + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/W + global.get $assembly/common/W + global.set $assembly/common/wPtr + i32.const 0 + global.get $assembly/common/INPUT_LENGTH + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/input + global.get $assembly/common/input + global.set $assembly/common/inputPtr + i32.const 0 + global.get $assembly/common/DIGEST_LENGTH + call $~lib/arraybuffer/ArrayBuffer#constructor + global.set $assembly/common/output + global.get $assembly/common/output + global.set $assembly/common/outputPtr ) - (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32) - local.get $0 - i32.const 100000 - i32.lt_u - if - local.get $0 - i32.const 100 - i32.lt_u - if - i32.const 1 - local.get $0 - i32.const 10 - i32.ge_u - i32.add - return - else - i32.const 3 - local.get $0 - i32.const 10000 - i32.ge_u - i32.add - local.get $0 - i32.const 1000 - i32.ge_u - i32.add - return - end - unreachable - else - local.get $0 - i32.const 10000000 - i32.lt_u - if - i32.const 6 - local.get $0 - i32.const 1000000 - i32.ge_u - i32.add - return - else - i32.const 8 - local.get $0 - i32.const 1000000000 - i32.ge_u - i32.add - local.get $0 - i32.const 100000000 - i32.ge_u - i32.add - return - end - unreachable - end - unreachable + (func $start:assembly/index + call $start:assembly/common ) - (func $~lib/util/number/utoa32_dec_lut (param $0 i32) (param $1 i32) (param $2 i32) + (func $assembly/common/init + i32.const 1779033703 + global.set $assembly/common/H0 + i32.const -1150833019 + global.set $assembly/common/H1 + i32.const 1013904242 + global.set $assembly/common/H2 + i32.const -1521486534 + global.set $assembly/common/H3 + i32.const 1359893119 + global.set $assembly/common/H4 + i32.const -1694144372 + global.set $assembly/common/H5 + i32.const 528734635 + global.set $assembly/common/H6 + i32.const 1541459225 + global.set $assembly/common/H7 + i32.const 0 + global.set $assembly/common/mLength + i32.const 0 + global.set $assembly/common/bytesHashed + ) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i64) - (local $8 i64) + (local $7 i32) + (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) - loop $while-continue|0 - local.get $1 - i32.const 10000 - i32.ge_u + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h + i32.const 0 + global.set $assembly/common/i + loop $for-loop|0 + global.get $assembly/common/i + i32.const 16 + i32.lt_u if - local.get $1 - i32.const 10000 - i32.div_u - local.set $3 - local.get $1 - i32.const 10000 - i32.rem_u - local.set $4 - local.get $3 - local.set $1 - local.get $4 - i32.const 100 - i32.div_u - local.set $5 - local.get $4 - i32.const 100 - i32.rem_u - local.set $6 - i32.const 1356 - local.get $5 - i32.const 2 - i32.shl - i32.add - i64.load32_u - local.set $7 - i32.const 1356 - local.get $6 + local.get $0 + local.set $13 + global.get $assembly/common/i + local.set $14 + block $assembly/common/load32be|inlined.0 (result i32) + local.get $1 + local.set $2 + global.get $assembly/common/i + local.set $3 + local.get $3 + i32.const 2 + i32.shl + local.set $4 + block $assembly/common/load8|inlined.0 (result i32) + local.get $2 + local.set $5 + local.get $4 + i32.const 0 + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.0 + end + i32.const 255 + i32.and + i32.const 24 + i32.shl + block $assembly/common/load8|inlined.1 (result i32) + local.get $2 + local.set $7 + local.get $4 + i32.const 1 + i32.add + local.set $8 + local.get $7 + local.get $8 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.1 + end + i32.const 255 + i32.and + i32.const 16 + i32.shl + i32.or + block $assembly/common/load8|inlined.2 (result i32) + local.get $2 + local.set $9 + local.get $4 + i32.const 2 + i32.add + local.set $10 + local.get $9 + local.get $10 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.2 + end + i32.const 255 + i32.and + i32.const 8 + i32.shl + i32.or + block $assembly/common/load8|inlined.3 (result i32) + local.get $2 + local.set $11 + local.get $4 + i32.const 3 + i32.add + local.set $12 + local.get $11 + local.get $12 + i32.add + i32.load8_u + br $assembly/common/load8|inlined.3 + end + i32.const 255 + i32.and + i32.const 0 + i32.shl + i32.or + br $assembly/common/load32be|inlined.0 + end + local.set $15 + local.get $13 + local.get $14 i32.const 2 i32.shl i32.add - i64.load32_u - local.set $8 - local.get $2 - i32.const 4 - i32.sub - local.set $2 - local.get $0 - local.get $2 + local.get $15 + i32.store + global.get $assembly/common/i i32.const 1 - i32.shl i32.add - local.get $7 - local.get $8 - i64.const 32 - i64.shl - i64.or - i64.store - br $while-continue|0 + global.set $assembly/common/i + br $for-loop|0 end end - local.get $1 - i32.const 100 - i32.ge_u - if - local.get $1 - i32.const 100 - i32.div_u - local.set $9 - local.get $1 - i32.const 100 - i32.rem_u - local.set $10 - local.get $9 - local.set $1 - local.get $2 - i32.const 2 - i32.sub - local.set $2 - i32.const 1356 - local.get $10 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $11 - local.get $0 - local.get $2 - i32.const 1 - i32.shl - i32.add - local.get $11 - i32.store - end - local.get $1 - i32.const 10 - i32.ge_u - if - local.get $2 - i32.const 2 - i32.sub - local.set $2 - i32.const 1356 - local.get $1 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $12 - local.get $0 - local.get $2 - i32.const 1 - i32.shl - i32.add - local.get $12 - i32.store - else - local.get $2 - i32.const 1 - i32.sub - local.set $2 - i32.const 48 - local.get $1 - i32.add - local.set $13 - local.get $0 - local.get $2 - i32.const 1 - i32.shl - i32.add - local.get $13 - i32.store16 - end - ) - (func $~lib/util/number/utoa_hex_lut (param $0 i32) (param $1 i64) (param $2 i32) - loop $while-continue|0 - local.get $2 - i32.const 2 - i32.ge_u + i32.const 16 + global.set $assembly/common/i + loop $for-loop|1 + global.get $assembly/common/i + i32.const 64 + i32.lt_u if - local.get $2 - i32.const 2 - i32.sub - local.set $2 local.get $0 - local.get $2 - i32.const 1 - i32.shl + local.set $26 + global.get $assembly/common/i + local.set $27 + block $assembly/common/SIG1|inlined.0 (result i32) + block $assembly/common/load32|inlined.0 (result i32) + local.get $0 + local.set $16 + global.get $assembly/common/i + i32.const 2 + i32.sub + local.set $17 + local.get $16 + local.get $17 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.0 + end + local.set $18 + local.get $18 + i32.const 17 + i32.rotr + local.get $18 + i32.const 19 + i32.rotr + i32.xor + local.get $18 + i32.const 10 + i32.shr_u + i32.xor + br $assembly/common/SIG1|inlined.0 + end + block $assembly/common/load32|inlined.1 (result i32) + local.get $0 + local.set $19 + global.get $assembly/common/i + i32.const 7 + i32.sub + local.set $20 + local.get $19 + local.get $20 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.1 + end i32.add - i32.const 1776 - local.get $1 - i32.wrap_i64 - i32.const 255 - i32.and + block $assembly/common/SIG0|inlined.0 (result i32) + block $assembly/common/load32|inlined.2 (result i32) + local.get $0 + local.set $21 + global.get $assembly/common/i + i32.const 15 + i32.sub + local.set $22 + local.get $21 + local.get $22 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.2 + end + local.set $23 + local.get $23 + i32.const 7 + i32.rotr + local.get $23 + i32.const 18 + i32.rotr + i32.xor + local.get $23 + i32.const 3 + i32.shr_u + i32.xor + br $assembly/common/SIG0|inlined.0 + end + i32.add + block $assembly/common/load32|inlined.3 (result i32) + local.get $0 + local.set $24 + global.get $assembly/common/i + i32.const 16 + i32.sub + local.set $25 + local.get $24 + local.get $25 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.3 + end + i32.add + local.set $28 + local.get $26 + local.get $27 i32.const 2 i32.shl i32.add - i32.load + local.get $28 i32.store - local.get $1 - i64.const 8 - i64.shr_u - local.set $1 - br $while-continue|0 - end - end - local.get $2 - i32.const 1 - i32.and - if - local.get $0 - i32.const 1776 - local.get $1 - i32.wrap_i64 - i32.const 6 - i32.shl - i32.add - i32.load16_u - i32.store16 - end - ) - (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i64) - (local $4 i64) - (local $5 i32) - block $~lib/util/number/isPowerOf2|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.popcnt - i32.const 1 - i32.eq - br $~lib/util/number/isPowerOf2|inlined.0 - end - if - i32.const 63 - local.get $0 - i64.clz - i32.wrap_i64 - i32.sub - i32.const 31 - local.get $1 - i32.clz - i32.sub - i32.div_u - i32.const 1 - i32.add - return - end - local.get $1 - i64.extend_i32_s - local.set $3 - local.get $3 - local.set $4 - i32.const 1 - local.set $5 - loop $while-continue|0 - local.get $0 - local.get $4 - i64.ge_u - if - local.get $0 - local.get $4 - i64.div_u - local.set $0 - local.get $4 - local.get $4 - i64.mul - local.set $4 - local.get $5 - i32.const 1 - i32.shl - local.set $5 - br $while-continue|0 - end - end - loop $while-continue|1 - local.get $0 - i64.const 1 - i64.ge_u - if - local.get $0 - local.get $3 - i64.div_u - local.set $0 - local.get $5 + global.get $assembly/common/i i32.const 1 i32.add - local.set $5 - br $while-continue|1 + global.set $assembly/common/i + br $for-loop|1 end end - local.get $5 - i32.const 1 - i32.sub - return - ) - (func $~lib/util/number/utoa64_any_core (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i32) - (local $4 i64) - (local $5 i64) - (local $6 i64) - (local $7 i64) - local.get $3 - i64.extend_i32_s - local.set $4 - local.get $3 - local.get $3 - i32.const 1 - i32.sub - i32.and i32.const 0 - i32.eq - if - local.get $3 - i32.ctz - i32.const 7 - i32.and - i64.extend_i32_s - local.set $5 - local.get $4 - i64.const 1 - i64.sub - local.set $6 - loop $do-loop|0 - local.get $2 - i32.const 1 - i32.sub - local.set $2 - local.get $0 - local.get $2 - i32.const 1 - i32.shl + global.set $assembly/common/i + loop $for-loop|2 + global.get $assembly/common/i + i32.const 64 + i32.lt_u + if + global.get $assembly/common/h + block $assembly/common/EP1|inlined.0 (result i32) + global.get $assembly/common/e + local.set $29 + local.get $29 + i32.const 6 + i32.rotr + local.get $29 + i32.const 11 + i32.rotr + i32.xor + local.get $29 + i32.const 25 + i32.rotr + i32.xor + br $assembly/common/EP1|inlined.0 + end i32.add - i32.const 2832 - local.get $1 - local.get $6 - i64.and - i32.wrap_i64 - i32.const 1 - i32.shl + block $assembly/common/CH|inlined.0 (result i32) + global.get $assembly/common/e + local.set $30 + global.get $assembly/common/f + local.set $31 + global.get $assembly/common/g + local.set $32 + local.get $30 + local.get $31 + i32.and + local.get $30 + i32.const -1 + i32.xor + local.get $32 + i32.and + i32.xor + br $assembly/common/CH|inlined.0 + end i32.add - i32.load16_u - i32.store16 - local.get $1 - local.get $5 - i64.shr_u - local.set $1 - local.get $1 - i64.const 0 - i64.ne - br_if $do-loop|0 - end - else - loop $do-loop|1 - local.get $2 - i32.const 1 - i32.sub - local.set $2 - local.get $1 - local.get $4 - i64.div_u - local.set $7 - local.get $0 - local.get $2 - i32.const 1 - i32.shl + block $assembly/common/load32|inlined.4 (result i32) + global.get $assembly/common/kPtr + local.set $33 + global.get $assembly/common/i + local.set $34 + local.get $33 + local.get $34 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.4 + end i32.add - i32.const 2832 - local.get $1 - local.get $7 - local.get $4 - i64.mul - i64.sub - i32.wrap_i64 + block $assembly/common/load32|inlined.5 (result i32) + local.get $0 + local.set $35 + global.get $assembly/common/i + local.set $36 + local.get $35 + local.get $36 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.5 + end + i32.add + global.set $assembly/common/t1 + block $assembly/common/EP0|inlined.0 (result i32) + global.get $assembly/common/a + local.set $37 + local.get $37 + i32.const 2 + i32.rotr + local.get $37 + i32.const 13 + i32.rotr + i32.xor + local.get $37 + i32.const 22 + i32.rotr + i32.xor + br $assembly/common/EP0|inlined.0 + end + block $assembly/common/MAJ|inlined.0 (result i32) + global.get $assembly/common/a + local.set $38 + global.get $assembly/common/b + local.set $39 + global.get $assembly/common/c + local.set $40 + local.get $38 + local.get $39 + i32.and + local.get $38 + local.get $40 + i32.and + i32.xor + local.get $39 + local.get $40 + i32.and + i32.xor + br $assembly/common/MAJ|inlined.0 + end + i32.add + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i i32.const 1 - i32.shl i32.add - i32.load16_u - i32.store16 - local.get $7 - local.set $1 - local.get $1 - i64.const 0 - i64.ne - br_if $do-loop|1 + global.set $assembly/common/i + br $for-loop|2 end end + global.get $assembly/common/H0 + global.get $assembly/common/a + i32.add + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b + i32.add + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c + i32.add + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d + i32.add + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e + i32.add + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f + i32.add + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g + i32.add + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h + i32.add + global.set $assembly/common/H7 ) - (func $~lib/util/number/itoa32 (param $0 i32) (param $1 i32) (result i32) + (func $assembly/common/update (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - local.get $1 - i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 36 - i32.gt_s - end - if - i32.const 1152 - i32.const 1280 - i32.const 373 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.eqz - if - i32.const 1344 - return - end - local.get $0 - i32.const 31 - i32.shr_u - i32.const 1 - i32.shl + i32.const 0 local.set $2 - local.get $2 - if - i32.const 0 - local.get $0 - i32.sub - local.set $0 - end + global.get $assembly/common/bytesHashed local.get $1 - i32.const 10 - i32.eq + i32.add + global.set $assembly/common/bytesHashed + global.get $assembly/common/mLength if - local.get $0 - call $~lib/util/number/decimalCount32 - local.set $4 - local.get $4 - i32.const 1 - i32.shl - local.get $2 - i32.add - i32.const 2 - call $~lib/rt/tcms/__new - local.set $3 - local.get $3 - local.get $2 - i32.add - local.set $5 - local.get $0 - local.set $6 - local.get $4 - local.set $7 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $5 - local.get $6 - local.get $7 - call $~lib/util/number/utoa32_dec_lut - else + i32.const 64 + global.get $assembly/common/mLength + i32.sub local.get $1 - i32.const 16 - i32.eq + i32.le_s if - i32.const 31 + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add local.get $0 - i32.clz + i32.const 64 + global.get $assembly/common/mLength + i32.sub + memory.copy + global.get $assembly/common/mLength + i32.const 64 + global.get $assembly/common/mLength i32.sub - i32.const 2 - i32.shr_s - i32.const 1 - i32.add - local.set $8 - local.get $8 - i32.const 1 - i32.shl - local.get $2 i32.add - i32.const 2 - call $~lib/rt/tcms/__new - local.set $3 - local.get $3 + global.set $assembly/common/mLength local.get $2 + i32.const 64 + global.get $assembly/common/mLength + i32.sub i32.add - local.set $9 - local.get $0 - local.set $10 - local.get $8 - local.set $11 + local.set $2 + local.get $1 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.sub + local.set $1 + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $9 - local.get $10 - i64.extend_i32_u - local.get $11 - call $~lib/util/number/utoa_hex_lut + global.set $assembly/common/mLength else + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add local.get $0 - local.set $12 - local.get $12 - i64.extend_i32_u local.get $1 - call $~lib/util/number/ulog_base - local.set $13 - local.get $13 - i32.const 1 - i32.shl - local.get $2 + memory.copy + global.get $assembly/common/mLength + local.get $1 i32.add - i32.const 2 - call $~lib/rt/tcms/__new - local.set $3 - local.get $3 + global.set $assembly/common/mLength local.get $2 + local.get $1 i32.add - local.get $12 - i64.extend_i32_u - local.get $13 + local.set $2 local.get $1 - call $~lib/util/number/utoa64_any_core + local.get $1 + i32.sub + local.set $1 + return end end - local.get $2 - if + i32.const 0 + local.set $3 + loop $for-loop|0 local.get $3 - i32.const 45 - i32.store16 + local.get $1 + i32.const 64 + i32.div_s + i32.lt_s + if + global.get $assembly/common/wPtr + local.get $0 + local.get $2 + i32.add + call $assembly/common/hashBlocks + local.get $3 + i32.const 1 + i32.add + local.set $3 + local.get $2 + i32.const 64 + i32.add + local.set $2 + br $for-loop|0 + end end - local.get $3 - return - ) - (func $~lib/number/I32#toString (param $0 i32) (param $1 i32) (result i32) - local.get $0 local.get $1 - call $~lib/util/number/itoa32 - return - ) - (func $~lib/rt/common/OBJECT#get:rtSize (param $0 i32) (result i32) - local.get $0 - i32.load offset=16 + i32.const 63 + i32.and + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.get $0 + local.get $2 + i32.add + local.get $1 + i32.const 63 + i32.and + memory.copy + global.get $assembly/common/mLength + local.get $1 + i32.const 63 + i32.and + i32.add + global.set $assembly/common/mLength + end ) - (func $~lib/string/String#get:length (param $0 i32) (result i32) - local.get $0 - i32.const 20 - i32.sub - call $~lib/rt/common/OBJECT#get:rtSize + (func $~lib/polyfills/bswap (param $0 i32) (result i32) i32.const 1 - i32.shr_u - return - ) - (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $2 - local.get $1 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $3 - local.get $2 - local.get $3 - i32.add - local.set $4 - local.get $4 - i32.const 0 - i32.eq - if - i32.const 3024 - return - end - local.get $4 - i32.const 2 - call $~lib/rt/tcms/__new - local.set $5 - local.get $5 - local.get $0 - local.get $2 - memory.copy - local.get $5 - local.get $2 - i32.add - local.get $1 - local.get $3 - memory.copy - local.get $5 - return - ) - (func $start:assembly/simd - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 v128) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 v128) - (local $9 i32) - i32.const 992 - call $~lib/rt/tcms/initLazy - global.set $~lib/rt/tcms/fromSpace - i32.const 0 - i32.const 4 - i32.const 64 - i32.mul - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/simd/kV128ArrayBuffer - global.get $assembly/simd/kV128ArrayBuffer - global.set $assembly/simd/kV128Ptr - i32.const 0 - local.set $0 - loop $for-loop|0 - local.get $0 - i32.const 64 - i32.lt_s - if - global.get $assembly/simd/kV128Ptr - local.set $1 - local.get $0 - local.set $2 - global.get $assembly/utils/const/K - local.get $0 - call $~lib/array/Array#__get - i32x4.splat - local.set $3 - block $break|1 - block $case64|1 - block $case63|1 - block $case62|1 - block $case61|1 - block $case60|1 - block $case59|1 - block $case58|1 - block $case57|1 - block $case56|1 - block $case55|1 - block $case54|1 - block $case53|1 - block $case52|1 - block $case51|1 - block $case50|1 - block $case49|1 - block $case48|1 - block $case47|1 - block $case46|1 - block $case45|1 - block $case44|1 - block $case43|1 - block $case42|1 - block $case41|1 - block $case40|1 - block $case39|1 - block $case38|1 - block $case37|1 - block $case36|1 - block $case35|1 - block $case34|1 - block $case33|1 - block $case32|1 - block $case31|1 - block $case30|1 - block $case29|1 - block $case28|1 - block $case27|1 - block $case26|1 - block $case25|1 - block $case24|1 - block $case23|1 - block $case22|1 - block $case21|1 - block $case20|1 - block $case19|1 - block $case18|1 - block $case17|1 - block $case16|1 - block $case15|1 - block $case14|1 - block $case13|1 - block $case12|1 - block $case11|1 - block $case10|1 - block $case9|1 - block $case8|1 - block $case7|1 - block $case6|1 - block $case5|1 - block $case4|1 - block $case3|1 - block $case2|1 - block $case1|1 - block $case0|1 - local.get $2 - local.set $4 - local.get $4 - i32.const 0 - i32.eq - br_if $case0|1 - local.get $4 - i32.const 1 - i32.eq - br_if $case1|1 - local.get $4 - i32.const 2 - i32.eq - br_if $case2|1 - local.get $4 - i32.const 3 - i32.eq - br_if $case3|1 - local.get $4 - i32.const 4 - i32.eq - br_if $case4|1 - local.get $4 - i32.const 5 - i32.eq - br_if $case5|1 - local.get $4 - i32.const 6 - i32.eq - br_if $case6|1 - local.get $4 - i32.const 7 - i32.eq - br_if $case7|1 - local.get $4 - i32.const 8 - i32.eq - br_if $case8|1 - local.get $4 - i32.const 9 - i32.eq - br_if $case9|1 - local.get $4 - i32.const 10 - i32.eq - br_if $case10|1 - local.get $4 - i32.const 11 - i32.eq - br_if $case11|1 - local.get $4 - i32.const 12 - i32.eq - br_if $case12|1 - local.get $4 - i32.const 13 - i32.eq - br_if $case13|1 - local.get $4 - i32.const 14 - i32.eq - br_if $case14|1 - local.get $4 - i32.const 15 - i32.eq - br_if $case15|1 - local.get $4 - i32.const 16 - i32.eq - br_if $case16|1 - local.get $4 - i32.const 17 - i32.eq - br_if $case17|1 - local.get $4 - i32.const 18 - i32.eq - br_if $case18|1 - local.get $4 - i32.const 19 - i32.eq - br_if $case19|1 - local.get $4 - i32.const 20 - i32.eq - br_if $case20|1 - local.get $4 - i32.const 21 - i32.eq - br_if $case21|1 - local.get $4 - i32.const 22 - i32.eq - br_if $case22|1 - local.get $4 - i32.const 23 - i32.eq - br_if $case23|1 - local.get $4 - i32.const 24 - i32.eq - br_if $case24|1 - local.get $4 - i32.const 25 - i32.eq - br_if $case25|1 - local.get $4 - i32.const 26 - i32.eq - br_if $case26|1 - local.get $4 - i32.const 27 - i32.eq - br_if $case27|1 - local.get $4 - i32.const 28 - i32.eq - br_if $case28|1 - local.get $4 - i32.const 29 - i32.eq - br_if $case29|1 - local.get $4 - i32.const 30 - i32.eq - br_if $case30|1 - local.get $4 - i32.const 31 - i32.eq - br_if $case31|1 - local.get $4 - i32.const 32 - i32.eq - br_if $case32|1 - local.get $4 - i32.const 33 - i32.eq - br_if $case33|1 - local.get $4 - i32.const 34 - i32.eq - br_if $case34|1 - local.get $4 - i32.const 35 - i32.eq - br_if $case35|1 - local.get $4 - i32.const 36 - i32.eq - br_if $case36|1 - local.get $4 - i32.const 37 - i32.eq - br_if $case37|1 - local.get $4 - i32.const 38 - i32.eq - br_if $case38|1 - local.get $4 - i32.const 39 - i32.eq - br_if $case39|1 - local.get $4 - i32.const 40 - i32.eq - br_if $case40|1 - local.get $4 - i32.const 41 - i32.eq - br_if $case41|1 - local.get $4 - i32.const 42 - i32.eq - br_if $case42|1 - local.get $4 - i32.const 43 - i32.eq - br_if $case43|1 - local.get $4 - i32.const 44 - i32.eq - br_if $case44|1 - local.get $4 - i32.const 45 - i32.eq - br_if $case45|1 - local.get $4 - i32.const 46 - i32.eq - br_if $case46|1 - local.get $4 - i32.const 47 - i32.eq - br_if $case47|1 - local.get $4 - i32.const 48 - i32.eq - br_if $case48|1 - local.get $4 - i32.const 49 - i32.eq - br_if $case49|1 - local.get $4 - i32.const 50 - i32.eq - br_if $case50|1 - local.get $4 - i32.const 51 - i32.eq - br_if $case51|1 - local.get $4 - i32.const 52 - i32.eq - br_if $case52|1 - local.get $4 - i32.const 53 - i32.eq - br_if $case53|1 - local.get $4 - i32.const 54 - i32.eq - br_if $case54|1 - local.get $4 - i32.const 55 - i32.eq - br_if $case55|1 - local.get $4 - i32.const 56 - i32.eq - br_if $case56|1 - local.get $4 - i32.const 57 - i32.eq - br_if $case57|1 - local.get $4 - i32.const 58 - i32.eq - br_if $case58|1 - local.get $4 - i32.const 59 - i32.eq - br_if $case59|1 - local.get $4 - i32.const 60 - i32.eq - br_if $case60|1 - local.get $4 - i32.const 61 - i32.eq - br_if $case61|1 - local.get $4 - i32.const 62 - i32.eq - br_if $case62|1 - local.get $4 - i32.const 63 - i32.eq - br_if $case63|1 - br $case64|1 - end - local.get $1 - local.get $3 - v128.store - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=16 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=32 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=48 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=64 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=80 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=96 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=112 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=128 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=144 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=160 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=176 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=192 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=208 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=224 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=240 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=256 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=272 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=288 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=304 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=320 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=336 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=352 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=368 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=384 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=400 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=416 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=432 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=448 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=464 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=480 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=496 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=512 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=528 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=544 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=560 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=576 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=592 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=608 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=624 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=640 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=656 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=672 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=688 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=704 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=720 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=736 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=752 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=768 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=784 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=800 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=816 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=832 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=848 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=864 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=880 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=896 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=912 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=928 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=944 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=960 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=976 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=992 - br $break|1 - end - local.get $1 - local.get $3 - v128.store offset=1008 - br $break|1 - end - i32.const 2928 - local.get $2 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 201 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|0 - end - end - i32.const 0 - i32.const 4 - i32.const 64 - i32.mul - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/simd/w64V12ArrayBuffer - global.get $assembly/simd/w64V12ArrayBuffer - global.set $assembly/simd/w64V128Ptr - i32.const 0 - local.set $5 - loop $for-loop|2 - local.get $5 - i32.const 64 - i32.lt_s - if - global.get $assembly/simd/w64V128Ptr - local.set $6 - local.get $5 - local.set $7 - global.get $assembly/utils/const/W64 - local.get $5 - call $~lib/array/Array#__get - i32x4.splat - local.set $8 - block $break|3 - block $case64|3 - block $case63|3 - block $case62|3 - block $case61|3 - block $case60|3 - block $case59|3 - block $case58|3 - block $case57|3 - block $case56|3 - block $case55|3 - block $case54|3 - block $case53|3 - block $case52|3 - block $case51|3 - block $case50|3 - block $case49|3 - block $case48|3 - block $case47|3 - block $case46|3 - block $case45|3 - block $case44|3 - block $case43|3 - block $case42|3 - block $case41|3 - block $case40|3 - block $case39|3 - block $case38|3 - block $case37|3 - block $case36|3 - block $case35|3 - block $case34|3 - block $case33|3 - block $case32|3 - block $case31|3 - block $case30|3 - block $case29|3 - block $case28|3 - block $case27|3 - block $case26|3 - block $case25|3 - block $case24|3 - block $case23|3 - block $case22|3 - block $case21|3 - block $case20|3 - block $case19|3 - block $case18|3 - block $case17|3 - block $case16|3 - block $case15|3 - block $case14|3 - block $case13|3 - block $case12|3 - block $case11|3 - block $case10|3 - block $case9|3 - block $case8|3 - block $case7|3 - block $case6|3 - block $case5|3 - block $case4|3 - block $case3|3 - block $case2|3 - block $case1|3 - block $case0|3 - local.get $7 - local.set $9 - local.get $9 - i32.const 0 - i32.eq - br_if $case0|3 - local.get $9 - i32.const 1 - i32.eq - br_if $case1|3 - local.get $9 - i32.const 2 - i32.eq - br_if $case2|3 - local.get $9 - i32.const 3 - i32.eq - br_if $case3|3 - local.get $9 - i32.const 4 - i32.eq - br_if $case4|3 - local.get $9 - i32.const 5 - i32.eq - br_if $case5|3 - local.get $9 - i32.const 6 - i32.eq - br_if $case6|3 - local.get $9 - i32.const 7 - i32.eq - br_if $case7|3 - local.get $9 - i32.const 8 - i32.eq - br_if $case8|3 - local.get $9 - i32.const 9 - i32.eq - br_if $case9|3 - local.get $9 - i32.const 10 - i32.eq - br_if $case10|3 - local.get $9 - i32.const 11 - i32.eq - br_if $case11|3 - local.get $9 - i32.const 12 - i32.eq - br_if $case12|3 - local.get $9 - i32.const 13 - i32.eq - br_if $case13|3 - local.get $9 - i32.const 14 - i32.eq - br_if $case14|3 - local.get $9 - i32.const 15 - i32.eq - br_if $case15|3 - local.get $9 - i32.const 16 - i32.eq - br_if $case16|3 - local.get $9 - i32.const 17 - i32.eq - br_if $case17|3 - local.get $9 - i32.const 18 - i32.eq - br_if $case18|3 - local.get $9 - i32.const 19 - i32.eq - br_if $case19|3 - local.get $9 - i32.const 20 - i32.eq - br_if $case20|3 - local.get $9 - i32.const 21 - i32.eq - br_if $case21|3 - local.get $9 - i32.const 22 - i32.eq - br_if $case22|3 - local.get $9 - i32.const 23 - i32.eq - br_if $case23|3 - local.get $9 - i32.const 24 - i32.eq - br_if $case24|3 - local.get $9 - i32.const 25 - i32.eq - br_if $case25|3 - local.get $9 - i32.const 26 - i32.eq - br_if $case26|3 - local.get $9 - i32.const 27 - i32.eq - br_if $case27|3 - local.get $9 - i32.const 28 - i32.eq - br_if $case28|3 - local.get $9 - i32.const 29 - i32.eq - br_if $case29|3 - local.get $9 - i32.const 30 - i32.eq - br_if $case30|3 - local.get $9 - i32.const 31 - i32.eq - br_if $case31|3 - local.get $9 - i32.const 32 - i32.eq - br_if $case32|3 - local.get $9 - i32.const 33 - i32.eq - br_if $case33|3 - local.get $9 - i32.const 34 - i32.eq - br_if $case34|3 - local.get $9 - i32.const 35 - i32.eq - br_if $case35|3 - local.get $9 - i32.const 36 - i32.eq - br_if $case36|3 - local.get $9 - i32.const 37 - i32.eq - br_if $case37|3 - local.get $9 - i32.const 38 - i32.eq - br_if $case38|3 - local.get $9 - i32.const 39 - i32.eq - br_if $case39|3 - local.get $9 - i32.const 40 - i32.eq - br_if $case40|3 - local.get $9 - i32.const 41 - i32.eq - br_if $case41|3 - local.get $9 - i32.const 42 - i32.eq - br_if $case42|3 - local.get $9 - i32.const 43 - i32.eq - br_if $case43|3 - local.get $9 - i32.const 44 - i32.eq - br_if $case44|3 - local.get $9 - i32.const 45 - i32.eq - br_if $case45|3 - local.get $9 - i32.const 46 - i32.eq - br_if $case46|3 - local.get $9 - i32.const 47 - i32.eq - br_if $case47|3 - local.get $9 - i32.const 48 - i32.eq - br_if $case48|3 - local.get $9 - i32.const 49 - i32.eq - br_if $case49|3 - local.get $9 - i32.const 50 - i32.eq - br_if $case50|3 - local.get $9 - i32.const 51 - i32.eq - br_if $case51|3 - local.get $9 - i32.const 52 - i32.eq - br_if $case52|3 - local.get $9 - i32.const 53 - i32.eq - br_if $case53|3 - local.get $9 - i32.const 54 - i32.eq - br_if $case54|3 - local.get $9 - i32.const 55 - i32.eq - br_if $case55|3 - local.get $9 - i32.const 56 - i32.eq - br_if $case56|3 - local.get $9 - i32.const 57 - i32.eq - br_if $case57|3 - local.get $9 - i32.const 58 - i32.eq - br_if $case58|3 - local.get $9 - i32.const 59 - i32.eq - br_if $case59|3 - local.get $9 - i32.const 60 - i32.eq - br_if $case60|3 - local.get $9 - i32.const 61 - i32.eq - br_if $case61|3 - local.get $9 - i32.const 62 - i32.eq - br_if $case62|3 - local.get $9 - i32.const 63 - i32.eq - br_if $case63|3 - br $case64|3 - end - local.get $6 - local.get $8 - v128.store - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=16 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=32 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=48 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=64 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=80 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=96 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=112 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=128 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=144 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=160 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=176 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=192 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=208 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=224 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=240 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=256 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=272 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=288 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=304 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=320 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=336 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=352 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=368 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=384 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=400 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=416 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=432 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=448 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=464 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=480 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=496 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=512 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=528 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=544 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=560 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=576 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=592 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=608 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=624 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=640 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=656 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=672 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=688 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=704 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=720 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=736 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=752 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=768 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=784 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=800 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=816 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=832 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=848 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=864 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=880 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=896 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=912 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=928 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=944 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=960 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=976 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=992 - br $break|3 - end - local.get $6 - local.get $8 - v128.store offset=1008 - br $break|3 - end - i32.const 2928 - local.get $7 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 201 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|2 - end - end - ) - (func $start:assembly/index - call $start:assembly/simd - global.get $assembly/utils/const/K - call $~lib/array/Array#get:dataStart - global.set $assembly/index/kPtr - global.get $assembly/utils/const/W64 - call $~lib/array/Array#get:dataStart - global.set $assembly/index/w64Ptr - i32.const 0 - i32.const 64 - call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/index/M - global.get $assembly/index/M - global.set $assembly/index/mPtr - i32.const 0 - i32.const 256 - global.get $assembly/index/PARALLEL_FACTOR - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/index/W - global.get $assembly/index/W - global.set $assembly/index/wPtr - i32.const 0 - global.get $assembly/index/INPUT_LENGTH - call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/index/input - global.get $assembly/index/input - global.set $assembly/index/inputPtr - i32.const 0 - global.get $assembly/index/DIGEST_LENGTH - call $~lib/arraybuffer/ArrayBuffer#constructor - global.set $assembly/index/output - global.get $assembly/index/output - global.set $assembly/index/outputPtr - ) - (func $assembly/index/init - i32.const 1779033703 - global.set $assembly/index/H0 - i32.const -1150833019 - global.set $assembly/index/H1 - i32.const 1013904242 - global.set $assembly/index/H2 - i32.const -1521486534 - global.set $assembly/index/H3 - i32.const 1359893119 - global.set $assembly/index/H4 - i32.const -1694144372 - global.set $assembly/index/H5 - i32.const 528734635 - global.set $assembly/index/H6 - i32.const 1541459225 - global.set $assembly/index/H7 - i32.const 0 - global.set $assembly/index/mLength - i32.const 0 - global.set $assembly/index/bytesHashed - ) - (func $assembly/index/hashBlocks (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) - (local $15 i32) - (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (local $24 i32) - (local $25 i32) - (local $26 i32) - (local $27 i32) - (local $28 i32) - (local $29 i32) - (local $30 i32) - (local $31 i32) - (local $32 i32) - (local $33 i32) - (local $34 i32) - (local $35 i32) - (local $36 i32) - (local $37 i32) - (local $38 i32) - (local $39 i32) - (local $40 i32) - global.get $assembly/index/H0 - global.set $assembly/index/a - global.get $assembly/index/H1 - global.set $assembly/index/b - global.get $assembly/index/H2 - global.set $assembly/index/c - global.get $assembly/index/H3 - global.set $assembly/index/d - global.get $assembly/index/H4 - global.set $assembly/index/e - global.get $assembly/index/H5 - global.set $assembly/index/f - global.get $assembly/index/H6 - global.set $assembly/index/g - global.get $assembly/index/H7 - global.set $assembly/index/h - i32.const 0 - global.set $assembly/index/i - loop $for-loop|0 - global.get $assembly/index/i - i32.const 16 - i32.lt_u - if - local.get $0 - local.set $13 - global.get $assembly/index/i - local.set $14 - block $assembly/index/load32be|inlined.0 (result i32) - local.get $1 - local.set $2 - global.get $assembly/index/i - local.set $3 - local.get $3 - i32.const 2 - i32.shl - local.set $4 - block $assembly/index/load8|inlined.0 (result i32) - local.get $2 - local.set $5 - local.get $4 - i32.const 0 - i32.add - local.set $6 - local.get $5 - local.get $6 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.0 - end - i32.const 255 - i32.and - i32.const 24 - i32.shl - block $assembly/index/load8|inlined.1 (result i32) - local.get $2 - local.set $7 - local.get $4 - i32.const 1 - i32.add - local.set $8 - local.get $7 - local.get $8 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.1 - end - i32.const 255 - i32.and - i32.const 16 - i32.shl - i32.or - block $assembly/index/load8|inlined.2 (result i32) - local.get $2 - local.set $9 - local.get $4 - i32.const 2 - i32.add - local.set $10 - local.get $9 - local.get $10 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.2 - end - i32.const 255 - i32.and - i32.const 8 - i32.shl - i32.or - block $assembly/index/load8|inlined.3 (result i32) - local.get $2 - local.set $11 - local.get $4 - i32.const 3 - i32.add - local.set $12 - local.get $11 - local.get $12 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.3 - end - i32.const 255 - i32.and - i32.const 0 - i32.shl - i32.or - br $assembly/index/load32be|inlined.0 - end - local.set $15 - local.get $13 - local.get $14 - i32.const 2 - i32.shl - i32.add - local.get $15 - i32.store - global.get $assembly/index/i - i32.const 1 - i32.add - global.set $assembly/index/i - br $for-loop|0 - end - end - i32.const 16 - global.set $assembly/index/i - loop $for-loop|1 - global.get $assembly/index/i - i32.const 64 - i32.lt_u - if - local.get $0 - local.set $26 - global.get $assembly/index/i - local.set $27 - block $assembly/index/SIG1|inlined.0 (result i32) - block $assembly/index/load32|inlined.0 (result i32) - local.get $0 - local.set $16 - global.get $assembly/index/i - i32.const 2 - i32.sub - local.set $17 - local.get $16 - local.get $17 - i32.const 2 - i32.shl - i32.add - i32.load - br $assembly/index/load32|inlined.0 - end - local.set $18 - local.get $18 - i32.const 17 - i32.rotr - local.get $18 - i32.const 19 - i32.rotr - i32.xor - local.get $18 - i32.const 10 - i32.shr_u - i32.xor - br $assembly/index/SIG1|inlined.0 - end - block $assembly/index/load32|inlined.1 (result i32) - local.get $0 - local.set $19 - global.get $assembly/index/i - i32.const 7 - i32.sub - local.set $20 - local.get $19 - local.get $20 - i32.const 2 - i32.shl - i32.add - i32.load - br $assembly/index/load32|inlined.1 - end - i32.add - block $assembly/index/SIG0|inlined.0 (result i32) - block $assembly/index/load32|inlined.2 (result i32) - local.get $0 - local.set $21 - global.get $assembly/index/i - i32.const 15 - i32.sub - local.set $22 - local.get $21 - local.get $22 - i32.const 2 - i32.shl - i32.add - i32.load - br $assembly/index/load32|inlined.2 - end - local.set $23 - local.get $23 - i32.const 7 - i32.rotr - local.get $23 - i32.const 18 - i32.rotr - i32.xor - local.get $23 - i32.const 3 - i32.shr_u - i32.xor - br $assembly/index/SIG0|inlined.0 - end - i32.add - block $assembly/index/load32|inlined.3 (result i32) - local.get $0 - local.set $24 - global.get $assembly/index/i - i32.const 16 - i32.sub - local.set $25 - local.get $24 - local.get $25 - i32.const 2 - i32.shl - i32.add - i32.load - br $assembly/index/load32|inlined.3 - end - i32.add - local.set $28 - local.get $26 - local.get $27 - i32.const 2 - i32.shl - i32.add - local.get $28 - i32.store - global.get $assembly/index/i - i32.const 1 - i32.add - global.set $assembly/index/i - br $for-loop|1 - end - end - i32.const 0 - global.set $assembly/index/i - loop $for-loop|2 - global.get $assembly/index/i - i32.const 64 - i32.lt_u - if - global.get $assembly/index/h - block $assembly/index/EP1|inlined.0 (result i32) - global.get $assembly/index/e - local.set $29 - local.get $29 - i32.const 6 - i32.rotr - local.get $29 - i32.const 11 - i32.rotr - i32.xor - local.get $29 - i32.const 25 - i32.rotr - i32.xor - br $assembly/index/EP1|inlined.0 - end - i32.add - block $assembly/index/CH|inlined.0 (result i32) - global.get $assembly/index/e - local.set $30 - global.get $assembly/index/f - local.set $31 - global.get $assembly/index/g - local.set $32 - local.get $30 - local.get $31 - i32.and - local.get $30 - i32.const -1 - i32.xor - local.get $32 - i32.and - i32.xor - br $assembly/index/CH|inlined.0 - end - i32.add - block $assembly/index/load32|inlined.4 (result i32) - global.get $assembly/index/kPtr - local.set $33 - global.get $assembly/index/i - local.set $34 - local.get $33 - local.get $34 - i32.const 2 - i32.shl - i32.add - i32.load - br $assembly/index/load32|inlined.4 - end - i32.add - block $assembly/index/load32|inlined.5 (result i32) - local.get $0 - local.set $35 - global.get $assembly/index/i - local.set $36 - local.get $35 - local.get $36 - i32.const 2 - i32.shl - i32.add - i32.load - br $assembly/index/load32|inlined.5 - end - i32.add - global.set $assembly/index/t1 - block $assembly/index/EP0|inlined.0 (result i32) - global.get $assembly/index/a - local.set $37 - local.get $37 - i32.const 2 - i32.rotr - local.get $37 - i32.const 13 - i32.rotr - i32.xor - local.get $37 - i32.const 22 - i32.rotr - i32.xor - br $assembly/index/EP0|inlined.0 - end - block $assembly/index/MAJ|inlined.0 (result i32) - global.get $assembly/index/a - local.set $38 - global.get $assembly/index/b - local.set $39 - global.get $assembly/index/c - local.set $40 - local.get $38 - local.get $39 - i32.and - local.get $38 - local.get $40 - i32.and - i32.xor - local.get $39 - local.get $40 - i32.and - i32.xor - br $assembly/index/MAJ|inlined.0 - end - i32.add - global.set $assembly/index/t2 - global.get $assembly/index/g - global.set $assembly/index/h - global.get $assembly/index/f - global.set $assembly/index/g - global.get $assembly/index/e - global.set $assembly/index/f - global.get $assembly/index/d - global.get $assembly/index/t1 - i32.add - global.set $assembly/index/e - global.get $assembly/index/c - global.set $assembly/index/d - global.get $assembly/index/b - global.set $assembly/index/c - global.get $assembly/index/a - global.set $assembly/index/b - global.get $assembly/index/t1 - global.get $assembly/index/t2 - i32.add - global.set $assembly/index/a - global.get $assembly/index/i - i32.const 1 - i32.add - global.set $assembly/index/i - br $for-loop|2 - end - end - global.get $assembly/index/H0 - global.get $assembly/index/a - i32.add - global.set $assembly/index/H0 - global.get $assembly/index/H1 - global.get $assembly/index/b - i32.add - global.set $assembly/index/H1 - global.get $assembly/index/H2 - global.get $assembly/index/c - i32.add - global.set $assembly/index/H2 - global.get $assembly/index/H3 - global.get $assembly/index/d - i32.add - global.set $assembly/index/H3 - global.get $assembly/index/H4 - global.get $assembly/index/e - i32.add - global.set $assembly/index/H4 - global.get $assembly/index/H5 - global.get $assembly/index/f - i32.add - global.set $assembly/index/H5 - global.get $assembly/index/H6 - global.get $assembly/index/g - i32.add - global.set $assembly/index/H6 - global.get $assembly/index/H7 - global.get $assembly/index/h - i32.add - global.set $assembly/index/H7 - ) - (func $assembly/index/update (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - i32.const 0 - local.set $2 - global.get $assembly/index/bytesHashed - local.get $1 - i32.add - global.set $assembly/index/bytesHashed - global.get $assembly/index/mLength - if - i32.const 64 - global.get $assembly/index/mLength - i32.sub - local.get $1 - i32.le_s - if - global.get $assembly/index/mPtr - global.get $assembly/index/mLength - i32.add - local.get $0 - i32.const 64 - global.get $assembly/index/mLength - i32.sub - memory.copy - global.get $assembly/index/mLength - i32.const 64 - global.get $assembly/index/mLength - i32.sub - i32.add - global.set $assembly/index/mLength - local.get $2 - i32.const 64 - global.get $assembly/index/mLength - i32.sub - i32.add - local.set $2 - local.get $1 - i32.const 64 - global.get $assembly/index/mLength - i32.sub - i32.sub - local.set $1 - global.get $assembly/index/wPtr - global.get $assembly/index/mPtr - call $assembly/index/hashBlocks - i32.const 0 - global.set $assembly/index/mLength - else - global.get $assembly/index/mPtr - global.get $assembly/index/mLength - i32.add - local.get $0 - local.get $1 - memory.copy - global.get $assembly/index/mLength - local.get $1 - i32.add - global.set $assembly/index/mLength - local.get $2 - local.get $1 - i32.add - local.set $2 - local.get $1 - local.get $1 - i32.sub - local.set $1 - return - end - end - i32.const 0 - local.set $3 - loop $for-loop|0 - local.get $3 - local.get $1 - i32.const 64 - i32.div_s - i32.lt_s - if - global.get $assembly/index/wPtr - local.get $0 - local.get $2 - i32.add - call $assembly/index/hashBlocks - local.get $3 - i32.const 1 - i32.add - local.set $3 - local.get $2 - i32.const 64 - i32.add - local.set $2 - br $for-loop|0 - end - end - local.get $1 - i32.const 63 - i32.and - if - global.get $assembly/index/mPtr - global.get $assembly/index/mLength - i32.add - local.get $0 - local.get $2 - i32.add - local.get $1 - i32.const 63 - i32.and - memory.copy - global.get $assembly/index/mLength - local.get $1 - i32.const 63 - i32.and - i32.add - global.set $assembly/index/mLength - end - ) - (func $~lib/polyfills/bswap (param $0 i32) (result i32) - i32.const 1 - drop - i32.const 4 - i32.const 1 - i32.eq - drop - i32.const 4 - i32.const 2 - i32.eq - drop - i32.const 4 - i32.const 4 - i32.eq - drop - local.get $0 - i32.const -16711936 - i32.and - i32.const 8 - i32.rotl - local.get $0 - i32.const 16711935 - i32.and - i32.const 8 - i32.rotr - i32.or - return - ) - (func $~lib/polyfills/bswap (param $0 i32) (result i32) - i32.const 1 - drop - i32.const 4 - i32.const 1 - i32.eq - drop - i32.const 4 - i32.const 2 - i32.eq - drop - i32.const 4 - i32.const 4 - i32.eq - drop - local.get $0 - i32.const -16711936 - i32.and - i32.const 8 - i32.rotl - local.get $0 - i32.const 16711935 - i32.and - i32.const 8 - i32.rotr - i32.or - return - ) - (func $assembly/index/final (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) - (local $15 i32) - (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (local $24 i32) - (local $25 i32) - (local $26 i32) - (local $27 i32) - (local $28 i32) - (local $29 i32) - (local $30 i32) - (local $31 i32) - (local $32 i32) - (local $33 i32) - (local $34 i32) - (local $35 i32) - (local $36 i32) - (local $37 i32) - (local $38 i32) - global.get $assembly/index/bytesHashed - i32.const 63 - i32.and - i32.const 63 - i32.lt_s - if - global.get $assembly/index/mPtr - local.set $1 - global.get $assembly/index/mLength - local.set $2 - i32.const 128 - local.set $3 - local.get $1 - local.get $2 - i32.add - local.get $3 - i32.store8 - global.get $assembly/index/mLength - i32.const 1 - i32.add - global.set $assembly/index/mLength - end - global.get $assembly/index/bytesHashed - i32.const 63 - i32.and - i32.const 56 - i32.ge_s - if - global.get $assembly/index/mPtr - global.get $assembly/index/mLength - i32.add - local.set $4 - i32.const 0 - local.set $5 - i32.const 64 - global.get $assembly/index/mLength - i32.sub - local.set $6 - local.get $4 - local.get $6 - i32.add - local.set $7 - loop $while-continue|0 - local.get $4 - local.get $7 - i32.lt_u - if - local.get $4 - local.get $5 - i32.store8 - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $while-continue|0 - end - end - global.get $assembly/index/wPtr - global.get $assembly/index/mPtr - call $assembly/index/hashBlocks - i32.const 0 - global.set $assembly/index/mLength - end - global.get $assembly/index/bytesHashed - i32.const 63 - i32.and - i32.const 63 - i32.ge_s - if - global.get $assembly/index/mPtr - local.set $8 - global.get $assembly/index/mLength - local.set $9 - i32.const 128 - local.set $10 - local.get $8 - local.get $9 - i32.add - local.get $10 - i32.store8 - global.get $assembly/index/mLength - i32.const 1 - i32.add - global.set $assembly/index/mLength - end - global.get $assembly/index/mPtr - global.get $assembly/index/mLength - i32.add - local.set $11 - i32.const 0 - local.set $12 - i32.const 64 - global.get $assembly/index/mLength - i32.sub - i32.const 8 - i32.sub - local.set $13 - local.get $11 - local.get $13 - i32.add - local.set $14 - loop $while-continue|1 - local.get $11 - local.get $14 - i32.lt_u - if - local.get $11 - local.get $12 - i32.store8 - local.get $11 - i32.const 1 - i32.add - local.set $11 - br $while-continue|1 - end - end - global.get $assembly/index/mPtr - i32.const 64 - i32.add - i32.const 8 - i32.sub - global.get $assembly/index/bytesHashed - i32.const 536870912 - i32.div_s - call $~lib/polyfills/bswap - i32.store - global.get $assembly/index/mPtr - i32.const 64 - i32.add - i32.const 4 - i32.sub - global.get $assembly/index/bytesHashed - i32.const 3 - i32.shl - call $~lib/polyfills/bswap - i32.store - global.get $assembly/index/wPtr - global.get $assembly/index/mPtr - call $assembly/index/hashBlocks - local.get $0 - local.set $15 - i32.const 0 - local.set $16 - global.get $assembly/index/H0 - call $~lib/polyfills/bswap - local.set $17 - local.get $15 - local.get $16 - i32.const 2 - i32.shl - i32.add - local.get $17 - i32.store - local.get $0 - local.set $18 - i32.const 1 - local.set $19 - global.get $assembly/index/H1 - call $~lib/polyfills/bswap - local.set $20 - local.get $18 - local.get $19 - i32.const 2 - i32.shl - i32.add - local.get $20 - i32.store - local.get $0 - local.set $21 - i32.const 2 - local.set $22 - global.get $assembly/index/H2 - call $~lib/polyfills/bswap - local.set $23 - local.get $21 - local.get $22 - i32.const 2 - i32.shl - i32.add - local.get $23 - i32.store - local.get $0 - local.set $24 - i32.const 3 - local.set $25 - global.get $assembly/index/H3 - call $~lib/polyfills/bswap - local.set $26 - local.get $24 - local.get $25 - i32.const 2 - i32.shl - i32.add - local.get $26 - i32.store - local.get $0 - local.set $27 - i32.const 4 - local.set $28 - global.get $assembly/index/H4 - call $~lib/polyfills/bswap - local.set $29 - local.get $27 - local.get $28 - i32.const 2 - i32.shl - i32.add - local.get $29 - i32.store - local.get $0 - local.set $30 - i32.const 5 - local.set $31 - global.get $assembly/index/H5 - call $~lib/polyfills/bswap - local.set $32 - local.get $30 - local.get $31 - i32.const 2 - i32.shl - i32.add - local.get $32 - i32.store - local.get $0 - local.set $33 - i32.const 6 - local.set $34 - global.get $assembly/index/H6 - call $~lib/polyfills/bswap - local.set $35 - local.get $33 - local.get $34 - i32.const 2 - i32.shl - i32.add - local.get $35 - i32.store - local.get $0 - local.set $36 - i32.const 7 - local.set $37 - global.get $assembly/index/H7 - call $~lib/polyfills/bswap - local.set $38 - local.get $36 - local.get $37 - i32.const 2 - i32.shl - i32.add - local.get $38 - i32.store - ) - (func $assembly/index/digest (param $0 i32) - call $assembly/index/init - global.get $assembly/index/inputPtr - local.get $0 - call $assembly/index/update - global.get $assembly/index/outputPtr - call $assembly/index/final - ) - (func $assembly/index/hashPreCompW (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - global.get $assembly/index/H0 - global.set $assembly/index/a - global.get $assembly/index/H1 - global.set $assembly/index/b - global.get $assembly/index/H2 - global.set $assembly/index/c - global.get $assembly/index/H3 - global.set $assembly/index/d - global.get $assembly/index/H4 - global.set $assembly/index/e - global.get $assembly/index/H5 - global.set $assembly/index/f - global.get $assembly/index/H6 - global.set $assembly/index/g - global.get $assembly/index/H7 - global.set $assembly/index/h - i32.const 0 - global.set $assembly/index/i - loop $for-loop|0 - global.get $assembly/index/i - i32.const 64 - i32.lt_u - if - global.get $assembly/index/h - block $assembly/index/EP1|inlined.1 (result i32) - global.get $assembly/index/e - local.set $1 - local.get $1 - i32.const 6 - i32.rotr - local.get $1 - i32.const 11 - i32.rotr - i32.xor - local.get $1 - i32.const 25 - i32.rotr - i32.xor - br $assembly/index/EP1|inlined.1 - end - i32.add - block $assembly/index/CH|inlined.1 (result i32) - global.get $assembly/index/e - local.set $2 - global.get $assembly/index/f - local.set $3 - global.get $assembly/index/g - local.set $4 - local.get $2 - local.get $3 - i32.and - local.get $2 - i32.const -1 - i32.xor - local.get $4 - i32.and - i32.xor - br $assembly/index/CH|inlined.1 - end - i32.add - block $assembly/index/load32|inlined.6 (result i32) - local.get $0 - local.set $5 - global.get $assembly/index/i - local.set $6 - local.get $5 - local.get $6 - i32.const 2 - i32.shl - i32.add - i32.load - br $assembly/index/load32|inlined.6 - end - i32.add - global.set $assembly/index/t1 - block $assembly/index/EP0|inlined.1 (result i32) - global.get $assembly/index/a - local.set $7 - local.get $7 - i32.const 2 - i32.rotr - local.get $7 - i32.const 13 - i32.rotr - i32.xor - local.get $7 - i32.const 22 - i32.rotr - i32.xor - br $assembly/index/EP0|inlined.1 - end - block $assembly/index/MAJ|inlined.1 (result i32) - global.get $assembly/index/a - local.set $8 - global.get $assembly/index/b - local.set $9 - global.get $assembly/index/c - local.set $10 - local.get $8 - local.get $9 - i32.and - local.get $8 - local.get $10 - i32.and - i32.xor - local.get $9 - local.get $10 - i32.and - i32.xor - br $assembly/index/MAJ|inlined.1 - end - i32.add - global.set $assembly/index/t2 - global.get $assembly/index/g - global.set $assembly/index/h - global.get $assembly/index/f - global.set $assembly/index/g - global.get $assembly/index/e - global.set $assembly/index/f - global.get $assembly/index/d - global.get $assembly/index/t1 - i32.add - global.set $assembly/index/e - global.get $assembly/index/c - global.set $assembly/index/d - global.get $assembly/index/b - global.set $assembly/index/c - global.get $assembly/index/a - global.set $assembly/index/b - global.get $assembly/index/t1 - global.get $assembly/index/t2 - i32.add - global.set $assembly/index/a - global.get $assembly/index/i - i32.const 1 - i32.add - global.set $assembly/index/i - br $for-loop|0 - end - end - global.get $assembly/index/H0 - global.get $assembly/index/a - i32.add - global.set $assembly/index/H0 - global.get $assembly/index/H1 - global.get $assembly/index/b - i32.add - global.set $assembly/index/H1 - global.get $assembly/index/H2 - global.get $assembly/index/c - i32.add - global.set $assembly/index/H2 - global.get $assembly/index/H3 - global.get $assembly/index/d - i32.add - global.set $assembly/index/H3 - global.get $assembly/index/H4 - global.get $assembly/index/e - i32.add - global.set $assembly/index/H4 - global.get $assembly/index/H5 - global.get $assembly/index/f - i32.add - global.set $assembly/index/H5 - global.get $assembly/index/H6 - global.get $assembly/index/g - i32.add - global.set $assembly/index/H6 - global.get $assembly/index/H7 - global.get $assembly/index/h - i32.add - global.set $assembly/index/H7 - ) - (func $assembly/index/digest64 (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) - (local $15 i32) - (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (local $24 i32) - (local $25 i32) - call $assembly/index/init - global.get $assembly/index/wPtr - local.get $0 - call $assembly/index/hashBlocks - global.get $assembly/index/w64Ptr - call $assembly/index/hashPreCompW - local.get $1 - local.set $2 - i32.const 0 - local.set $3 - global.get $assembly/index/H0 - call $~lib/polyfills/bswap - local.set $4 - local.get $2 - local.get $3 - i32.const 2 - i32.shl - i32.add - local.get $4 - i32.store - local.get $1 - local.set $5 - i32.const 1 - local.set $6 - global.get $assembly/index/H1 - call $~lib/polyfills/bswap - local.set $7 - local.get $5 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store - local.get $1 - local.set $8 - i32.const 2 - local.set $9 - global.get $assembly/index/H2 - call $~lib/polyfills/bswap - local.set $10 - local.get $8 - local.get $9 - i32.const 2 - i32.shl - i32.add - local.get $10 - i32.store - local.get $1 - local.set $11 - i32.const 3 - local.set $12 - global.get $assembly/index/H3 - call $~lib/polyfills/bswap - local.set $13 - local.get $11 - local.get $12 - i32.const 2 - i32.shl - i32.add - local.get $13 - i32.store - local.get $1 - local.set $14 - i32.const 4 - local.set $15 - global.get $assembly/index/H4 - call $~lib/polyfills/bswap - local.set $16 - local.get $14 - local.get $15 - i32.const 2 - i32.shl - i32.add - local.get $16 - i32.store - local.get $1 - local.set $17 - i32.const 5 - local.set $18 - global.get $assembly/index/H5 - call $~lib/polyfills/bswap - local.set $19 - local.get $17 - local.get $18 - i32.const 2 - i32.shl - i32.add - local.get $19 - i32.store - local.get $1 - local.set $20 - i32.const 6 - local.set $21 - global.get $assembly/index/H6 - call $~lib/polyfills/bswap - local.set $22 - local.get $20 - local.get $21 - i32.const 2 - i32.shl - i32.add - local.get $22 - i32.store - local.get $1 - local.set $23 - i32.const 7 - local.set $24 - global.get $assembly/index/H7 - call $~lib/polyfills/bswap - local.set $25 - local.get $23 - local.get $24 - i32.const 2 - i32.shl - i32.add - local.get $25 - i32.store - ) - (func $assembly/simd/initV128 - global.get $assembly/simd/DEFAULT_H0V128 - global.set $assembly/simd/H0V128 - global.get $assembly/simd/DEFAULT_H1V128 - global.set $assembly/simd/H1V128 - global.get $assembly/simd/DEFAULT_H2V128 - global.set $assembly/simd/H2V128 - global.get $assembly/simd/DEFAULT_H3V128 - global.set $assembly/simd/H3V128 - global.get $assembly/simd/DEFAULT_H4V128 - global.set $assembly/simd/H4V128 - global.get $assembly/simd/DEFAULT_H5V128 - global.set $assembly/simd/H5V128 - global.get $assembly/simd/DEFAULT_H6V128 - global.set $assembly/simd/H6V128 - global.get $assembly/simd/DEFAULT_H7V128 - global.set $assembly/simd/H7V128 - ) - (func $assembly/simd/hashPreCompWV128 - (local $0 v128) - (local $1 v128) - (local $2 i32) - (local $3 i32) - (local $4 v128) - (local $5 v128) - (local $6 v128) - (local $7 i32) - (local $8 i32) - (local $9 v128) - (local $10 v128) - (local $11 v128) - (local $12 i32) - (local $13 i32) - (local $14 v128) - (local $15 v128) - (local $16 v128) - (local $17 v128) - (local $18 v128) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 v128) - (local $23 v128) - (local $24 i32) - (local $25 i32) - (local $26 v128) - (local $27 v128) - (local $28 v128) - (local $29 i32) - (local $30 i32) - (local $31 v128) - (local $32 v128) - (local $33 v128) - (local $34 i32) - (local $35 i32) - (local $36 v128) - (local $37 v128) - (local $38 v128) - (local $39 v128) - (local $40 v128) - global.get $assembly/simd/H0V128 - global.set $assembly/simd/aV128 - global.get $assembly/simd/H1V128 - global.set $assembly/simd/bV128 - global.get $assembly/simd/H2V128 - global.set $assembly/simd/cV128 - global.get $assembly/simd/H3V128 - global.set $assembly/simd/dV128 - global.get $assembly/simd/H4V128 - global.set $assembly/simd/eV128 - global.get $assembly/simd/H5V128 - global.set $assembly/simd/fV128 - global.get $assembly/simd/H6V128 - global.set $assembly/simd/gV128 - global.get $assembly/simd/H7V128 - global.set $assembly/simd/hV128 - i32.const 0 - global.set $assembly/simd/i - loop $for-loop|0 - global.get $assembly/simd/i - i32.const 64 - i32.lt_s - if - global.get $assembly/simd/hV128 - block $assembly/simd/EP1V128|inlined.1 (result v128) - global.get $assembly/simd/eV128 - local.set $0 - block $assembly/simd/rotrV128|inlined.10 (result v128) - local.get $0 - local.set $1 - i32.const 6 - local.set $2 - i32.const 32 - local.get $2 - i32.sub - local.set $3 - local.get $1 - local.get $2 - i32x4.shr_u - local.set $4 - local.get $1 - local.get $3 - i32x4.shl - local.set $5 - local.get $4 - local.get $5 - v128.or - br $assembly/simd/rotrV128|inlined.10 - end - block $assembly/simd/rotrV128|inlined.11 (result v128) - local.get $0 - local.set $6 - i32.const 11 - local.set $7 - i32.const 32 - local.get $7 - i32.sub - local.set $8 - local.get $6 - local.get $7 - i32x4.shr_u - local.set $9 - local.get $6 - local.get $8 - i32x4.shl - local.set $10 - local.get $9 - local.get $10 - v128.or - br $assembly/simd/rotrV128|inlined.11 - end - v128.xor - block $assembly/simd/rotrV128|inlined.12 (result v128) - local.get $0 - local.set $11 - i32.const 25 - local.set $12 - i32.const 32 - local.get $12 - i32.sub - local.set $13 - local.get $11 - local.get $12 - i32x4.shr_u - local.set $14 - local.get $11 - local.get $13 - i32x4.shl - local.set $15 - local.get $14 - local.get $15 - v128.or - br $assembly/simd/rotrV128|inlined.12 - end - v128.xor - br $assembly/simd/EP1V128|inlined.1 - end - i32x4.add - block $assembly/simd/CHV128|inlined.1 (result v128) - global.get $assembly/simd/eV128 - local.set $16 - global.get $assembly/simd/fV128 - local.set $17 - global.get $assembly/simd/gV128 - local.set $18 - local.get $16 - local.get $17 - v128.and - local.get $16 - v128.not - local.get $18 - v128.and - v128.xor - br $assembly/simd/CHV128|inlined.1 - end - i32x4.add - block $assembly/utils/v128/getV128|inlined.6 (result v128) - global.get $assembly/simd/w64V128Ptr - local.set $19 - global.get $assembly/simd/i - local.set $20 - block $case64|1 - block $case63|1 - block $case62|1 - block $case61|1 - block $case60|1 - block $case59|1 - block $case58|1 - block $case57|1 - block $case56|1 - block $case55|1 - block $case54|1 - block $case53|1 - block $case52|1 - block $case51|1 - block $case50|1 - block $case49|1 - block $case48|1 - block $case47|1 - block $case46|1 - block $case45|1 - block $case44|1 - block $case43|1 - block $case42|1 - block $case41|1 - block $case40|1 - block $case39|1 - block $case38|1 - block $case37|1 - block $case36|1 - block $case35|1 - block $case34|1 - block $case33|1 - block $case32|1 - block $case31|1 - block $case30|1 - block $case29|1 - block $case28|1 - block $case27|1 - block $case26|1 - block $case25|1 - block $case24|1 - block $case23|1 - block $case22|1 - block $case21|1 - block $case20|1 - block $case19|1 - block $case18|1 - block $case17|1 - block $case16|1 - block $case15|1 - block $case14|1 - block $case13|1 - block $case12|1 - block $case11|1 - block $case10|1 - block $case9|1 - block $case8|1 - block $case7|1 - block $case6|1 - block $case5|1 - block $case4|1 - block $case3|1 - block $case2|1 - block $case1|1 - block $case0|1 - local.get $20 - local.set $21 - local.get $21 - i32.const 0 - i32.eq - br_if $case0|1 - local.get $21 - i32.const 1 - i32.eq - br_if $case1|1 - local.get $21 - i32.const 2 - i32.eq - br_if $case2|1 - local.get $21 - i32.const 3 - i32.eq - br_if $case3|1 - local.get $21 - i32.const 4 - i32.eq - br_if $case4|1 - local.get $21 - i32.const 5 - i32.eq - br_if $case5|1 - local.get $21 - i32.const 6 - i32.eq - br_if $case6|1 - local.get $21 - i32.const 7 - i32.eq - br_if $case7|1 - local.get $21 - i32.const 8 - i32.eq - br_if $case8|1 - local.get $21 - i32.const 9 - i32.eq - br_if $case9|1 - local.get $21 - i32.const 10 - i32.eq - br_if $case10|1 - local.get $21 - i32.const 11 - i32.eq - br_if $case11|1 - local.get $21 - i32.const 12 - i32.eq - br_if $case12|1 - local.get $21 - i32.const 13 - i32.eq - br_if $case13|1 - local.get $21 - i32.const 14 - i32.eq - br_if $case14|1 - local.get $21 - i32.const 15 - i32.eq - br_if $case15|1 - local.get $21 - i32.const 16 - i32.eq - br_if $case16|1 - local.get $21 - i32.const 17 - i32.eq - br_if $case17|1 - local.get $21 - i32.const 18 - i32.eq - br_if $case18|1 - local.get $21 - i32.const 19 - i32.eq - br_if $case19|1 - local.get $21 - i32.const 20 - i32.eq - br_if $case20|1 - local.get $21 - i32.const 21 - i32.eq - br_if $case21|1 - local.get $21 - i32.const 22 - i32.eq - br_if $case22|1 - local.get $21 - i32.const 23 - i32.eq - br_if $case23|1 - local.get $21 - i32.const 24 - i32.eq - br_if $case24|1 - local.get $21 - i32.const 25 - i32.eq - br_if $case25|1 - local.get $21 - i32.const 26 - i32.eq - br_if $case26|1 - local.get $21 - i32.const 27 - i32.eq - br_if $case27|1 - local.get $21 - i32.const 28 - i32.eq - br_if $case28|1 - local.get $21 - i32.const 29 - i32.eq - br_if $case29|1 - local.get $21 - i32.const 30 - i32.eq - br_if $case30|1 - local.get $21 - i32.const 31 - i32.eq - br_if $case31|1 - local.get $21 - i32.const 32 - i32.eq - br_if $case32|1 - local.get $21 - i32.const 33 - i32.eq - br_if $case33|1 - local.get $21 - i32.const 34 - i32.eq - br_if $case34|1 - local.get $21 - i32.const 35 - i32.eq - br_if $case35|1 - local.get $21 - i32.const 36 - i32.eq - br_if $case36|1 - local.get $21 - i32.const 37 - i32.eq - br_if $case37|1 - local.get $21 - i32.const 38 - i32.eq - br_if $case38|1 - local.get $21 - i32.const 39 - i32.eq - br_if $case39|1 - local.get $21 - i32.const 40 - i32.eq - br_if $case40|1 - local.get $21 - i32.const 41 - i32.eq - br_if $case41|1 - local.get $21 - i32.const 42 - i32.eq - br_if $case42|1 - local.get $21 - i32.const 43 - i32.eq - br_if $case43|1 - local.get $21 - i32.const 44 - i32.eq - br_if $case44|1 - local.get $21 - i32.const 45 - i32.eq - br_if $case45|1 - local.get $21 - i32.const 46 - i32.eq - br_if $case46|1 - local.get $21 - i32.const 47 - i32.eq - br_if $case47|1 - local.get $21 - i32.const 48 - i32.eq - br_if $case48|1 - local.get $21 - i32.const 49 - i32.eq - br_if $case49|1 - local.get $21 - i32.const 50 - i32.eq - br_if $case50|1 - local.get $21 - i32.const 51 - i32.eq - br_if $case51|1 - local.get $21 - i32.const 52 - i32.eq - br_if $case52|1 - local.get $21 - i32.const 53 - i32.eq - br_if $case53|1 - local.get $21 - i32.const 54 - i32.eq - br_if $case54|1 - local.get $21 - i32.const 55 - i32.eq - br_if $case55|1 - local.get $21 - i32.const 56 - i32.eq - br_if $case56|1 - local.get $21 - i32.const 57 - i32.eq - br_if $case57|1 - local.get $21 - i32.const 58 - i32.eq - br_if $case58|1 - local.get $21 - i32.const 59 - i32.eq - br_if $case59|1 - local.get $21 - i32.const 60 - i32.eq - br_if $case60|1 - local.get $21 - i32.const 61 - i32.eq - br_if $case61|1 - local.get $21 - i32.const 62 - i32.eq - br_if $case62|1 - local.get $21 - i32.const 63 - i32.eq - br_if $case63|1 - br $case64|1 - end - local.get $19 - v128.load - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.6 - end - local.get $19 - v128.load offset=1008 - br $assembly/utils/v128/getV128|inlined.6 - end - i32.const 3120 - local.get $20 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - i32x4.add - global.set $assembly/simd/t1V128 - block $assembly/simd/EP0V128|inlined.1 (result v128) - global.get $assembly/simd/aV128 - local.set $22 - block $assembly/simd/rotrV128|inlined.13 (result v128) - local.get $22 - local.set $23 - i32.const 2 - local.set $24 - i32.const 32 - local.get $24 - i32.sub - local.set $25 - local.get $23 - local.get $24 - i32x4.shr_u - local.set $26 - local.get $23 - local.get $25 - i32x4.shl - local.set $27 - local.get $26 - local.get $27 - v128.or - br $assembly/simd/rotrV128|inlined.13 - end - block $assembly/simd/rotrV128|inlined.14 (result v128) - local.get $22 - local.set $28 - i32.const 13 - local.set $29 - i32.const 32 - local.get $29 - i32.sub - local.set $30 - local.get $28 - local.get $29 - i32x4.shr_u - local.set $31 - local.get $28 - local.get $30 - i32x4.shl - local.set $32 - local.get $31 - local.get $32 - v128.or - br $assembly/simd/rotrV128|inlined.14 - end - v128.xor - block $assembly/simd/rotrV128|inlined.15 (result v128) - local.get $22 - local.set $33 - i32.const 22 - local.set $34 - i32.const 32 - local.get $34 - i32.sub - local.set $35 - local.get $33 - local.get $34 - i32x4.shr_u - local.set $36 - local.get $33 - local.get $35 - i32x4.shl - local.set $37 - local.get $36 - local.get $37 - v128.or - br $assembly/simd/rotrV128|inlined.15 - end - v128.xor - br $assembly/simd/EP0V128|inlined.1 - end - block $assembly/simd/MAJV128|inlined.1 (result v128) - global.get $assembly/simd/aV128 - local.set $38 - global.get $assembly/simd/bV128 - local.set $39 - global.get $assembly/simd/cV128 - local.set $40 - local.get $38 - local.get $39 - v128.and - local.get $38 - local.get $40 - v128.and - v128.xor - local.get $39 - local.get $40 - v128.and - v128.xor - br $assembly/simd/MAJV128|inlined.1 - end - i32x4.add - global.set $assembly/simd/t2V128 - global.get $assembly/simd/gV128 - global.set $assembly/simd/hV128 - global.get $assembly/simd/fV128 - global.set $assembly/simd/gV128 - global.get $assembly/simd/eV128 - global.set $assembly/simd/fV128 - global.get $assembly/simd/dV128 - global.get $assembly/simd/t1V128 - i32x4.add - global.set $assembly/simd/eV128 - global.get $assembly/simd/cV128 - global.set $assembly/simd/dV128 - global.get $assembly/simd/bV128 - global.set $assembly/simd/cV128 - global.get $assembly/simd/aV128 - global.set $assembly/simd/bV128 - global.get $assembly/simd/t1V128 - global.get $assembly/simd/t2V128 - i32x4.add - global.set $assembly/simd/aV128 - global.get $assembly/simd/i - i32.const 1 - i32.add - global.set $assembly/simd/i - br $for-loop|0 - end - end - global.get $assembly/simd/H0V128 - global.get $assembly/simd/aV128 - i32x4.add - global.set $assembly/simd/H0V128 - global.get $assembly/simd/H1V128 - global.get $assembly/simd/bV128 - i32x4.add - global.set $assembly/simd/H1V128 - global.get $assembly/simd/H2V128 - global.get $assembly/simd/cV128 - i32x4.add - global.set $assembly/simd/H2V128 - global.get $assembly/simd/H3V128 - global.get $assembly/simd/dV128 - i32x4.add - global.set $assembly/simd/H3V128 - global.get $assembly/simd/H4V128 - global.get $assembly/simd/eV128 - i32x4.add - global.set $assembly/simd/H4V128 - global.get $assembly/simd/H5V128 - global.get $assembly/simd/fV128 - i32x4.add - global.set $assembly/simd/H5V128 - global.get $assembly/simd/H6V128 - global.get $assembly/simd/gV128 - i32x4.add - global.set $assembly/simd/H6V128 - global.get $assembly/simd/H7V128 - global.get $assembly/simd/hV128 - i32x4.add - global.set $assembly/simd/H7V128 - ) - (func $assembly/simd/digest64V128 (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 v128) - (local $10 v128) - (local $11 i32) - (local $12 i32) - (local $13 v128) - (local $14 v128) - (local $15 v128) - (local $16 i32) - (local $17 i32) - (local $18 v128) - (local $19 v128) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (local $24 i32) - (local $25 i32) - (local $26 v128) - (local $27 v128) - (local $28 i32) - (local $29 i32) - (local $30 v128) - (local $31 v128) - (local $32 v128) - (local $33 i32) - (local $34 i32) - (local $35 v128) - (local $36 v128) - (local $37 i32) - (local $38 i32) - (local $39 i32) - (local $40 i32) - (local $41 i32) - (local $42 v128) - (local $43 i32) - (local $44 v128) - (local $45 v128) - (local $46 i32) - (local $47 i32) - (local $48 v128) - (local $49 v128) - (local $50 v128) - (local $51 i32) - (local $52 i32) - (local $53 v128) - (local $54 v128) - (local $55 v128) - (local $56 i32) - (local $57 i32) - (local $58 v128) - (local $59 v128) - (local $60 v128) - (local $61 v128) - (local $62 v128) - (local $63 i32) - (local $64 i32) - (local $65 i32) - (local $66 v128) - (local $67 v128) - (local $68 i32) - (local $69 i32) - (local $70 v128) - (local $71 v128) - (local $72 v128) - (local $73 i32) - (local $74 i32) - (local $75 v128) - (local $76 v128) - (local $77 v128) - (local $78 i32) - (local $79 i32) - (local $80 v128) - (local $81 v128) - (local $82 v128) - (local $83 v128) - (local $84 v128) - (local $85 i32) - (local $86 i32) - (local $87 i32) - (local $88 i32) - (local $89 i32) - (local $90 i32) - (local $91 i32) - (local $92 i32) - (local $93 i32) - (local $94 i32) - (local $95 i32) - (local $96 i32) - (local $97 i32) - (local $98 i32) - (local $99 i32) - (local $100 i32) - (local $101 i32) - (local $102 i32) - (local $103 i32) - (local $104 i32) - (local $105 i32) - (local $106 i32) - (local $107 i32) - (local $108 i32) - (local $109 i32) - (local $110 i32) - (local $111 i32) - (local $112 i32) - (local $113 i32) - (local $114 i32) - (local $115 i32) - (local $116 i32) - (local $117 i32) - (local $118 i32) - (local $119 i32) - (local $120 i32) - (local $121 i32) - (local $122 i32) - (local $123 i32) - (local $124 i32) - (local $125 i32) - (local $126 i32) - (local $127 i32) - (local $128 i32) - (local $129 i32) - (local $130 i32) - (local $131 i32) - (local $132 i32) - (local $133 i32) - (local $134 i32) - (local $135 i32) - (local $136 i32) - (local $137 i32) - (local $138 i32) - (local $139 i32) - (local $140 i32) - (local $141 i32) - (local $142 i32) - (local $143 i32) - (local $144 i32) - (local $145 i32) - (local $146 i32) - (local $147 i32) - (local $148 i32) - (local $149 i32) - (local $150 i32) - (local $151 i32) - (local $152 i32) - (local $153 i32) - (local $154 i32) - (local $155 i32) - (local $156 i32) - (local $157 i32) - (local $158 i32) - (local $159 i32) - (local $160 i32) - (local $161 i32) - (local $162 i32) - (local $163 i32) - (local $164 i32) - (local $165 i32) - (local $166 i32) - (local $167 i32) - (local $168 i32) - (local $169 i32) - (local $170 i32) - (local $171 i32) - (local $172 i32) - (local $173 i32) - (local $174 i32) - (local $175 i32) - (local $176 i32) - (local $177 i32) - (local $178 i32) - (local $179 i32) - (local $180 i32) - call $assembly/simd/initV128 - local.get $0 - local.set $2 - global.get $assembly/simd/H0V128 - global.set $assembly/simd/aV128 - global.get $assembly/simd/H1V128 - global.set $assembly/simd/bV128 - global.get $assembly/simd/H2V128 - global.set $assembly/simd/cV128 - global.get $assembly/simd/H3V128 - global.set $assembly/simd/dV128 - global.get $assembly/simd/H4V128 - global.set $assembly/simd/eV128 - global.get $assembly/simd/H5V128 - global.set $assembly/simd/fV128 - global.get $assembly/simd/H6V128 - global.set $assembly/simd/gV128 - global.get $assembly/simd/H7V128 - global.set $assembly/simd/hV128 - i32.const 0 - global.set $assembly/simd/i - loop $for-loop|0 - global.get $assembly/simd/i - i32.const 64 - i32.lt_s - if - global.get $assembly/simd/i - i32.const 16 - i32.lt_s - if (result v128) - block $assembly/utils/v128/getV128|inlined.0 (result v128) - local.get $2 - local.set $3 - global.get $assembly/simd/i - local.set $4 - block $case64|1 - block $case63|1 - block $case62|1 - block $case61|1 - block $case60|1 - block $case59|1 - block $case58|1 - block $case57|1 - block $case56|1 - block $case55|1 - block $case54|1 - block $case53|1 - block $case52|1 - block $case51|1 - block $case50|1 - block $case49|1 - block $case48|1 - block $case47|1 - block $case46|1 - block $case45|1 - block $case44|1 - block $case43|1 - block $case42|1 - block $case41|1 - block $case40|1 - block $case39|1 - block $case38|1 - block $case37|1 - block $case36|1 - block $case35|1 - block $case34|1 - block $case33|1 - block $case32|1 - block $case31|1 - block $case30|1 - block $case29|1 - block $case28|1 - block $case27|1 - block $case26|1 - block $case25|1 - block $case24|1 - block $case23|1 - block $case22|1 - block $case21|1 - block $case20|1 - block $case19|1 - block $case18|1 - block $case17|1 - block $case16|1 - block $case15|1 - block $case14|1 - block $case13|1 - block $case12|1 - block $case11|1 - block $case10|1 - block $case9|1 - block $case8|1 - block $case7|1 - block $case6|1 - block $case5|1 - block $case4|1 - block $case3|1 - block $case2|1 - block $case1|1 - block $case0|1 - local.get $4 - local.set $5 - local.get $5 - i32.const 0 - i32.eq - br_if $case0|1 - local.get $5 - i32.const 1 - i32.eq - br_if $case1|1 - local.get $5 - i32.const 2 - i32.eq - br_if $case2|1 - local.get $5 - i32.const 3 - i32.eq - br_if $case3|1 - local.get $5 - i32.const 4 - i32.eq - br_if $case4|1 - local.get $5 - i32.const 5 - i32.eq - br_if $case5|1 - local.get $5 - i32.const 6 - i32.eq - br_if $case6|1 - local.get $5 - i32.const 7 - i32.eq - br_if $case7|1 - local.get $5 - i32.const 8 - i32.eq - br_if $case8|1 - local.get $5 - i32.const 9 - i32.eq - br_if $case9|1 - local.get $5 - i32.const 10 - i32.eq - br_if $case10|1 - local.get $5 - i32.const 11 - i32.eq - br_if $case11|1 - local.get $5 - i32.const 12 - i32.eq - br_if $case12|1 - local.get $5 - i32.const 13 - i32.eq - br_if $case13|1 - local.get $5 - i32.const 14 - i32.eq - br_if $case14|1 - local.get $5 - i32.const 15 - i32.eq - br_if $case15|1 - local.get $5 - i32.const 16 - i32.eq - br_if $case16|1 - local.get $5 - i32.const 17 - i32.eq - br_if $case17|1 - local.get $5 - i32.const 18 - i32.eq - br_if $case18|1 - local.get $5 - i32.const 19 - i32.eq - br_if $case19|1 - local.get $5 - i32.const 20 - i32.eq - br_if $case20|1 - local.get $5 - i32.const 21 - i32.eq - br_if $case21|1 - local.get $5 - i32.const 22 - i32.eq - br_if $case22|1 - local.get $5 - i32.const 23 - i32.eq - br_if $case23|1 - local.get $5 - i32.const 24 - i32.eq - br_if $case24|1 - local.get $5 - i32.const 25 - i32.eq - br_if $case25|1 - local.get $5 - i32.const 26 - i32.eq - br_if $case26|1 - local.get $5 - i32.const 27 - i32.eq - br_if $case27|1 - local.get $5 - i32.const 28 - i32.eq - br_if $case28|1 - local.get $5 - i32.const 29 - i32.eq - br_if $case29|1 - local.get $5 - i32.const 30 - i32.eq - br_if $case30|1 - local.get $5 - i32.const 31 - i32.eq - br_if $case31|1 - local.get $5 - i32.const 32 - i32.eq - br_if $case32|1 - local.get $5 - i32.const 33 - i32.eq - br_if $case33|1 - local.get $5 - i32.const 34 - i32.eq - br_if $case34|1 - local.get $5 - i32.const 35 - i32.eq - br_if $case35|1 - local.get $5 - i32.const 36 - i32.eq - br_if $case36|1 - local.get $5 - i32.const 37 - i32.eq - br_if $case37|1 - local.get $5 - i32.const 38 - i32.eq - br_if $case38|1 - local.get $5 - i32.const 39 - i32.eq - br_if $case39|1 - local.get $5 - i32.const 40 - i32.eq - br_if $case40|1 - local.get $5 - i32.const 41 - i32.eq - br_if $case41|1 - local.get $5 - i32.const 42 - i32.eq - br_if $case42|1 - local.get $5 - i32.const 43 - i32.eq - br_if $case43|1 - local.get $5 - i32.const 44 - i32.eq - br_if $case44|1 - local.get $5 - i32.const 45 - i32.eq - br_if $case45|1 - local.get $5 - i32.const 46 - i32.eq - br_if $case46|1 - local.get $5 - i32.const 47 - i32.eq - br_if $case47|1 - local.get $5 - i32.const 48 - i32.eq - br_if $case48|1 - local.get $5 - i32.const 49 - i32.eq - br_if $case49|1 - local.get $5 - i32.const 50 - i32.eq - br_if $case50|1 - local.get $5 - i32.const 51 - i32.eq - br_if $case51|1 - local.get $5 - i32.const 52 - i32.eq - br_if $case52|1 - local.get $5 - i32.const 53 - i32.eq - br_if $case53|1 - local.get $5 - i32.const 54 - i32.eq - br_if $case54|1 - local.get $5 - i32.const 55 - i32.eq - br_if $case55|1 - local.get $5 - i32.const 56 - i32.eq - br_if $case56|1 - local.get $5 - i32.const 57 - i32.eq - br_if $case57|1 - local.get $5 - i32.const 58 - i32.eq - br_if $case58|1 - local.get $5 - i32.const 59 - i32.eq - br_if $case59|1 - local.get $5 - i32.const 60 - i32.eq - br_if $case60|1 - local.get $5 - i32.const 61 - i32.eq - br_if $case61|1 - local.get $5 - i32.const 62 - i32.eq - br_if $case62|1 - local.get $5 - i32.const 63 - i32.eq - br_if $case63|1 - br $case64|1 - end - local.get $3 - v128.load - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.0 - end - local.get $3 - v128.load offset=1008 - br $assembly/utils/v128/getV128|inlined.0 - end - i32.const 3120 - local.get $4 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - else - block $assembly/simd/SIG1V128|inlined.0 (result v128) - block $assembly/utils/v128/getV128|inlined.1 (result v128) - local.get $2 - local.set $6 - global.get $assembly/simd/i - i32.const 2 - i32.sub - local.set $7 - block $case64|2 - block $case63|2 - block $case62|2 - block $case61|2 - block $case60|2 - block $case59|2 - block $case58|2 - block $case57|2 - block $case56|2 - block $case55|2 - block $case54|2 - block $case53|2 - block $case52|2 - block $case51|2 - block $case50|2 - block $case49|2 - block $case48|2 - block $case47|2 - block $case46|2 - block $case45|2 - block $case44|2 - block $case43|2 - block $case42|2 - block $case41|2 - block $case40|2 - block $case39|2 - block $case38|2 - block $case37|2 - block $case36|2 - block $case35|2 - block $case34|2 - block $case33|2 - block $case32|2 - block $case31|2 - block $case30|2 - block $case29|2 - block $case28|2 - block $case27|2 - block $case26|2 - block $case25|2 - block $case24|2 - block $case23|2 - block $case22|2 - block $case21|2 - block $case20|2 - block $case19|2 - block $case18|2 - block $case17|2 - block $case16|2 - block $case15|2 - block $case14|2 - block $case13|2 - block $case12|2 - block $case11|2 - block $case10|2 - block $case9|2 - block $case8|2 - block $case7|2 - block $case6|2 - block $case5|2 - block $case4|2 - block $case3|2 - block $case2|2 - block $case1|2 - block $case0|2 - local.get $7 - local.set $8 - local.get $8 - i32.const 0 - i32.eq - br_if $case0|2 - local.get $8 - i32.const 1 - i32.eq - br_if $case1|2 - local.get $8 - i32.const 2 - i32.eq - br_if $case2|2 - local.get $8 - i32.const 3 - i32.eq - br_if $case3|2 - local.get $8 - i32.const 4 - i32.eq - br_if $case4|2 - local.get $8 - i32.const 5 - i32.eq - br_if $case5|2 - local.get $8 - i32.const 6 - i32.eq - br_if $case6|2 - local.get $8 - i32.const 7 - i32.eq - br_if $case7|2 - local.get $8 - i32.const 8 - i32.eq - br_if $case8|2 - local.get $8 - i32.const 9 - i32.eq - br_if $case9|2 - local.get $8 - i32.const 10 - i32.eq - br_if $case10|2 - local.get $8 - i32.const 11 - i32.eq - br_if $case11|2 - local.get $8 - i32.const 12 - i32.eq - br_if $case12|2 - local.get $8 - i32.const 13 - i32.eq - br_if $case13|2 - local.get $8 - i32.const 14 - i32.eq - br_if $case14|2 - local.get $8 - i32.const 15 - i32.eq - br_if $case15|2 - local.get $8 - i32.const 16 - i32.eq - br_if $case16|2 - local.get $8 - i32.const 17 - i32.eq - br_if $case17|2 - local.get $8 - i32.const 18 - i32.eq - br_if $case18|2 - local.get $8 - i32.const 19 - i32.eq - br_if $case19|2 - local.get $8 - i32.const 20 - i32.eq - br_if $case20|2 - local.get $8 - i32.const 21 - i32.eq - br_if $case21|2 - local.get $8 - i32.const 22 - i32.eq - br_if $case22|2 - local.get $8 - i32.const 23 - i32.eq - br_if $case23|2 - local.get $8 - i32.const 24 - i32.eq - br_if $case24|2 - local.get $8 - i32.const 25 - i32.eq - br_if $case25|2 - local.get $8 - i32.const 26 - i32.eq - br_if $case26|2 - local.get $8 - i32.const 27 - i32.eq - br_if $case27|2 - local.get $8 - i32.const 28 - i32.eq - br_if $case28|2 - local.get $8 - i32.const 29 - i32.eq - br_if $case29|2 - local.get $8 - i32.const 30 - i32.eq - br_if $case30|2 - local.get $8 - i32.const 31 - i32.eq - br_if $case31|2 - local.get $8 - i32.const 32 - i32.eq - br_if $case32|2 - local.get $8 - i32.const 33 - i32.eq - br_if $case33|2 - local.get $8 - i32.const 34 - i32.eq - br_if $case34|2 - local.get $8 - i32.const 35 - i32.eq - br_if $case35|2 - local.get $8 - i32.const 36 - i32.eq - br_if $case36|2 - local.get $8 - i32.const 37 - i32.eq - br_if $case37|2 - local.get $8 - i32.const 38 - i32.eq - br_if $case38|2 - local.get $8 - i32.const 39 - i32.eq - br_if $case39|2 - local.get $8 - i32.const 40 - i32.eq - br_if $case40|2 - local.get $8 - i32.const 41 - i32.eq - br_if $case41|2 - local.get $8 - i32.const 42 - i32.eq - br_if $case42|2 - local.get $8 - i32.const 43 - i32.eq - br_if $case43|2 - local.get $8 - i32.const 44 - i32.eq - br_if $case44|2 - local.get $8 - i32.const 45 - i32.eq - br_if $case45|2 - local.get $8 - i32.const 46 - i32.eq - br_if $case46|2 - local.get $8 - i32.const 47 - i32.eq - br_if $case47|2 - local.get $8 - i32.const 48 - i32.eq - br_if $case48|2 - local.get $8 - i32.const 49 - i32.eq - br_if $case49|2 - local.get $8 - i32.const 50 - i32.eq - br_if $case50|2 - local.get $8 - i32.const 51 - i32.eq - br_if $case51|2 - local.get $8 - i32.const 52 - i32.eq - br_if $case52|2 - local.get $8 - i32.const 53 - i32.eq - br_if $case53|2 - local.get $8 - i32.const 54 - i32.eq - br_if $case54|2 - local.get $8 - i32.const 55 - i32.eq - br_if $case55|2 - local.get $8 - i32.const 56 - i32.eq - br_if $case56|2 - local.get $8 - i32.const 57 - i32.eq - br_if $case57|2 - local.get $8 - i32.const 58 - i32.eq - br_if $case58|2 - local.get $8 - i32.const 59 - i32.eq - br_if $case59|2 - local.get $8 - i32.const 60 - i32.eq - br_if $case60|2 - local.get $8 - i32.const 61 - i32.eq - br_if $case61|2 - local.get $8 - i32.const 62 - i32.eq - br_if $case62|2 - local.get $8 - i32.const 63 - i32.eq - br_if $case63|2 - br $case64|2 - end - local.get $6 - v128.load - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.1 - end - local.get $6 - v128.load offset=1008 - br $assembly/utils/v128/getV128|inlined.1 - end - i32.const 3120 - local.get $7 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - local.set $9 - block $assembly/simd/rotrV128|inlined.0 (result v128) - local.get $9 - local.set $10 - i32.const 17 - local.set $11 - i32.const 32 - local.get $11 - i32.sub - local.set $12 - local.get $10 - local.get $11 - i32x4.shr_u - local.set $13 - local.get $10 - local.get $12 - i32x4.shl - local.set $14 - local.get $13 - local.get $14 - v128.or - br $assembly/simd/rotrV128|inlined.0 - end - block $assembly/simd/rotrV128|inlined.1 (result v128) - local.get $9 - local.set $15 - i32.const 19 - local.set $16 - i32.const 32 - local.get $16 - i32.sub - local.set $17 - local.get $15 - local.get $16 - i32x4.shr_u - local.set $18 - local.get $15 - local.get $17 - i32x4.shl - local.set $19 - local.get $18 - local.get $19 - v128.or - br $assembly/simd/rotrV128|inlined.1 - end - v128.xor - local.get $9 - i32.const 10 - i32x4.shr_u - v128.xor - br $assembly/simd/SIG1V128|inlined.0 - end - block $assembly/utils/v128/getV128|inlined.2 (result v128) - local.get $2 - local.set $20 - global.get $assembly/simd/i - i32.const 7 - i32.sub - local.set $21 - block $case64|3 - block $case63|3 - block $case62|3 - block $case61|3 - block $case60|3 - block $case59|3 - block $case58|3 - block $case57|3 - block $case56|3 - block $case55|3 - block $case54|3 - block $case53|3 - block $case52|3 - block $case51|3 - block $case50|3 - block $case49|3 - block $case48|3 - block $case47|3 - block $case46|3 - block $case45|3 - block $case44|3 - block $case43|3 - block $case42|3 - block $case41|3 - block $case40|3 - block $case39|3 - block $case38|3 - block $case37|3 - block $case36|3 - block $case35|3 - block $case34|3 - block $case33|3 - block $case32|3 - block $case31|3 - block $case30|3 - block $case29|3 - block $case28|3 - block $case27|3 - block $case26|3 - block $case25|3 - block $case24|3 - block $case23|3 - block $case22|3 - block $case21|3 - block $case20|3 - block $case19|3 - block $case18|3 - block $case17|3 - block $case16|3 - block $case15|3 - block $case14|3 - block $case13|3 - block $case12|3 - block $case11|3 - block $case10|3 - block $case9|3 - block $case8|3 - block $case7|3 - block $case6|3 - block $case5|3 - block $case4|3 - block $case3|3 - block $case2|3 - block $case1|3 - block $case0|3 - local.get $21 - local.set $22 - local.get $22 - i32.const 0 - i32.eq - br_if $case0|3 - local.get $22 - i32.const 1 - i32.eq - br_if $case1|3 - local.get $22 - i32.const 2 - i32.eq - br_if $case2|3 - local.get $22 - i32.const 3 - i32.eq - br_if $case3|3 - local.get $22 - i32.const 4 - i32.eq - br_if $case4|3 - local.get $22 - i32.const 5 - i32.eq - br_if $case5|3 - local.get $22 - i32.const 6 - i32.eq - br_if $case6|3 - local.get $22 - i32.const 7 - i32.eq - br_if $case7|3 - local.get $22 - i32.const 8 - i32.eq - br_if $case8|3 - local.get $22 - i32.const 9 - i32.eq - br_if $case9|3 - local.get $22 - i32.const 10 - i32.eq - br_if $case10|3 - local.get $22 - i32.const 11 - i32.eq - br_if $case11|3 - local.get $22 - i32.const 12 - i32.eq - br_if $case12|3 - local.get $22 - i32.const 13 - i32.eq - br_if $case13|3 - local.get $22 - i32.const 14 - i32.eq - br_if $case14|3 - local.get $22 - i32.const 15 - i32.eq - br_if $case15|3 - local.get $22 - i32.const 16 - i32.eq - br_if $case16|3 - local.get $22 - i32.const 17 - i32.eq - br_if $case17|3 - local.get $22 - i32.const 18 - i32.eq - br_if $case18|3 - local.get $22 - i32.const 19 - i32.eq - br_if $case19|3 - local.get $22 - i32.const 20 - i32.eq - br_if $case20|3 - local.get $22 - i32.const 21 - i32.eq - br_if $case21|3 - local.get $22 - i32.const 22 - i32.eq - br_if $case22|3 - local.get $22 - i32.const 23 - i32.eq - br_if $case23|3 - local.get $22 - i32.const 24 - i32.eq - br_if $case24|3 - local.get $22 - i32.const 25 - i32.eq - br_if $case25|3 - local.get $22 - i32.const 26 - i32.eq - br_if $case26|3 - local.get $22 - i32.const 27 - i32.eq - br_if $case27|3 - local.get $22 - i32.const 28 - i32.eq - br_if $case28|3 - local.get $22 - i32.const 29 - i32.eq - br_if $case29|3 - local.get $22 - i32.const 30 - i32.eq - br_if $case30|3 - local.get $22 - i32.const 31 - i32.eq - br_if $case31|3 - local.get $22 - i32.const 32 - i32.eq - br_if $case32|3 - local.get $22 - i32.const 33 - i32.eq - br_if $case33|3 - local.get $22 - i32.const 34 - i32.eq - br_if $case34|3 - local.get $22 - i32.const 35 - i32.eq - br_if $case35|3 - local.get $22 - i32.const 36 - i32.eq - br_if $case36|3 - local.get $22 - i32.const 37 - i32.eq - br_if $case37|3 - local.get $22 - i32.const 38 - i32.eq - br_if $case38|3 - local.get $22 - i32.const 39 - i32.eq - br_if $case39|3 - local.get $22 - i32.const 40 - i32.eq - br_if $case40|3 - local.get $22 - i32.const 41 - i32.eq - br_if $case41|3 - local.get $22 - i32.const 42 - i32.eq - br_if $case42|3 - local.get $22 - i32.const 43 - i32.eq - br_if $case43|3 - local.get $22 - i32.const 44 - i32.eq - br_if $case44|3 - local.get $22 - i32.const 45 - i32.eq - br_if $case45|3 - local.get $22 - i32.const 46 - i32.eq - br_if $case46|3 - local.get $22 - i32.const 47 - i32.eq - br_if $case47|3 - local.get $22 - i32.const 48 - i32.eq - br_if $case48|3 - local.get $22 - i32.const 49 - i32.eq - br_if $case49|3 - local.get $22 - i32.const 50 - i32.eq - br_if $case50|3 - local.get $22 - i32.const 51 - i32.eq - br_if $case51|3 - local.get $22 - i32.const 52 - i32.eq - br_if $case52|3 - local.get $22 - i32.const 53 - i32.eq - br_if $case53|3 - local.get $22 - i32.const 54 - i32.eq - br_if $case54|3 - local.get $22 - i32.const 55 - i32.eq - br_if $case55|3 - local.get $22 - i32.const 56 - i32.eq - br_if $case56|3 - local.get $22 - i32.const 57 - i32.eq - br_if $case57|3 - local.get $22 - i32.const 58 - i32.eq - br_if $case58|3 - local.get $22 - i32.const 59 - i32.eq - br_if $case59|3 - local.get $22 - i32.const 60 - i32.eq - br_if $case60|3 - local.get $22 - i32.const 61 - i32.eq - br_if $case61|3 - local.get $22 - i32.const 62 - i32.eq - br_if $case62|3 - local.get $22 - i32.const 63 - i32.eq - br_if $case63|3 - br $case64|3 - end - local.get $20 - v128.load - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.2 - end - local.get $20 - v128.load offset=1008 - br $assembly/utils/v128/getV128|inlined.2 - end - i32.const 3120 - local.get $21 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - i32x4.add - block $assembly/simd/SIG0V128|inlined.0 (result v128) - block $assembly/utils/v128/getV128|inlined.3 (result v128) - local.get $2 - local.set $23 - global.get $assembly/simd/i - i32.const 15 - i32.sub - local.set $24 - block $case64|4 - block $case63|4 - block $case62|4 - block $case61|4 - block $case60|4 - block $case59|4 - block $case58|4 - block $case57|4 - block $case56|4 - block $case55|4 - block $case54|4 - block $case53|4 - block $case52|4 - block $case51|4 - block $case50|4 - block $case49|4 - block $case48|4 - block $case47|4 - block $case46|4 - block $case45|4 - block $case44|4 - block $case43|4 - block $case42|4 - block $case41|4 - block $case40|4 - block $case39|4 - block $case38|4 - block $case37|4 - block $case36|4 - block $case35|4 - block $case34|4 - block $case33|4 - block $case32|4 - block $case31|4 - block $case30|4 - block $case29|4 - block $case28|4 - block $case27|4 - block $case26|4 - block $case25|4 - block $case24|4 - block $case23|4 - block $case22|4 - block $case21|4 - block $case20|4 - block $case19|4 - block $case18|4 - block $case17|4 - block $case16|4 - block $case15|4 - block $case14|4 - block $case13|4 - block $case12|4 - block $case11|4 - block $case10|4 - block $case9|4 - block $case8|4 - block $case7|4 - block $case6|4 - block $case5|4 - block $case4|4 - block $case3|4 - block $case2|4 - block $case1|4 - block $case0|4 - local.get $24 - local.set $25 - local.get $25 - i32.const 0 - i32.eq - br_if $case0|4 - local.get $25 - i32.const 1 - i32.eq - br_if $case1|4 - local.get $25 - i32.const 2 - i32.eq - br_if $case2|4 - local.get $25 - i32.const 3 - i32.eq - br_if $case3|4 - local.get $25 - i32.const 4 - i32.eq - br_if $case4|4 - local.get $25 - i32.const 5 - i32.eq - br_if $case5|4 - local.get $25 - i32.const 6 - i32.eq - br_if $case6|4 - local.get $25 - i32.const 7 - i32.eq - br_if $case7|4 - local.get $25 - i32.const 8 - i32.eq - br_if $case8|4 - local.get $25 - i32.const 9 - i32.eq - br_if $case9|4 - local.get $25 - i32.const 10 - i32.eq - br_if $case10|4 - local.get $25 - i32.const 11 - i32.eq - br_if $case11|4 - local.get $25 - i32.const 12 - i32.eq - br_if $case12|4 - local.get $25 - i32.const 13 - i32.eq - br_if $case13|4 - local.get $25 - i32.const 14 - i32.eq - br_if $case14|4 - local.get $25 - i32.const 15 - i32.eq - br_if $case15|4 - local.get $25 - i32.const 16 - i32.eq - br_if $case16|4 - local.get $25 - i32.const 17 - i32.eq - br_if $case17|4 - local.get $25 - i32.const 18 - i32.eq - br_if $case18|4 - local.get $25 - i32.const 19 - i32.eq - br_if $case19|4 - local.get $25 - i32.const 20 - i32.eq - br_if $case20|4 - local.get $25 - i32.const 21 - i32.eq - br_if $case21|4 - local.get $25 - i32.const 22 - i32.eq - br_if $case22|4 - local.get $25 - i32.const 23 - i32.eq - br_if $case23|4 - local.get $25 - i32.const 24 - i32.eq - br_if $case24|4 - local.get $25 - i32.const 25 - i32.eq - br_if $case25|4 - local.get $25 - i32.const 26 - i32.eq - br_if $case26|4 - local.get $25 - i32.const 27 - i32.eq - br_if $case27|4 - local.get $25 - i32.const 28 - i32.eq - br_if $case28|4 - local.get $25 - i32.const 29 - i32.eq - br_if $case29|4 - local.get $25 - i32.const 30 - i32.eq - br_if $case30|4 - local.get $25 - i32.const 31 - i32.eq - br_if $case31|4 - local.get $25 - i32.const 32 - i32.eq - br_if $case32|4 - local.get $25 - i32.const 33 - i32.eq - br_if $case33|4 - local.get $25 - i32.const 34 - i32.eq - br_if $case34|4 - local.get $25 - i32.const 35 - i32.eq - br_if $case35|4 - local.get $25 - i32.const 36 - i32.eq - br_if $case36|4 - local.get $25 - i32.const 37 - i32.eq - br_if $case37|4 - local.get $25 - i32.const 38 - i32.eq - br_if $case38|4 - local.get $25 - i32.const 39 - i32.eq - br_if $case39|4 - local.get $25 - i32.const 40 - i32.eq - br_if $case40|4 - local.get $25 - i32.const 41 - i32.eq - br_if $case41|4 - local.get $25 - i32.const 42 - i32.eq - br_if $case42|4 - local.get $25 - i32.const 43 - i32.eq - br_if $case43|4 - local.get $25 - i32.const 44 - i32.eq - br_if $case44|4 - local.get $25 - i32.const 45 - i32.eq - br_if $case45|4 - local.get $25 - i32.const 46 - i32.eq - br_if $case46|4 - local.get $25 - i32.const 47 - i32.eq - br_if $case47|4 - local.get $25 - i32.const 48 - i32.eq - br_if $case48|4 - local.get $25 - i32.const 49 - i32.eq - br_if $case49|4 - local.get $25 - i32.const 50 - i32.eq - br_if $case50|4 - local.get $25 - i32.const 51 - i32.eq - br_if $case51|4 - local.get $25 - i32.const 52 - i32.eq - br_if $case52|4 - local.get $25 - i32.const 53 - i32.eq - br_if $case53|4 - local.get $25 - i32.const 54 - i32.eq - br_if $case54|4 - local.get $25 - i32.const 55 - i32.eq - br_if $case55|4 - local.get $25 - i32.const 56 - i32.eq - br_if $case56|4 - local.get $25 - i32.const 57 - i32.eq - br_if $case57|4 - local.get $25 - i32.const 58 - i32.eq - br_if $case58|4 - local.get $25 - i32.const 59 - i32.eq - br_if $case59|4 - local.get $25 - i32.const 60 - i32.eq - br_if $case60|4 - local.get $25 - i32.const 61 - i32.eq - br_if $case61|4 - local.get $25 - i32.const 62 - i32.eq - br_if $case62|4 - local.get $25 - i32.const 63 - i32.eq - br_if $case63|4 - br $case64|4 - end - local.get $23 - v128.load - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.3 - end - local.get $23 - v128.load offset=1008 - br $assembly/utils/v128/getV128|inlined.3 - end - i32.const 3120 - local.get $24 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - local.set $26 - block $assembly/simd/rotrV128|inlined.2 (result v128) - local.get $26 - local.set $27 - i32.const 7 - local.set $28 - i32.const 32 - local.get $28 - i32.sub - local.set $29 - local.get $27 - local.get $28 - i32x4.shr_u - local.set $30 - local.get $27 - local.get $29 - i32x4.shl - local.set $31 - local.get $30 - local.get $31 - v128.or - br $assembly/simd/rotrV128|inlined.2 - end - block $assembly/simd/rotrV128|inlined.3 (result v128) - local.get $26 - local.set $32 - i32.const 18 - local.set $33 - i32.const 32 - local.get $33 - i32.sub - local.set $34 - local.get $32 - local.get $33 - i32x4.shr_u - local.set $35 - local.get $32 - local.get $34 - i32x4.shl - local.set $36 - local.get $35 - local.get $36 - v128.or - br $assembly/simd/rotrV128|inlined.3 - end - v128.xor - local.get $26 - i32.const 3 - i32x4.shr_u - v128.xor - br $assembly/simd/SIG0V128|inlined.0 - end - i32x4.add - block $assembly/utils/v128/getV128|inlined.4 (result v128) - local.get $2 - local.set $37 - global.get $assembly/simd/i - i32.const 16 - i32.sub - local.set $38 - block $case64|5 - block $case63|5 - block $case62|5 - block $case61|5 - block $case60|5 - block $case59|5 - block $case58|5 - block $case57|5 - block $case56|5 - block $case55|5 - block $case54|5 - block $case53|5 - block $case52|5 - block $case51|5 - block $case50|5 - block $case49|5 - block $case48|5 - block $case47|5 - block $case46|5 - block $case45|5 - block $case44|5 - block $case43|5 - block $case42|5 - block $case41|5 - block $case40|5 - block $case39|5 - block $case38|5 - block $case37|5 - block $case36|5 - block $case35|5 - block $case34|5 - block $case33|5 - block $case32|5 - block $case31|5 - block $case30|5 - block $case29|5 - block $case28|5 - block $case27|5 - block $case26|5 - block $case25|5 - block $case24|5 - block $case23|5 - block $case22|5 - block $case21|5 - block $case20|5 - block $case19|5 - block $case18|5 - block $case17|5 - block $case16|5 - block $case15|5 - block $case14|5 - block $case13|5 - block $case12|5 - block $case11|5 - block $case10|5 - block $case9|5 - block $case8|5 - block $case7|5 - block $case6|5 - block $case5|5 - block $case4|5 - block $case3|5 - block $case2|5 - block $case1|5 - block $case0|5 - local.get $38 - local.set $39 - local.get $39 - i32.const 0 - i32.eq - br_if $case0|5 - local.get $39 - i32.const 1 - i32.eq - br_if $case1|5 - local.get $39 - i32.const 2 - i32.eq - br_if $case2|5 - local.get $39 - i32.const 3 - i32.eq - br_if $case3|5 - local.get $39 - i32.const 4 - i32.eq - br_if $case4|5 - local.get $39 - i32.const 5 - i32.eq - br_if $case5|5 - local.get $39 - i32.const 6 - i32.eq - br_if $case6|5 - local.get $39 - i32.const 7 - i32.eq - br_if $case7|5 - local.get $39 - i32.const 8 - i32.eq - br_if $case8|5 - local.get $39 - i32.const 9 - i32.eq - br_if $case9|5 - local.get $39 - i32.const 10 - i32.eq - br_if $case10|5 - local.get $39 - i32.const 11 - i32.eq - br_if $case11|5 - local.get $39 - i32.const 12 - i32.eq - br_if $case12|5 - local.get $39 - i32.const 13 - i32.eq - br_if $case13|5 - local.get $39 - i32.const 14 - i32.eq - br_if $case14|5 - local.get $39 - i32.const 15 - i32.eq - br_if $case15|5 - local.get $39 - i32.const 16 - i32.eq - br_if $case16|5 - local.get $39 - i32.const 17 - i32.eq - br_if $case17|5 - local.get $39 - i32.const 18 - i32.eq - br_if $case18|5 - local.get $39 - i32.const 19 - i32.eq - br_if $case19|5 - local.get $39 - i32.const 20 - i32.eq - br_if $case20|5 - local.get $39 - i32.const 21 - i32.eq - br_if $case21|5 - local.get $39 - i32.const 22 - i32.eq - br_if $case22|5 - local.get $39 - i32.const 23 - i32.eq - br_if $case23|5 - local.get $39 - i32.const 24 - i32.eq - br_if $case24|5 - local.get $39 - i32.const 25 - i32.eq - br_if $case25|5 - local.get $39 - i32.const 26 - i32.eq - br_if $case26|5 - local.get $39 - i32.const 27 - i32.eq - br_if $case27|5 - local.get $39 - i32.const 28 - i32.eq - br_if $case28|5 - local.get $39 - i32.const 29 - i32.eq - br_if $case29|5 - local.get $39 - i32.const 30 - i32.eq - br_if $case30|5 - local.get $39 - i32.const 31 - i32.eq - br_if $case31|5 - local.get $39 - i32.const 32 - i32.eq - br_if $case32|5 - local.get $39 - i32.const 33 - i32.eq - br_if $case33|5 - local.get $39 - i32.const 34 - i32.eq - br_if $case34|5 - local.get $39 - i32.const 35 - i32.eq - br_if $case35|5 - local.get $39 - i32.const 36 - i32.eq - br_if $case36|5 - local.get $39 - i32.const 37 - i32.eq - br_if $case37|5 - local.get $39 - i32.const 38 - i32.eq - br_if $case38|5 - local.get $39 - i32.const 39 - i32.eq - br_if $case39|5 - local.get $39 - i32.const 40 - i32.eq - br_if $case40|5 - local.get $39 - i32.const 41 - i32.eq - br_if $case41|5 - local.get $39 - i32.const 42 - i32.eq - br_if $case42|5 - local.get $39 - i32.const 43 - i32.eq - br_if $case43|5 - local.get $39 - i32.const 44 - i32.eq - br_if $case44|5 - local.get $39 - i32.const 45 - i32.eq - br_if $case45|5 - local.get $39 - i32.const 46 - i32.eq - br_if $case46|5 - local.get $39 - i32.const 47 - i32.eq - br_if $case47|5 - local.get $39 - i32.const 48 - i32.eq - br_if $case48|5 - local.get $39 - i32.const 49 - i32.eq - br_if $case49|5 - local.get $39 - i32.const 50 - i32.eq - br_if $case50|5 - local.get $39 - i32.const 51 - i32.eq - br_if $case51|5 - local.get $39 - i32.const 52 - i32.eq - br_if $case52|5 - local.get $39 - i32.const 53 - i32.eq - br_if $case53|5 - local.get $39 - i32.const 54 - i32.eq - br_if $case54|5 - local.get $39 - i32.const 55 - i32.eq - br_if $case55|5 - local.get $39 - i32.const 56 - i32.eq - br_if $case56|5 - local.get $39 - i32.const 57 - i32.eq - br_if $case57|5 - local.get $39 - i32.const 58 - i32.eq - br_if $case58|5 - local.get $39 - i32.const 59 - i32.eq - br_if $case59|5 - local.get $39 - i32.const 60 - i32.eq - br_if $case60|5 - local.get $39 - i32.const 61 - i32.eq - br_if $case61|5 - local.get $39 - i32.const 62 - i32.eq - br_if $case62|5 - local.get $39 - i32.const 63 - i32.eq - br_if $case63|5 - br $case64|5 - end - local.get $37 - v128.load - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.4 - end - local.get $37 - v128.load offset=1008 - br $assembly/utils/v128/getV128|inlined.4 - end - i32.const 3120 - local.get $38 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - i32x4.add - end - global.set $assembly/simd/tmpW - global.get $assembly/simd/i - i32.const 16 - i32.ge_s - if - local.get $2 - local.set $40 - global.get $assembly/simd/i - local.set $41 - global.get $assembly/simd/tmpW - local.set $42 - block $break|6 - block $case64|6 - block $case63|6 - block $case62|6 - block $case61|6 - block $case60|6 - block $case59|6 - block $case58|6 - block $case57|6 - block $case56|6 - block $case55|6 - block $case54|6 - block $case53|6 - block $case52|6 - block $case51|6 - block $case50|6 - block $case49|6 - block $case48|6 - block $case47|6 - block $case46|6 - block $case45|6 - block $case44|6 - block $case43|6 - block $case42|6 - block $case41|6 - block $case40|6 - block $case39|6 - block $case38|6 - block $case37|6 - block $case36|6 - block $case35|6 - block $case34|6 - block $case33|6 - block $case32|6 - block $case31|6 - block $case30|6 - block $case29|6 - block $case28|6 - block $case27|6 - block $case26|6 - block $case25|6 - block $case24|6 - block $case23|6 - block $case22|6 - block $case21|6 - block $case20|6 - block $case19|6 - block $case18|6 - block $case17|6 - block $case16|6 - block $case15|6 - block $case14|6 - block $case13|6 - block $case12|6 - block $case11|6 - block $case10|6 - block $case9|6 - block $case8|6 - block $case7|6 - block $case6|6 - block $case5|6 - block $case4|6 - block $case3|6 - block $case2|6 - block $case1|6 - block $case0|6 - local.get $41 - local.set $43 - local.get $43 - i32.const 0 - i32.eq - br_if $case0|6 - local.get $43 - i32.const 1 - i32.eq - br_if $case1|6 - local.get $43 - i32.const 2 - i32.eq - br_if $case2|6 - local.get $43 - i32.const 3 - i32.eq - br_if $case3|6 - local.get $43 - i32.const 4 - i32.eq - br_if $case4|6 - local.get $43 - i32.const 5 - i32.eq - br_if $case5|6 - local.get $43 - i32.const 6 - i32.eq - br_if $case6|6 - local.get $43 - i32.const 7 - i32.eq - br_if $case7|6 - local.get $43 - i32.const 8 - i32.eq - br_if $case8|6 - local.get $43 - i32.const 9 - i32.eq - br_if $case9|6 - local.get $43 - i32.const 10 - i32.eq - br_if $case10|6 - local.get $43 - i32.const 11 - i32.eq - br_if $case11|6 - local.get $43 - i32.const 12 - i32.eq - br_if $case12|6 - local.get $43 - i32.const 13 - i32.eq - br_if $case13|6 - local.get $43 - i32.const 14 - i32.eq - br_if $case14|6 - local.get $43 - i32.const 15 - i32.eq - br_if $case15|6 - local.get $43 - i32.const 16 - i32.eq - br_if $case16|6 - local.get $43 - i32.const 17 - i32.eq - br_if $case17|6 - local.get $43 - i32.const 18 - i32.eq - br_if $case18|6 - local.get $43 - i32.const 19 - i32.eq - br_if $case19|6 - local.get $43 - i32.const 20 - i32.eq - br_if $case20|6 - local.get $43 - i32.const 21 - i32.eq - br_if $case21|6 - local.get $43 - i32.const 22 - i32.eq - br_if $case22|6 - local.get $43 - i32.const 23 - i32.eq - br_if $case23|6 - local.get $43 - i32.const 24 - i32.eq - br_if $case24|6 - local.get $43 - i32.const 25 - i32.eq - br_if $case25|6 - local.get $43 - i32.const 26 - i32.eq - br_if $case26|6 - local.get $43 - i32.const 27 - i32.eq - br_if $case27|6 - local.get $43 - i32.const 28 - i32.eq - br_if $case28|6 - local.get $43 - i32.const 29 - i32.eq - br_if $case29|6 - local.get $43 - i32.const 30 - i32.eq - br_if $case30|6 - local.get $43 - i32.const 31 - i32.eq - br_if $case31|6 - local.get $43 - i32.const 32 - i32.eq - br_if $case32|6 - local.get $43 - i32.const 33 - i32.eq - br_if $case33|6 - local.get $43 - i32.const 34 - i32.eq - br_if $case34|6 - local.get $43 - i32.const 35 - i32.eq - br_if $case35|6 - local.get $43 - i32.const 36 - i32.eq - br_if $case36|6 - local.get $43 - i32.const 37 - i32.eq - br_if $case37|6 - local.get $43 - i32.const 38 - i32.eq - br_if $case38|6 - local.get $43 - i32.const 39 - i32.eq - br_if $case39|6 - local.get $43 - i32.const 40 - i32.eq - br_if $case40|6 - local.get $43 - i32.const 41 - i32.eq - br_if $case41|6 - local.get $43 - i32.const 42 - i32.eq - br_if $case42|6 - local.get $43 - i32.const 43 - i32.eq - br_if $case43|6 - local.get $43 - i32.const 44 - i32.eq - br_if $case44|6 - local.get $43 - i32.const 45 - i32.eq - br_if $case45|6 - local.get $43 - i32.const 46 - i32.eq - br_if $case46|6 - local.get $43 - i32.const 47 - i32.eq - br_if $case47|6 - local.get $43 - i32.const 48 - i32.eq - br_if $case48|6 - local.get $43 - i32.const 49 - i32.eq - br_if $case49|6 - local.get $43 - i32.const 50 - i32.eq - br_if $case50|6 - local.get $43 - i32.const 51 - i32.eq - br_if $case51|6 - local.get $43 - i32.const 52 - i32.eq - br_if $case52|6 - local.get $43 - i32.const 53 - i32.eq - br_if $case53|6 - local.get $43 - i32.const 54 - i32.eq - br_if $case54|6 - local.get $43 - i32.const 55 - i32.eq - br_if $case55|6 - local.get $43 - i32.const 56 - i32.eq - br_if $case56|6 - local.get $43 - i32.const 57 - i32.eq - br_if $case57|6 - local.get $43 - i32.const 58 - i32.eq - br_if $case58|6 - local.get $43 - i32.const 59 - i32.eq - br_if $case59|6 - local.get $43 - i32.const 60 - i32.eq - br_if $case60|6 - local.get $43 - i32.const 61 - i32.eq - br_if $case61|6 - local.get $43 - i32.const 62 - i32.eq - br_if $case62|6 - local.get $43 - i32.const 63 - i32.eq - br_if $case63|6 - br $case64|6 - end - local.get $40 - local.get $42 - v128.store - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=16 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=32 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=48 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=64 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=80 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=96 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=112 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=128 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=144 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=160 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=176 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=192 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=208 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=224 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=240 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=256 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=272 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=288 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=304 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=320 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=336 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=352 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=368 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=384 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=400 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=416 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=432 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=448 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=464 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=480 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=496 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=512 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=528 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=544 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=560 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=576 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=592 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=608 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=624 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=640 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=656 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=672 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=688 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=704 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=720 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=736 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=752 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=768 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=784 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=800 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=816 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=832 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=848 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=864 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=880 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=896 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=912 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=928 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=944 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=960 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=976 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=992 - br $break|6 - end - local.get $40 - local.get $42 - v128.store offset=1008 - br $break|6 - end - i32.const 2928 - local.get $41 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 201 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - end - global.get $assembly/simd/hV128 - block $assembly/simd/EP1V128|inlined.0 (result v128) - global.get $assembly/simd/eV128 - local.set $44 - block $assembly/simd/rotrV128|inlined.4 (result v128) - local.get $44 - local.set $45 - i32.const 6 - local.set $46 - i32.const 32 - local.get $46 - i32.sub - local.set $47 - local.get $45 - local.get $46 - i32x4.shr_u - local.set $48 - local.get $45 - local.get $47 - i32x4.shl - local.set $49 - local.get $48 - local.get $49 - v128.or - br $assembly/simd/rotrV128|inlined.4 - end - block $assembly/simd/rotrV128|inlined.5 (result v128) - local.get $44 - local.set $50 - i32.const 11 - local.set $51 - i32.const 32 - local.get $51 - i32.sub - local.set $52 - local.get $50 - local.get $51 - i32x4.shr_u - local.set $53 - local.get $50 - local.get $52 - i32x4.shl - local.set $54 - local.get $53 - local.get $54 - v128.or - br $assembly/simd/rotrV128|inlined.5 - end - v128.xor - block $assembly/simd/rotrV128|inlined.6 (result v128) - local.get $44 - local.set $55 - i32.const 25 - local.set $56 - i32.const 32 - local.get $56 - i32.sub - local.set $57 - local.get $55 - local.get $56 - i32x4.shr_u - local.set $58 - local.get $55 - local.get $57 - i32x4.shl - local.set $59 - local.get $58 - local.get $59 - v128.or - br $assembly/simd/rotrV128|inlined.6 - end - v128.xor - br $assembly/simd/EP1V128|inlined.0 - end - i32x4.add - block $assembly/simd/CHV128|inlined.0 (result v128) - global.get $assembly/simd/eV128 - local.set $60 - global.get $assembly/simd/fV128 - local.set $61 - global.get $assembly/simd/gV128 - local.set $62 - local.get $60 - local.get $61 - v128.and - local.get $60 - v128.not - local.get $62 - v128.and - v128.xor - br $assembly/simd/CHV128|inlined.0 - end - i32x4.add - block $assembly/utils/v128/getV128|inlined.5 (result v128) - global.get $assembly/simd/kV128Ptr - local.set $63 - global.get $assembly/simd/i - local.set $64 - block $case64|7 - block $case63|7 - block $case62|7 - block $case61|7 - block $case60|7 - block $case59|7 - block $case58|7 - block $case57|7 - block $case56|7 - block $case55|7 - block $case54|7 - block $case53|7 - block $case52|7 - block $case51|7 - block $case50|7 - block $case49|7 - block $case48|7 - block $case47|7 - block $case46|7 - block $case45|7 - block $case44|7 - block $case43|7 - block $case42|7 - block $case41|7 - block $case40|7 - block $case39|7 - block $case38|7 - block $case37|7 - block $case36|7 - block $case35|7 - block $case34|7 - block $case33|7 - block $case32|7 - block $case31|7 - block $case30|7 - block $case29|7 - block $case28|7 - block $case27|7 - block $case26|7 - block $case25|7 - block $case24|7 - block $case23|7 - block $case22|7 - block $case21|7 - block $case20|7 - block $case19|7 - block $case18|7 - block $case17|7 - block $case16|7 - block $case15|7 - block $case14|7 - block $case13|7 - block $case12|7 - block $case11|7 - block $case10|7 - block $case9|7 - block $case8|7 - block $case7|7 - block $case6|7 - block $case5|7 - block $case4|7 - block $case3|7 - block $case2|7 - block $case1|7 - block $case0|7 - local.get $64 - local.set $65 - local.get $65 - i32.const 0 - i32.eq - br_if $case0|7 - local.get $65 - i32.const 1 - i32.eq - br_if $case1|7 - local.get $65 - i32.const 2 - i32.eq - br_if $case2|7 - local.get $65 - i32.const 3 - i32.eq - br_if $case3|7 - local.get $65 - i32.const 4 - i32.eq - br_if $case4|7 - local.get $65 - i32.const 5 - i32.eq - br_if $case5|7 - local.get $65 - i32.const 6 - i32.eq - br_if $case6|7 - local.get $65 - i32.const 7 - i32.eq - br_if $case7|7 - local.get $65 - i32.const 8 - i32.eq - br_if $case8|7 - local.get $65 - i32.const 9 - i32.eq - br_if $case9|7 - local.get $65 - i32.const 10 - i32.eq - br_if $case10|7 - local.get $65 - i32.const 11 - i32.eq - br_if $case11|7 - local.get $65 - i32.const 12 - i32.eq - br_if $case12|7 - local.get $65 - i32.const 13 - i32.eq - br_if $case13|7 - local.get $65 - i32.const 14 - i32.eq - br_if $case14|7 - local.get $65 - i32.const 15 - i32.eq - br_if $case15|7 - local.get $65 - i32.const 16 - i32.eq - br_if $case16|7 - local.get $65 - i32.const 17 - i32.eq - br_if $case17|7 - local.get $65 - i32.const 18 - i32.eq - br_if $case18|7 - local.get $65 - i32.const 19 - i32.eq - br_if $case19|7 - local.get $65 - i32.const 20 - i32.eq - br_if $case20|7 - local.get $65 - i32.const 21 - i32.eq - br_if $case21|7 - local.get $65 - i32.const 22 - i32.eq - br_if $case22|7 - local.get $65 - i32.const 23 - i32.eq - br_if $case23|7 - local.get $65 - i32.const 24 - i32.eq - br_if $case24|7 - local.get $65 - i32.const 25 - i32.eq - br_if $case25|7 - local.get $65 - i32.const 26 - i32.eq - br_if $case26|7 - local.get $65 - i32.const 27 - i32.eq - br_if $case27|7 - local.get $65 - i32.const 28 - i32.eq - br_if $case28|7 - local.get $65 - i32.const 29 - i32.eq - br_if $case29|7 - local.get $65 - i32.const 30 - i32.eq - br_if $case30|7 - local.get $65 - i32.const 31 - i32.eq - br_if $case31|7 - local.get $65 - i32.const 32 - i32.eq - br_if $case32|7 - local.get $65 - i32.const 33 - i32.eq - br_if $case33|7 - local.get $65 - i32.const 34 - i32.eq - br_if $case34|7 - local.get $65 - i32.const 35 - i32.eq - br_if $case35|7 - local.get $65 - i32.const 36 - i32.eq - br_if $case36|7 - local.get $65 - i32.const 37 - i32.eq - br_if $case37|7 - local.get $65 - i32.const 38 - i32.eq - br_if $case38|7 - local.get $65 - i32.const 39 - i32.eq - br_if $case39|7 - local.get $65 - i32.const 40 - i32.eq - br_if $case40|7 - local.get $65 - i32.const 41 - i32.eq - br_if $case41|7 - local.get $65 - i32.const 42 - i32.eq - br_if $case42|7 - local.get $65 - i32.const 43 - i32.eq - br_if $case43|7 - local.get $65 - i32.const 44 - i32.eq - br_if $case44|7 - local.get $65 - i32.const 45 - i32.eq - br_if $case45|7 - local.get $65 - i32.const 46 - i32.eq - br_if $case46|7 - local.get $65 - i32.const 47 - i32.eq - br_if $case47|7 - local.get $65 - i32.const 48 - i32.eq - br_if $case48|7 - local.get $65 - i32.const 49 - i32.eq - br_if $case49|7 - local.get $65 - i32.const 50 - i32.eq - br_if $case50|7 - local.get $65 - i32.const 51 - i32.eq - br_if $case51|7 - local.get $65 - i32.const 52 - i32.eq - br_if $case52|7 - local.get $65 - i32.const 53 - i32.eq - br_if $case53|7 - local.get $65 - i32.const 54 - i32.eq - br_if $case54|7 - local.get $65 - i32.const 55 - i32.eq - br_if $case55|7 - local.get $65 - i32.const 56 - i32.eq - br_if $case56|7 - local.get $65 - i32.const 57 - i32.eq - br_if $case57|7 - local.get $65 - i32.const 58 - i32.eq - br_if $case58|7 - local.get $65 - i32.const 59 - i32.eq - br_if $case59|7 - local.get $65 - i32.const 60 - i32.eq - br_if $case60|7 - local.get $65 - i32.const 61 - i32.eq - br_if $case61|7 - local.get $65 - i32.const 62 - i32.eq - br_if $case62|7 - local.get $65 - i32.const 63 - i32.eq - br_if $case63|7 - br $case64|7 - end - local.get $63 - v128.load - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=16 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=32 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=48 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=64 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=80 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=96 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=112 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=128 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=144 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=160 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=176 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=192 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=208 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=224 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=240 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=256 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=272 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=288 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=304 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=320 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=336 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=352 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=368 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=384 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=400 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=416 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=432 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=448 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=464 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=480 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=496 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=512 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=528 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=544 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=560 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=576 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=592 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=608 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=624 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=640 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=656 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=672 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=688 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=704 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=720 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=736 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=752 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=768 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=784 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=800 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=816 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=832 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=848 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=864 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=880 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=896 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=912 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=928 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=944 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=960 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=976 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=992 - br $assembly/utils/v128/getV128|inlined.5 - end - local.get $63 - v128.load offset=1008 - br $assembly/utils/v128/getV128|inlined.5 - end - i32.const 3120 - local.get $64 - i32.const 10 - call $~lib/number/I32#toString - call $~lib/string/String#concat - i32.const 3056 - i32.const 341 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - i32x4.add - global.get $assembly/simd/tmpW - i32x4.add - global.set $assembly/simd/t1V128 - block $assembly/simd/EP0V128|inlined.0 (result v128) - global.get $assembly/simd/aV128 - local.set $66 - block $assembly/simd/rotrV128|inlined.7 (result v128) - local.get $66 - local.set $67 - i32.const 2 - local.set $68 - i32.const 32 - local.get $68 - i32.sub - local.set $69 - local.get $67 - local.get $68 - i32x4.shr_u - local.set $70 - local.get $67 - local.get $69 - i32x4.shl - local.set $71 - local.get $70 - local.get $71 - v128.or - br $assembly/simd/rotrV128|inlined.7 - end - block $assembly/simd/rotrV128|inlined.8 (result v128) - local.get $66 - local.set $72 - i32.const 13 - local.set $73 - i32.const 32 - local.get $73 - i32.sub - local.set $74 - local.get $72 - local.get $73 - i32x4.shr_u - local.set $75 - local.get $72 - local.get $74 - i32x4.shl - local.set $76 - local.get $75 - local.get $76 - v128.or - br $assembly/simd/rotrV128|inlined.8 - end - v128.xor - block $assembly/simd/rotrV128|inlined.9 (result v128) - local.get $66 - local.set $77 - i32.const 22 - local.set $78 - i32.const 32 - local.get $78 - i32.sub - local.set $79 - local.get $77 - local.get $78 - i32x4.shr_u - local.set $80 - local.get $77 - local.get $79 - i32x4.shl - local.set $81 - local.get $80 - local.get $81 - v128.or - br $assembly/simd/rotrV128|inlined.9 - end - v128.xor - br $assembly/simd/EP0V128|inlined.0 - end - block $assembly/simd/MAJV128|inlined.0 (result v128) - global.get $assembly/simd/aV128 - local.set $82 - global.get $assembly/simd/bV128 - local.set $83 - global.get $assembly/simd/cV128 - local.set $84 - local.get $82 - local.get $83 - v128.and - local.get $82 - local.get $84 - v128.and - v128.xor - local.get $83 - local.get $84 - v128.and - v128.xor - br $assembly/simd/MAJV128|inlined.0 - end - i32x4.add - global.set $assembly/simd/t2V128 - global.get $assembly/simd/gV128 - global.set $assembly/simd/hV128 - global.get $assembly/simd/fV128 - global.set $assembly/simd/gV128 - global.get $assembly/simd/eV128 - global.set $assembly/simd/fV128 - global.get $assembly/simd/dV128 - global.get $assembly/simd/t1V128 - i32x4.add - global.set $assembly/simd/eV128 - global.get $assembly/simd/cV128 - global.set $assembly/simd/dV128 - global.get $assembly/simd/bV128 - global.set $assembly/simd/cV128 - global.get $assembly/simd/aV128 - global.set $assembly/simd/bV128 - global.get $assembly/simd/t1V128 - global.get $assembly/simd/t2V128 - i32x4.add - global.set $assembly/simd/aV128 - global.get $assembly/simd/i - i32.const 1 - i32.add - global.set $assembly/simd/i - br $for-loop|0 - end - end - global.get $assembly/simd/H0V128 - global.get $assembly/simd/aV128 - i32x4.add - global.set $assembly/simd/H0V128 - global.get $assembly/simd/H1V128 - global.get $assembly/simd/bV128 - i32x4.add - global.set $assembly/simd/H1V128 - global.get $assembly/simd/H2V128 - global.get $assembly/simd/cV128 - i32x4.add - global.set $assembly/simd/H2V128 - global.get $assembly/simd/H3V128 - global.get $assembly/simd/dV128 - i32x4.add - global.set $assembly/simd/H3V128 - global.get $assembly/simd/H4V128 - global.get $assembly/simd/eV128 - i32x4.add - global.set $assembly/simd/H4V128 - global.get $assembly/simd/H5V128 - global.get $assembly/simd/fV128 - i32x4.add - global.set $assembly/simd/H5V128 - global.get $assembly/simd/H6V128 - global.get $assembly/simd/gV128 - i32x4.add - global.set $assembly/simd/H6V128 - global.get $assembly/simd/H7V128 - global.get $assembly/simd/hV128 - i32x4.add - global.set $assembly/simd/H7V128 - call $assembly/simd/hashPreCompWV128 - local.get $1 - local.set $85 - i32.const 0 - local.set $86 - global.get $assembly/simd/H0V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - local.set $87 - local.get $85 - local.get $86 - i32.const 2 - i32.shl - i32.add - local.get $87 - i32.store - local.get $1 - local.set $88 - i32.const 1 - local.set $89 - global.get $assembly/simd/H1V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - local.set $90 - local.get $88 - local.get $89 - i32.const 2 - i32.shl - i32.add - local.get $90 - i32.store - local.get $1 - local.set $91 - i32.const 2 - local.set $92 - global.get $assembly/simd/H2V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - local.set $93 - local.get $91 - local.get $92 - i32.const 2 - i32.shl - i32.add - local.get $93 - i32.store - local.get $1 - local.set $94 - i32.const 3 - local.set $95 - global.get $assembly/simd/H3V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - local.set $96 - local.get $94 - local.get $95 - i32.const 2 - i32.shl - i32.add - local.get $96 - i32.store - local.get $1 - local.set $97 + drop + i32.const 4 + i32.const 1 + i32.eq + drop i32.const 4 - local.set $98 - global.get $assembly/simd/H4V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - local.set $99 - local.get $97 - local.get $98 - i32.const 2 - i32.shl - i32.add - local.get $99 - i32.store - local.get $1 - local.set $100 - i32.const 5 - local.set $101 - global.get $assembly/simd/H5V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - local.set $102 - local.get $100 - local.get $101 - i32.const 2 - i32.shl - i32.add - local.get $102 - i32.store - local.get $1 - local.set $103 - i32.const 6 - local.set $104 - global.get $assembly/simd/H6V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - local.set $105 - local.get $103 - local.get $104 - i32.const 2 - i32.shl - i32.add - local.get $105 - i32.store - local.get $1 - local.set $106 - i32.const 7 - local.set $107 - global.get $assembly/simd/H7V128 - i32x4.extract_lane 0 - call $~lib/polyfills/bswap - local.set $108 - local.get $106 - local.get $107 - i32.const 2 - i32.shl - i32.add - local.get $108 - i32.store - local.get $1 - local.set $109 - i32.const 8 - local.set $110 - global.get $assembly/simd/H0V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - local.set $111 - local.get $109 - local.get $110 - i32.const 2 - i32.shl - i32.add - local.get $111 - i32.store - local.get $1 - local.set $112 - i32.const 9 - local.set $113 - global.get $assembly/simd/H1V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - local.set $114 - local.get $112 - local.get $113 - i32.const 2 - i32.shl - i32.add - local.get $114 - i32.store - local.get $1 - local.set $115 - i32.const 10 - local.set $116 - global.get $assembly/simd/H2V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - local.set $117 - local.get $115 - local.get $116 - i32.const 2 - i32.shl - i32.add - local.get $117 - i32.store - local.get $1 - local.set $118 - i32.const 11 - local.set $119 - global.get $assembly/simd/H3V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - local.set $120 - local.get $118 - local.get $119 - i32.const 2 - i32.shl - i32.add - local.get $120 - i32.store - local.get $1 - local.set $121 - i32.const 12 - local.set $122 - global.get $assembly/simd/H4V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - local.set $123 - local.get $121 - local.get $122 - i32.const 2 - i32.shl - i32.add - local.get $123 - i32.store - local.get $1 - local.set $124 - i32.const 13 - local.set $125 - global.get $assembly/simd/H5V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - local.set $126 - local.get $124 - local.get $125 - i32.const 2 - i32.shl - i32.add - local.get $126 - i32.store - local.get $1 - local.set $127 - i32.const 14 - local.set $128 - global.get $assembly/simd/H6V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - local.set $129 - local.get $127 - local.get $128 - i32.const 2 - i32.shl - i32.add - local.get $129 - i32.store - local.get $1 - local.set $130 - i32.const 15 - local.set $131 - global.get $assembly/simd/H7V128 - i32x4.extract_lane 1 - call $~lib/polyfills/bswap - local.set $132 - local.get $130 - local.get $131 - i32.const 2 - i32.shl - i32.add - local.get $132 - i32.store - local.get $1 - local.set $133 - i32.const 16 - local.set $134 - global.get $assembly/simd/H0V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - local.set $135 - local.get $133 - local.get $134 - i32.const 2 - i32.shl - i32.add - local.get $135 - i32.store - local.get $1 - local.set $136 - i32.const 17 - local.set $137 - global.get $assembly/simd/H1V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - local.set $138 - local.get $136 - local.get $137 - i32.const 2 - i32.shl - i32.add - local.get $138 - i32.store - local.get $1 - local.set $139 - i32.const 18 - local.set $140 - global.get $assembly/simd/H2V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - local.set $141 - local.get $139 - local.get $140 - i32.const 2 - i32.shl - i32.add - local.get $141 - i32.store - local.get $1 - local.set $142 - i32.const 19 - local.set $143 - global.get $assembly/simd/H3V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - local.set $144 - local.get $142 - local.get $143 - i32.const 2 - i32.shl - i32.add - local.get $144 - i32.store - local.get $1 - local.set $145 - i32.const 20 - local.set $146 - global.get $assembly/simd/H4V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - local.set $147 - local.get $145 - local.get $146 - i32.const 2 - i32.shl - i32.add - local.get $147 - i32.store - local.get $1 - local.set $148 - i32.const 21 - local.set $149 - global.get $assembly/simd/H5V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - local.set $150 - local.get $148 - local.get $149 - i32.const 2 - i32.shl - i32.add - local.get $150 - i32.store - local.get $1 - local.set $151 - i32.const 22 - local.set $152 - global.get $assembly/simd/H6V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - local.set $153 - local.get $151 - local.get $152 - i32.const 2 - i32.shl - i32.add - local.get $153 - i32.store - local.get $1 - local.set $154 - i32.const 23 - local.set $155 - global.get $assembly/simd/H7V128 - i32x4.extract_lane 2 - call $~lib/polyfills/bswap - local.set $156 - local.get $154 - local.get $155 - i32.const 2 - i32.shl - i32.add - local.get $156 - i32.store - local.get $1 - local.set $157 - i32.const 24 - local.set $158 - global.get $assembly/simd/H0V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - local.set $159 - local.get $157 - local.get $158 - i32.const 2 - i32.shl - i32.add - local.get $159 - i32.store - local.get $1 - local.set $160 - i32.const 25 - local.set $161 - global.get $assembly/simd/H1V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - local.set $162 - local.get $160 - local.get $161 - i32.const 2 - i32.shl - i32.add - local.get $162 - i32.store - local.get $1 - local.set $163 - i32.const 26 - local.set $164 - global.get $assembly/simd/H2V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - local.set $165 - local.get $163 - local.get $164 - i32.const 2 - i32.shl - i32.add - local.get $165 - i32.store - local.get $1 - local.set $166 - i32.const 27 - local.set $167 - global.get $assembly/simd/H3V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - local.set $168 - local.get $166 - local.get $167 - i32.const 2 - i32.shl - i32.add - local.get $168 - i32.store - local.get $1 - local.set $169 - i32.const 28 - local.set $170 - global.get $assembly/simd/H4V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - local.set $171 - local.get $169 - local.get $170 - i32.const 2 - i32.shl - i32.add - local.get $171 - i32.store - local.get $1 - local.set $172 - i32.const 29 - local.set $173 - global.get $assembly/simd/H5V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - local.set $174 - local.get $172 - local.get $173 - i32.const 2 - i32.shl - i32.add - local.get $174 - i32.store - local.get $1 - local.set $175 - i32.const 30 - local.set $176 - global.get $assembly/simd/H6V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - local.set $177 - local.get $175 - local.get $176 - i32.const 2 - i32.shl - i32.add - local.get $177 - i32.store - local.get $1 - local.set $178 - i32.const 31 - local.set $179 - global.get $assembly/simd/H7V128 - i32x4.extract_lane 3 - call $~lib/polyfills/bswap - local.set $180 - local.get $178 - local.get $179 i32.const 2 - i32.shl - i32.add - local.get $180 - i32.store + i32.eq + drop + i32.const 4 + i32.const 4 + i32.eq + drop + local.get $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + return + ) + (func $~lib/polyfills/bswap (param $0 i32) (result i32) + i32.const 1 + drop + i32.const 4 + i32.const 1 + i32.eq + drop + i32.const 4 + i32.const 2 + i32.eq + drop + i32.const 4 + i32.const 4 + i32.eq + drop + local.get $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + return ) - (func $assembly/index/batchHash4UintArray64s (param $0 i32) + (func $assembly/common/final (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -11400,440 +2430,451 @@ (local $36 i32) (local $37 i32) (local $38 i32) - (local $39 i32) - (local $40 i32) - (local $41 i32) - (local $42 i32) - (local $43 i32) - (local $44 i32) - (local $45 i32) - (local $46 i32) - (local $47 i32) - (local $48 i32) - (local $49 i32) - (local $50 i32) - (local $51 i32) - (local $52 i32) - (local $53 i32) - (local $54 i32) - (local $55 i32) - (local $56 i32) + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 63 + i32.lt_s + if + global.get $assembly/common/mPtr + local.set $1 + global.get $assembly/common/mLength + local.set $2 + i32.const 128 + local.set $3 + local.get $1 + local.get $2 + i32.add + local.get $3 + i32.store8 + global.get $assembly/common/mLength + i32.const 1 + i32.add + global.set $assembly/common/mLength + end + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 56 + i32.ge_s + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.set $4 + i32.const 0 + local.set $5 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + local.set $6 + local.get $4 + local.get $6 + i32.add + local.set $7 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.lt_u + if + local.get $4 + local.get $5 + i32.store8 + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|0 + end + end + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + i32.const 0 + global.set $assembly/common/mLength + end + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 63 + i32.ge_s + if + global.get $assembly/common/mPtr + local.set $8 + global.get $assembly/common/mLength + local.set $9 + i32.const 128 + local.set $10 + local.get $8 + local.get $9 + i32.add + local.get $10 + i32.store8 + global.get $assembly/common/mLength + i32.const 1 + i32.add + global.set $assembly/common/mLength + end + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.set $11 + i32.const 0 + local.set $12 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.const 8 + i32.sub + local.set $13 + local.get $11 + local.get $13 + i32.add + local.set $14 + loop $while-continue|1 + local.get $11 + local.get $14 + i32.lt_u + if + local.get $11 + local.get $12 + i32.store8 + local.get $11 + i32.const 1 + i32.add + local.set $11 + br $while-continue|1 + end + end + global.get $assembly/common/mPtr + i32.const 64 + i32.add + i32.const 8 + i32.sub + global.get $assembly/common/bytesHashed + i32.const 536870912 + i32.div_s + call $~lib/polyfills/bswap + i32.store + global.get $assembly/common/mPtr + i32.const 64 + i32.add + i32.const 4 + i32.sub + global.get $assembly/common/bytesHashed + i32.const 3 + i32.shl + call $~lib/polyfills/bswap + i32.store + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + local.get $0 + local.set $15 + i32.const 0 + local.set $16 + global.get $assembly/common/H0 + call $~lib/polyfills/bswap + local.set $17 + local.get $15 + local.get $16 + i32.const 2 + i32.shl + i32.add + local.get $17 + i32.store + local.get $0 + local.set $18 + i32.const 1 + local.set $19 + global.get $assembly/common/H1 + call $~lib/polyfills/bswap + local.set $20 + local.get $18 + local.get $19 + i32.const 2 + i32.shl + i32.add + local.get $20 + i32.store + local.get $0 + local.set $21 + i32.const 2 + local.set $22 + global.get $assembly/common/H2 + call $~lib/polyfills/bswap + local.set $23 + local.get $21 + local.get $22 + i32.const 2 + i32.shl + i32.add + local.get $23 + i32.store + local.get $0 + local.set $24 + i32.const 3 + local.set $25 + global.get $assembly/common/H3 + call $~lib/polyfills/bswap + local.set $26 + local.get $24 + local.get $25 + i32.const 2 + i32.shl + i32.add + local.get $26 + i32.store + local.get $0 + local.set $27 + i32.const 4 + local.set $28 + global.get $assembly/common/H4 + call $~lib/polyfills/bswap + local.set $29 + local.get $27 + local.get $28 + i32.const 2 + i32.shl + i32.add + local.get $29 + i32.store + local.get $0 + local.set $30 + i32.const 5 + local.set $31 + global.get $assembly/common/H5 + call $~lib/polyfills/bswap + local.set $32 + local.get $30 + local.get $31 + i32.const 2 + i32.shl + i32.add + local.get $32 + i32.store + local.get $0 + local.set $33 + i32.const 6 + local.set $34 + global.get $assembly/common/H6 + call $~lib/polyfills/bswap + local.set $35 + local.get $33 + local.get $34 + i32.const 2 + i32.shl + i32.add + local.get $35 + i32.store + local.get $0 + local.set $36 + i32.const 7 + local.set $37 + global.get $assembly/common/H7 + call $~lib/polyfills/bswap + local.set $38 + local.get $36 + local.get $37 + i32.const 2 + i32.shl + i32.add + local.get $38 + i32.store + ) + (func $assembly/common/digest (param $0 i32) + call $assembly/common/init + global.get $assembly/common/inputPtr + local.get $0 + call $assembly/common/update + global.get $assembly/common/outputPtr + call $assembly/common/final + ) + (func $assembly/common/hashPreCompW (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h i32.const 0 - global.set $assembly/index/i + global.set $assembly/common/i loop $for-loop|0 - global.get $assembly/index/i - i32.const 16 + global.get $assembly/common/i + i32.const 64 i32.lt_u if - global.get $assembly/index/wPtr - local.set $12 - global.get $assembly/index/PARALLEL_FACTOR - global.get $assembly/index/i - i32.mul - local.set $13 - block $assembly/index/load32be|inlined.1 (result i32) - global.get $assembly/index/inputPtr + global.get $assembly/common/h + block $assembly/common/EP1|inlined.1 (result i32) + global.get $assembly/common/e local.set $1 - global.get $assembly/index/i + local.get $1 + i32.const 6 + i32.rotr + local.get $1 + i32.const 11 + i32.rotr + i32.xor + local.get $1 + i32.const 25 + i32.rotr + i32.xor + br $assembly/common/EP1|inlined.1 + end + i32.add + block $assembly/common/CH|inlined.1 (result i32) + global.get $assembly/common/e local.set $2 - local.get $2 - i32.const 2 - i32.shl + global.get $assembly/common/f local.set $3 - block $assembly/index/load8|inlined.4 (result i32) - local.get $1 - local.set $4 - local.get $3 - i32.const 0 - i32.add - local.set $5 - local.get $4 - local.get $5 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.4 - end - i32.const 255 - i32.and - i32.const 24 - i32.shl - block $assembly/index/load8|inlined.5 (result i32) - local.get $1 - local.set $6 - local.get $3 - i32.const 1 - i32.add - local.set $7 - local.get $6 - local.get $7 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.5 - end - i32.const 255 - i32.and - i32.const 16 - i32.shl - i32.or - block $assembly/index/load8|inlined.6 (result i32) - local.get $1 - local.set $8 - local.get $3 - i32.const 2 - i32.add - local.set $9 - local.get $8 - local.get $9 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.6 - end - i32.const 255 + global.get $assembly/common/g + local.set $4 + local.get $2 + local.get $3 i32.and - i32.const 8 - i32.shl - i32.or - block $assembly/index/load8|inlined.7 (result i32) - local.get $1 - local.set $10 - local.get $3 - i32.const 3 - i32.add - local.set $11 - local.get $10 - local.get $11 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.7 - end - i32.const 255 + local.get $2 + i32.const -1 + i32.xor + local.get $4 i32.and - i32.const 0 - i32.shl - i32.or - br $assembly/index/load32be|inlined.1 + i32.xor + br $assembly/common/CH|inlined.1 end - local.set $14 - local.get $12 - local.get $13 - i32.const 2 - i32.shl - i32.add - local.get $14 - i32.store - global.get $assembly/index/wPtr - local.set $26 - global.get $assembly/index/PARALLEL_FACTOR - global.get $assembly/index/i - i32.mul - i32.const 1 i32.add - local.set $27 - block $assembly/index/load32be|inlined.2 (result i32) - global.get $assembly/index/inputPtr - local.set $15 - global.get $assembly/index/i - i32.const 16 - i32.add - local.set $16 - local.get $16 + block $assembly/common/load32|inlined.6 (result i32) + local.get $0 + local.set $5 + global.get $assembly/common/i + local.set $6 + local.get $5 + local.get $6 i32.const 2 i32.shl - local.set $17 - block $assembly/index/load8|inlined.8 (result i32) - local.get $15 - local.set $18 - local.get $17 - i32.const 0 - i32.add - local.set $19 - local.get $18 - local.get $19 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.8 - end - i32.const 255 - i32.and - i32.const 24 - i32.shl - block $assembly/index/load8|inlined.9 (result i32) - local.get $15 - local.set $20 - local.get $17 - i32.const 1 - i32.add - local.set $21 - local.get $20 - local.get $21 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.9 - end - i32.const 255 - i32.and - i32.const 16 - i32.shl - i32.or - block $assembly/index/load8|inlined.10 (result i32) - local.get $15 - local.set $22 - local.get $17 - i32.const 2 - i32.add - local.set $23 - local.get $22 - local.get $23 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.10 - end - i32.const 255 - i32.and - i32.const 8 - i32.shl - i32.or - block $assembly/index/load8|inlined.11 (result i32) - local.get $15 - local.set $24 - local.get $17 - i32.const 3 - i32.add - local.set $25 - local.get $24 - local.get $25 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.11 - end - i32.const 255 - i32.and - i32.const 0 - i32.shl - i32.or - br $assembly/index/load32be|inlined.2 - end - local.set $28 - local.get $26 - local.get $27 - i32.const 2 - i32.shl - i32.add - local.get $28 - i32.store - global.get $assembly/index/wPtr - local.set $40 - global.get $assembly/index/PARALLEL_FACTOR - global.get $assembly/index/i - i32.mul - i32.const 2 - i32.add - local.set $41 - block $assembly/index/load32be|inlined.3 (result i32) - global.get $assembly/index/inputPtr - local.set $29 - global.get $assembly/index/i - i32.const 32 i32.add - local.set $30 - local.get $30 - i32.const 2 - i32.shl - local.set $31 - block $assembly/index/load8|inlined.12 (result i32) - local.get $29 - local.set $32 - local.get $31 - i32.const 0 - i32.add - local.set $33 - local.get $32 - local.get $33 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.12 - end - i32.const 255 - i32.and - i32.const 24 - i32.shl - block $assembly/index/load8|inlined.13 (result i32) - local.get $29 - local.set $34 - local.get $31 - i32.const 1 - i32.add - local.set $35 - local.get $34 - local.get $35 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.13 - end - i32.const 255 - i32.and - i32.const 16 - i32.shl - i32.or - block $assembly/index/load8|inlined.14 (result i32) - local.get $29 - local.set $36 - local.get $31 - i32.const 2 - i32.add - local.set $37 - local.get $36 - local.get $37 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.14 - end - i32.const 255 - i32.and - i32.const 8 - i32.shl - i32.or - block $assembly/index/load8|inlined.15 (result i32) - local.get $29 - local.set $38 - local.get $31 - i32.const 3 - i32.add - local.set $39 - local.get $38 - local.get $39 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.15 - end - i32.const 255 - i32.and - i32.const 0 - i32.shl - i32.or - br $assembly/index/load32be|inlined.3 + i32.load + br $assembly/common/load32|inlined.6 end - local.set $42 - local.get $40 - local.get $41 - i32.const 2 - i32.shl - i32.add - local.get $42 - i32.store - global.get $assembly/index/wPtr - local.set $54 - global.get $assembly/index/PARALLEL_FACTOR - global.get $assembly/index/i - i32.mul - i32.const 3 i32.add - local.set $55 - block $assembly/index/load32be|inlined.4 (result i32) - global.get $assembly/index/inputPtr - local.set $43 - global.get $assembly/index/i - i32.const 48 - i32.add - local.set $44 - local.get $44 - i32.const 2 - i32.shl - local.set $45 - block $assembly/index/load8|inlined.16 (result i32) - local.get $43 - local.set $46 - local.get $45 - i32.const 0 - i32.add - local.set $47 - local.get $46 - local.get $47 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.16 - end - i32.const 255 - i32.and - i32.const 24 - i32.shl - block $assembly/index/load8|inlined.17 (result i32) - local.get $43 - local.set $48 - local.get $45 - i32.const 1 - i32.add - local.set $49 - local.get $48 - local.get $49 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.17 - end - i32.const 255 + global.set $assembly/common/t1 + block $assembly/common/EP0|inlined.1 (result i32) + global.get $assembly/common/a + local.set $7 + local.get $7 + i32.const 2 + i32.rotr + local.get $7 + i32.const 13 + i32.rotr + i32.xor + local.get $7 + i32.const 22 + i32.rotr + i32.xor + br $assembly/common/EP0|inlined.1 + end + block $assembly/common/MAJ|inlined.1 (result i32) + global.get $assembly/common/a + local.set $8 + global.get $assembly/common/b + local.set $9 + global.get $assembly/common/c + local.set $10 + local.get $8 + local.get $9 i32.and - i32.const 16 - i32.shl - i32.or - block $assembly/index/load8|inlined.18 (result i32) - local.get $43 - local.set $50 - local.get $45 - i32.const 2 - i32.add - local.set $51 - local.get $50 - local.get $51 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.18 - end - i32.const 255 + local.get $8 + local.get $10 i32.and - i32.const 8 - i32.shl - i32.or - block $assembly/index/load8|inlined.19 (result i32) - local.get $43 - local.set $52 - local.get $45 - i32.const 3 - i32.add - local.set $53 - local.get $52 - local.get $53 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.19 - end - i32.const 255 + i32.xor + local.get $9 + local.get $10 i32.and - i32.const 0 - i32.shl - i32.or - br $assembly/index/load32be|inlined.4 + i32.xor + br $assembly/common/MAJ|inlined.1 end - local.set $56 - local.get $54 - local.get $55 - i32.const 2 - i32.shl i32.add - local.get $56 - i32.store - global.get $assembly/index/i + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i i32.const 1 i32.add - global.set $assembly/index/i + global.set $assembly/common/i br $for-loop|0 end end - global.get $assembly/index/wPtr - local.get $0 - call $assembly/simd/digest64V128 + global.get $assembly/common/H0 + global.get $assembly/common/a + i32.add + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b + i32.add + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c + i32.add + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d + i32.add + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e + i32.add + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f + i32.add + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g + i32.add + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h + i32.add + global.set $assembly/common/H7 ) - (func $assembly/index/batchHash4HashObjectInputs (param $0 i32) - (local $1 i32) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11847,119 +2888,135 @@ (local $12 i32) (local $13 i32) (local $14 i32) - i32.const 0 - global.set $assembly/index/i - loop $for-loop|0 - global.get $assembly/index/i - i32.const 16 - global.get $assembly/index/PARALLEL_FACTOR - i32.mul - i32.lt_u - if - global.get $assembly/index/wPtr - local.set $12 - global.get $assembly/index/i - local.set $13 - block $assembly/index/load32be|inlined.5 (result i32) - global.get $assembly/index/inputPtr - local.set $1 - global.get $assembly/index/i - local.set $2 - local.get $2 - i32.const 2 - i32.shl - local.set $3 - block $assembly/index/load8|inlined.20 (result i32) - local.get $1 - local.set $4 - local.get $3 - i32.const 0 - i32.add - local.set $5 - local.get $4 - local.get $5 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.20 - end - i32.const 255 - i32.and - i32.const 24 - i32.shl - block $assembly/index/load8|inlined.21 (result i32) - local.get $1 - local.set $6 - local.get $3 - i32.const 1 - i32.add - local.set $7 - local.get $6 - local.get $7 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.21 - end - i32.const 255 - i32.and - i32.const 16 - i32.shl - i32.or - block $assembly/index/load8|inlined.22 (result i32) - local.get $1 - local.set $8 - local.get $3 - i32.const 2 - i32.add - local.set $9 - local.get $8 - local.get $9 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.22 - end - i32.const 255 - i32.and - i32.const 8 - i32.shl - i32.or - block $assembly/index/load8|inlined.23 (result i32) - local.get $1 - local.set $10 - local.get $3 - i32.const 3 - i32.add - local.set $11 - local.get $10 - local.get $11 - i32.add - i32.load8_u - br $assembly/index/load8|inlined.23 - end - i32.const 255 - i32.and - i32.const 0 - i32.shl - i32.or - br $assembly/index/load32be|inlined.5 - end - local.set $14 - local.get $12 - local.get $13 - i32.const 2 - i32.shl - i32.add - local.get $14 - i32.store - global.get $assembly/index/i - i32.const 1 - i32.add - global.set $assembly/index/i - br $for-loop|0 - end - end - global.get $assembly/index/wPtr + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + call $assembly/common/init + global.get $assembly/common/wPtr local.get $0 - call $assembly/simd/digest64V128 + call $assembly/common/hashBlocks + global.get $assembly/common/w64Ptr + call $assembly/common/hashPreCompW + local.get $1 + local.set $2 + i32.const 0 + local.set $3 + global.get $assembly/common/H0 + call $~lib/polyfills/bswap + local.set $4 + local.get $2 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $4 + i32.store + local.get $1 + local.set $5 + i32.const 1 + local.set $6 + global.get $assembly/common/H1 + call $~lib/polyfills/bswap + local.set $7 + local.get $5 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store + local.get $1 + local.set $8 + i32.const 2 + local.set $9 + global.get $assembly/common/H2 + call $~lib/polyfills/bswap + local.set $10 + local.get $8 + local.get $9 + i32.const 2 + i32.shl + i32.add + local.get $10 + i32.store + local.get $1 + local.set $11 + i32.const 3 + local.set $12 + global.get $assembly/common/H3 + call $~lib/polyfills/bswap + local.set $13 + local.get $11 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $13 + i32.store + local.get $1 + local.set $14 + i32.const 4 + local.set $15 + global.get $assembly/common/H4 + call $~lib/polyfills/bswap + local.set $16 + local.get $14 + local.get $15 + i32.const 2 + i32.shl + i32.add + local.get $16 + i32.store + local.get $1 + local.set $17 + i32.const 5 + local.set $18 + global.get $assembly/common/H5 + call $~lib/polyfills/bswap + local.set $19 + local.get $17 + local.get $18 + i32.const 2 + i32.shl + i32.add + local.get $19 + i32.store + local.get $1 + local.set $20 + i32.const 6 + local.set $21 + global.get $assembly/common/H6 + call $~lib/polyfills/bswap + local.set $22 + local.get $20 + local.get $21 + i32.const 2 + i32.shl + i32.add + local.get $22 + i32.store + local.get $1 + local.set $23 + i32.const 7 + local.set $24 + global.get $assembly/common/H7 + call $~lib/polyfills/bswap + local.set $25 + local.get $23 + local.get $24 + i32.const 2 + i32.shl + i32.add + local.get $25 + i32.store ) (func $~start call $start:assembly/index From c09663fd71512ee99c3dc5e73cf892e9c6cde89f Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 01:34:39 +0700 Subject: [PATCH 05/47] feat: make TS code simd aware --- packages/as-sha256/src/index.ts | 69 ++++++++++++++++---------- packages/as-sha256/src/sha256.ts | 2 +- packages/as-sha256/src/wasm.ts | 18 ++++--- packages/as-sha256/src/wasmCode.ts | 3 +- packages/as-sha256/src/wasmSimdCode.ts | 6 +++ 5 files changed, 65 insertions(+), 33 deletions(-) create mode 100644 packages/as-sha256/src/wasmSimdCode.ts diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 9de32b8d4..c95338fd1 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -1,11 +1,13 @@ +import {simd} from "wasm-feature-detect"; import {allocUnsafe} from "./alloc.js"; -import {newInstance} from "./wasm.js"; +import {newInstance, WasmSimdContext} from "./wasm.js"; import type {HashObject} from "./hashObject.js"; import {byteArrayIntoHashObject, byteArrayToHashObject, hashObjectToByteArray} from "./hashObject.js"; import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; -const ctx = newInstance(); +const hasSimd = await simd(); +const ctx = newInstance(hasSimd); const wasmInputValue = ctx.input.value; const wasmOutputValue = ctx.output.value; const inputUint8Array = new Uint8Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); @@ -119,20 +121,24 @@ export function batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { } } - // set up input buffer for v128 - inputUint8Array.set(inputs[0], 0); - inputUint8Array.set(inputs[1], 64); - inputUint8Array.set(inputs[2], 128); - inputUint8Array.set(inputs[3], 192); + if (hasSimd) { + // set up input buffer for v128 + inputUint8Array.set(inputs[0], 0); + inputUint8Array.set(inputs[1], 64); + inputUint8Array.set(inputs[2], 128); + inputUint8Array.set(inputs[3], 192); - ctx.batchHash4UintArray64s(wasmOutputValue); + (ctx as WasmSimdContext).batchHash4UintArray64s(wasmOutputValue); - const output0 = allocDigest(); - const output1 = allocDigestOffset(32); - const output2 = allocDigestOffset(64); - const output3 = allocDigestOffset(96); + const output0 = allocDigest(); + const output1 = allocDigestOffset(32); + const output2 = allocDigestOffset(64); + const output3 = allocDigestOffset(96); - return [output0, output1, output2, output3]; + return [output0, output1, output2, output3]; + } + + return inputs.map(digest64); } /** @@ -150,6 +156,14 @@ export function batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { throw new Error("Input length must be 8"); } + if (!hasSimd) { + const output: HashObject[] = new Array(4); + for (let i = 0; i < 4; i++) { + output[i] = digest64HashObjects(inputs[2 * i], inputs[2 * i + 1]); + } + return output; + } + // inputUint8Array is 256 bytes // inputUint32Array is 64 items // v128 0 @@ -248,7 +262,7 @@ export function batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { inputUint32Array[62] = inputs[5].h7; inputUint32Array[63] = inputs[7].h7; - ctx.batchHash4HashObjectInputs(wasmOutputValue); + (ctx as WasmSimdContext).batchHash4HashObjectInputs(wasmOutputValue); const output0 = byteArrayToHashObject(outputUint8Array, 0); const output1 = byteArrayToHashObject(outputUint8Array, 32); @@ -268,19 +282,24 @@ export function hashInto(input: Uint8Array, output: Uint8Array): void { if (input.length !== output.length * 2) { throw new Error(`Invalid output length ${output.length}`); } - // for every 64 x 4 = 256 bytes, do the batch hash - const endBatch = Math.floor(input.length / 256); - for (let i = 0; i < endBatch; i++) { - inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); - ctx.batchHash4UintArray64s(wasmOutputValue); - output.set(outputUint8Array.subarray(0, 128), i * 128); + + let num64ByteChunksHashed = 0; + let num64ByteChunksRemaining = input.length / 64; + if (hasSimd) { + // for every 64 x 4 = 256 bytes, do the batch hash if SIMD is present + const num256ByteChunks = Math.floor(input.length / 256); + for (let i = 0; i < num256ByteChunks; i++) { + inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); + (ctx as WasmSimdContext).batchHash4UintArray64s(wasmOutputValue); + output.set(outputUint8Array.subarray(0, 128), i * 128); + } + num64ByteChunksHashed = num256ByteChunks * 4; + num64ByteChunksRemaining -= num64ByteChunksHashed; } - const numHashed = endBatch * 4; - const remainingHash = Math.floor((input.length % 256) / 64); - const inputOffset = numHashed * 64; - const outputOffset = numHashed * 32; - for (let i = 0; i < remainingHash; i++) { + const inputOffset = num64ByteChunksHashed * 64; + const outputOffset = num64ByteChunksHashed * 32; + for (let i = 0; i < num64ByteChunksRemaining; i++) { inputUint8Array.set(input.subarray(inputOffset + i * 64, inputOffset + (i + 1) * 64), 0); ctx.digest64(wasmInputValue, wasmOutputValue); output.set(outputUint8Array.subarray(0, 32), outputOffset + i * 32); diff --git a/packages/as-sha256/src/sha256.ts b/packages/as-sha256/src/sha256.ts index 16b38302a..e1a31b40b 100644 --- a/packages/as-sha256/src/sha256.ts +++ b/packages/as-sha256/src/sha256.ts @@ -11,7 +11,7 @@ export default class SHA256 { private uint8OutputArray: Uint8Array; constructor() { - this.ctx = newInstance(); + this.ctx = newInstance(false); this.wasmInputValue = this.ctx.input.value; this.wasmOutputValue = this.ctx.output.value; this.uint8InputArray = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); diff --git a/packages/as-sha256/src/wasm.ts b/packages/as-sha256/src/wasm.ts index dc78e2855..ae7018f48 100644 --- a/packages/as-sha256/src/wasm.ts +++ b/packages/as-sha256/src/wasm.ts @@ -1,10 +1,9 @@ -import {wasmCode} from "./wasmCode.js"; - -const _module = new WebAssembly.Module(wasmCode); +import {wasmCode} from "./wasmCode"; +import {wasmSimdCode} from "./wasmSimdCode"; export interface WasmContext { - readonly INPUT_LENGTH: number; readonly PARALLEL_FACTOR: number; + readonly INPUT_LENGTH: number; memory: { buffer: ArrayBuffer; }; @@ -21,6 +20,9 @@ export interface WasmContext { digest(length: number): void; digest64(inPtr: number, outPtr: number): void; +} + +export interface WasmSimdContext extends WasmContext { batchHash4UintArray64s(outPtr: number): void; batchHash4HashObjectInputs(outPtr: number): void; } @@ -34,6 +36,10 @@ const importObj = { }, }; -export function newInstance(): WasmContext { - return new WebAssembly.Instance(_module, importObj).exports as unknown as WasmContext; +export function newInstance(haveSimd: T): T extends true ? WasmSimdContext : WasmContext { + return (haveSimd + ? new WebAssembly.Instance(new WebAssembly.Module(wasmSimdCode), importObj).exports + : new WebAssembly.Instance(new WebAssembly.Module(wasmCode), importObj).exports) as unknown as T extends true + ? WasmSimdContext + : WasmContext; } diff --git a/packages/as-sha256/src/wasmCode.ts b/packages/as-sha256/src/wasmCode.ts index 822328f36..93a5ad04a 100644 --- a/packages/as-sha256/src/wasmCode.ts +++ b/packages/as-sha256/src/wasmCode.ts @@ -2,4 +2,5 @@ // DO NOT modify this file by hand! // eslint-disable-next-line prettier/prettier -export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,30,29,0,0,0,0,0,6,1,2,2,2,1,2,1,1,2,4,4,0,0,1,3,3,3,0,4,0,3,3,4,5,3,1,0,1,6,222,4,60,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,158,1,12,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,27,12,73,78,80,85,84,95,76,69,78,71,84,72,3,28,5,105,110,112,117,116,3,54,6,111,117,116,112,117,116,3,56,4,105,110,105,116,0,17,6,117,112,100,97,116,101,0,19,5,102,105,110,97,108,0,21,6,100,105,103,101,115,116,0,22,8,100,105,103,101,115,116,54,52,0,24,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,27,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,166,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,74,0,65,231,204,167,208,6,36,31,65,133,221,158,219,123,36,32,65,242,230,187,227,3,36,33,65,186,234,191,170,122,36,34,65,255,164,185,136,5,36,35,65,140,209,149,216,121,36,36,65,171,179,143,252,1,36,37,65,153,154,131,223,5,36,38,65,0,36,58,65,0,36,59,11,227,3,1,1,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,16,73,4,64,32,0,35,47,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,16,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,32,0,35,47,65,16,107,65,2,116,106,40,2,0,32,0,35,47,65,7,107,65,2,116,106,40,2,0,32,0,35,47,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,47,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,34,1,106,40,2,0,32,1,35,29,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,1,35,41,34,2,113,32,1,35,39,34,1,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,174,1,1,2,127,35,59,32,1,106,36,59,35,58,4,64,65,192,0,35,58,107,34,2,32,1,76,4,64,35,51,35,58,106,32,0,32,2,252,10,0,0,35,58,32,2,106,36,58,65,192,0,35,58,107,33,2,32,1,65,192,0,35,58,107,107,33,1,35,53,35,51,16,18,65,0,36,58,5,35,51,35,58,106,32,0,32,1,252,10,0,0,35,58,32,1,106,36,58,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,53,32,0,32,2,106,16,18,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,51,35,58,106,32,0,32,2,106,32,1,252,10,0,0,35,58,32,1,106,36,58,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,146,2,1,2,127,35,59,65,63,113,65,63,73,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,59,65,63,113,65,56,79,4,64,35,51,35,58,106,34,1,65,192,0,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,53,35,51,16,18,65,0,36,58,11,35,59,65,63,113,65,63,79,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,51,35,58,106,34,1,65,56,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,51,35,59,65,128,128,128,128,2,109,16,20,54,2,56,35,51,35,59,65,3,116,16,20,54,2,60,35,53,35,51,16,18,32,0,35,31,16,20,54,2,0,32,0,35,32,16,20,54,2,4,32,0,35,33,16,20,54,2,8,32,0,35,34,16,20,54,2,12,32,0,35,35,16,20,54,2,16,32,0,35,36,16,20,54,2,20,32,0,35,37,16,20,54,2,24,32,0,35,38,16,20,54,2,28,11,14,0,16,17,35,55,32,0,16,19,35,57,16,21,11,253,1,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,1,113,32,2,35,39,34,2,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,86,0,16,17,35,53,32,0,16,18,35,30,16,23,32,1,35,31,16,20,54,2,0,32,1,35,32,16,20,54,2,4,32,1,35,33,16,20,54,2,8,32,1,35,34,16,20,54,2,12,32,1,35,35,16,20,54,2,16,32,1,35,36,16,20,54,2,20,32,1,35,37,16,20,54,2,24,32,1,35,38,16,20,54,2,28,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,25,32,1,35,0,253,27,0,16,20,54,2,0,32,1,35,1,253,27,0,16,20,54,2,4,32,1,35,2,253,27,0,16,20,54,2,8,32,1,35,3,253,27,0,16,20,54,2,12,32,1,35,4,253,27,0,16,20,54,2,16,32,1,35,5,253,27,0,16,20,54,2,20,32,1,35,6,253,27,0,16,20,54,2,24,32,1,35,7,253,27,0,16,20,54,2,28,32,1,35,0,253,27,1,16,20,54,2,32,32,1,35,1,253,27,1,16,20,54,2,36,32,1,35,2,253,27,1,16,20,54,2,40,32,1,35,3,253,27,1,16,20,54,2,44,32,1,35,4,253,27,1,16,20,54,2,48,32,1,35,5,253,27,1,16,20,54,2,52,32,1,35,6,253,27,1,16,20,54,2,56,32,1,35,7,253,27,1,16,20,54,2,60,32,1,65,64,107,35,0,253,27,2,16,20,54,2,0,32,1,35,1,253,27,2,16,20,54,2,68,32,1,35,2,253,27,2,16,20,54,2,72,32,1,35,3,253,27,2,16,20,54,2,76,32,1,35,4,253,27,2,16,20,54,2,80,32,1,35,5,253,27,2,16,20,54,2,84,32,1,35,6,253,27,2,16,20,54,2,88,32,1,35,7,253,27,2,16,20,54,2,92,32,1,35,0,253,27,3,16,20,54,2,96,32,1,35,1,253,27,3,16,20,54,2,100,32,1,35,2,253,27,3,16,20,54,2,104,32,1,35,3,253,27,3,16,20,54,2,108,32,1,35,4,253,27,3,16,20,54,2,112,32,1,35,5,253,27,3,16,20,54,2,116,32,1,35,6,253,27,3,16,20,54,2,120,32,1,35,7,253,27,3,16,20,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,207,2,1,4,127,65,0,36,47,3,64,35,47,65,16,73,4,64,35,47,65,2,116,34,1,65,1,106,33,2,35,53,32,1,65,2,116,106,32,1,65,3,106,34,3,35,55,34,4,106,45,0,0,32,1,32,4,106,45,0,0,65,24,116,32,2,32,4,106,45,0,0,65,16,116,114,32,1,65,2,106,34,1,32,4,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,2,65,2,116,106,35,55,34,2,35,47,65,16,106,65,2,116,34,4,65,3,106,106,45,0,0,32,2,32,4,106,45,0,0,65,24,116,32,4,65,1,106,32,2,106,45,0,0,65,16,116,114,32,4,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,1,65,2,116,106,35,55,34,1,35,47,65,32,106,65,2,116,34,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,2,65,1,106,32,1,106,45,0,0,65,16,116,114,32,2,65,2,106,32,1,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,3,65,2,116,106,35,55,34,1,35,47,65,48,106,65,2,116,34,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,2,65,1,106,32,1,106,45,0,0,65,16,116,114,32,2,65,2,106,32,1,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,35,53,32,0,16,26,11,103,1,2,127,65,0,36,47,3,64,35,47,65,192,0,73,4,64,35,47,65,2,116,34,1,35,53,106,35,55,34,2,32,1,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,65,1,106,32,2,106,45,0,0,65,16,116,114,32,1,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,35,53,32,0,16,26,11,63,0,16,16,65,196,10,40,2,0,36,29,65,148,13,40,2,0,36,30,65,192,0,16,11,36,50,35,50,36,51,65,128,8,16,11,36,52,35,52,36,53,65,128,4,16,11,36,54,35,54,36,55,65,32,16,11,36,56,35,56,36,57,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); + +export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,1,127,0,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,20,19,0,0,0,0,0,6,1,3,3,1,4,0,0,1,2,2,2,0,4,5,3,1,0,1,6,177,1,35,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,86,9,12,73,78,80,85,84,95,76,69,78,71,84,72,3,0,5,105,110,112,117,116,3,29,6,111,117,116,112,117,116,3,31,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,13,5,102,105,110,97,108,0,15,6,100,105,103,101,115,116,0,16,8,100,105,103,101,115,116,54,52,0,18,6,109,101,109,111,114,121,2,0,8,1,19,12,1,18,10,209,22,19,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,22,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,22,11,35,22,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,23,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,24,32,2,40,2,0,65,124,113,65,4,106,106,36,24,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,3,65,133,221,158,219,123,36,4,65,242,230,187,227,3,36,5,65,186,234,191,170,122,36,6,65,255,164,185,136,5,36,7,65,140,209,149,216,121,36,8,65,171,179,143,252,1,36,9,65,153,154,131,223,5,36,10,65,0,36,33,65,0,36,34,11,227,3,1,1,127,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,65,0,36,19,3,64,35,19,65,16,73,4,64,32,0,35,19,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,19,65,1,106,36,19,12,1,11,11,65,16,36,19,3,64,35,19,65,192,0,73,4,64,32,0,35,19,65,2,116,106,32,0,35,19,65,16,107,65,2,116,106,40,2,0,32,0,35,19,65,7,107,65,2,116,106,40,2,0,32,0,35,19,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,19,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,19,65,1,106,36,19,12,1,11,11,65,0,36,19,3,64,35,19,65,192,0,73,4,64,32,0,35,19,65,2,116,34,1,106,40,2,0,32,1,35,1,106,40,2,0,35,18,35,15,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,15,34,1,35,16,113,35,17,32,1,65,127,115,113,115,106,106,106,36,20,35,11,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,12,34,1,35,13,34,2,113,32,1,35,11,34,1,113,32,1,32,2,113,115,115,106,36,21,35,17,36,18,35,16,36,17,35,15,36,16,35,14,35,20,106,36,15,35,13,36,14,35,12,36,13,35,11,36,12,35,20,35,21,106,36,11,35,19,65,1,106,36,19,12,1,11,11,35,3,35,11,106,36,3,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,11,174,1,1,2,127,35,34,32,1,106,36,34,35,33,4,64,65,192,0,35,33,107,34,2,32,1,76,4,64,35,26,35,33,106,32,0,32,2,252,10,0,0,35,33,32,2,106,36,33,65,192,0,35,33,107,33,2,32,1,65,192,0,35,33,107,107,33,1,35,28,35,26,16,12,65,0,36,33,5,35,26,35,33,106,32,0,32,1,252,10,0,0,35,33,32,1,106,36,33,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,28,32,0,32,2,106,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,26,35,33,106,32,0,32,2,106,32,1,252,10,0,0,35,33,32,1,106,36,33,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,146,2,1,2,127,35,34,65,63,113,65,63,73,4,64,35,26,35,33,106,65,128,1,58,0,0,35,33,65,1,106,36,33,11,35,34,65,63,113,65,56,79,4,64,35,26,35,33,106,34,1,65,192,0,35,33,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,28,35,26,16,12,65,0,36,33,11,35,34,65,63,113,65,63,79,4,64,35,26,35,33,106,65,128,1,58,0,0,35,33,65,1,106,36,33,11,35,26,35,33,106,34,1,65,56,35,33,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,26,35,34,65,128,128,128,128,2,109,16,14,54,2,56,35,26,35,34,65,3,116,16,14,54,2,60,35,28,35,26,16,12,32,0,35,3,16,14,54,2,0,32,0,35,4,16,14,54,2,4,32,0,35,5,16,14,54,2,8,32,0,35,6,16,14,54,2,12,32,0,35,7,16,14,54,2,16,32,0,35,8,16,14,54,2,20,32,0,35,9,16,14,54,2,24,32,0,35,10,16,14,54,2,28,11,14,0,16,11,35,30,32,0,16,13,35,32,16,15,11,253,1,1,2,127,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,65,0,36,19,3,64,35,19,65,192,0,73,4,64,32,0,35,19,65,2,116,106,40,2,0,35,18,35,15,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,15,34,1,35,16,113,35,17,32,1,65,127,115,113,115,106,106,36,20,35,11,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,12,34,2,35,13,34,1,113,32,2,35,11,34,2,113,32,1,32,2,113,115,115,106,36,21,35,17,36,18,35,16,36,17,35,15,36,16,35,14,35,20,106,36,15,35,13,36,14,35,12,36,13,35,11,36,12,35,20,35,21,106,36,11,35,19,65,1,106,36,19,12,1,11,11,35,3,35,11,106,36,3,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,11,86,0,16,11,35,28,32,0,16,12,35,2,16,17,32,1,35,3,16,14,54,2,0,32,1,35,4,16,14,54,2,4,32,1,35,5,16,14,54,2,8,32,1,35,6,16,14,54,2,12,32,1,35,7,16,14,54,2,16,32,1,35,8,16,14,54,2,20,32,1,35,9,16,14,54,2,24,32,1,35,10,16,14,54,2,28,11,82,0,65,196,10,40,2,0,36,1,65,148,13,40,2,0,36,2,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,23,65,192,0,16,10,36,25,35,25,36,26,65,128,8,16,10,36,27,35,27,36,28,65,128,4,16,10,36,29,35,29,36,30,65,32,16,10,36,31,35,31,36,32,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); diff --git a/packages/as-sha256/src/wasmSimdCode.ts b/packages/as-sha256/src/wasmSimdCode.ts new file mode 100644 index 000000000..c95183d78 --- /dev/null +++ b/packages/as-sha256/src/wasmSimdCode.ts @@ -0,0 +1,6 @@ +// This file was autogenerated by scripts/codegen.ts +// DO NOT modify this file by hand! + +// eslint-disable-next-line prettier/prettier + +export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,30,29,0,0,0,0,0,6,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,0,0,3,3,3,0,4,5,3,1,0,1,6,217,4,59,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,140,1,11,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,27,5,105,110,112,117,116,3,53,6,111,117,116,112,117,116,3,55,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,158,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,52,32,2,65,2,116,106,32,2,65,3,106,34,4,35,54,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,52,32,3,65,2,116,106,35,54,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,52,32,2,65,2,116,106,35,54,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,52,32,4,65,2,116,106,35,54,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,52,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,52,106,35,54,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,52,32,0,16,19,11,74,0,65,231,204,167,208,6,36,30,65,133,221,158,219,123,36,31,65,242,230,187,227,3,36,32,65,186,234,191,170,122,36,33,65,255,164,185,136,5,36,34,65,140,209,149,216,121,36,35,65,171,179,143,252,1,36,36,65,153,154,131,223,5,36,37,65,0,36,57,65,0,36,58,11,227,3,1,1,127,35,30,36,38,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,65,0,36,46,3,64,35,46,65,16,73,4,64,32,0,35,46,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,46,65,1,106,36,46,12,1,11,11,65,16,36,46,3,64,35,46,65,192,0,73,4,64,32,0,35,46,65,2,116,106,32,0,35,46,65,16,107,65,2,116,106,40,2,0,32,0,35,46,65,7,107,65,2,116,106,40,2,0,32,0,35,46,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,46,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,46,65,1,106,36,46,12,1,11,11,65,0,36,46,3,64,35,46,65,192,0,73,4,64,32,0,35,46,65,2,116,34,1,106,40,2,0,32,1,35,28,106,40,2,0,35,45,35,42,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,42,34,1,35,43,113,35,44,32,1,65,127,115,113,115,106,106,106,36,47,35,38,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,39,34,1,35,40,34,2,113,32,1,35,38,34,1,113,32,1,32,2,113,115,115,106,36,48,35,44,36,45,35,43,36,44,35,42,36,43,35,41,35,47,106,36,42,35,40,36,41,35,39,36,40,35,38,36,39,35,47,35,48,106,36,38,35,46,65,1,106,36,46,12,1,11,11,35,30,35,38,106,36,30,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,11,174,1,1,2,127,35,58,32,1,106,36,58,35,57,4,64,65,192,0,35,57,107,34,2,32,1,76,4,64,35,50,35,57,106,32,0,32,2,252,10,0,0,35,57,32,2,106,36,57,65,192,0,35,57,107,33,2,32,1,65,192,0,35,57,107,107,33,1,35,52,35,50,16,23,65,0,36,57,5,35,50,35,57,106,32,0,32,1,252,10,0,0,35,57,32,1,106,36,57,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,52,32,0,32,2,106,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,50,35,57,106,32,0,32,2,106,32,1,252,10,0,0,35,57,32,1,106,36,57,11,11,146,2,1,2,127,35,58,65,63,113,65,63,73,4,64,35,50,35,57,106,65,128,1,58,0,0,35,57,65,1,106,36,57,11,35,58,65,63,113,65,56,79,4,64,35,50,35,57,106,34,1,65,192,0,35,57,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,52,35,50,16,23,65,0,36,57,11,35,58,65,63,113,65,63,79,4,64,35,50,35,57,106,65,128,1,58,0,0,35,57,65,1,106,36,57,11,35,50,35,57,106,34,1,65,56,35,57,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,50,35,58,65,128,128,128,128,2,109,16,18,54,2,56,35,50,35,58,65,3,116,16,18,54,2,60,35,52,35,50,16,23,32,0,35,30,16,18,54,2,0,32,0,35,31,16,18,54,2,4,32,0,35,32,16,18,54,2,8,32,0,35,33,16,18,54,2,12,32,0,35,34,16,18,54,2,16,32,0,35,35,16,18,54,2,20,32,0,35,36,16,18,54,2,24,32,0,35,37,16,18,54,2,28,11,14,0,16,22,35,54,32,0,16,24,35,56,16,25,11,253,1,1,2,127,35,30,36,38,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,65,0,36,46,3,64,35,46,65,192,0,73,4,64,32,0,35,46,65,2,116,106,40,2,0,35,45,35,42,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,42,34,1,35,43,113,35,44,32,1,65,127,115,113,115,106,106,36,47,35,38,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,39,34,2,35,40,34,1,113,32,2,35,38,34,2,113,32,1,32,2,113,115,115,106,36,48,35,44,36,45,35,43,36,44,35,42,36,43,35,41,35,47,106,36,42,35,40,36,41,35,39,36,40,35,38,36,39,35,47,35,48,106,36,38,35,46,65,1,106,36,46,12,1,11,11,35,30,35,38,106,36,30,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,11,86,0,16,22,35,52,32,0,16,23,35,29,16,27,32,1,35,30,16,18,54,2,0,32,1,35,31,16,18,54,2,4,32,1,35,32,16,18,54,2,8,32,1,35,33,16,18,54,2,12,32,1,35,34,16,18,54,2,16,32,1,35,35,16,18,54,2,20,32,1,35,36,16,18,54,2,24,32,1,35,37,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,28,65,148,13,40,2,0,36,29,65,192,0,16,11,36,49,35,49,36,50,65,128,8,16,11,36,51,35,51,36,52,65,128,4,16,11,36,53,35,53,36,54,65,32,16,11,36,55,35,55,36,56,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); From 5c91ea14d793c7955b6bb652e8036dee1385d65d Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 01:35:28 +0700 Subject: [PATCH 06/47] feat: make as-sha256 an ES module --- packages/as-sha256/tsconfig.build.json | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 packages/as-sha256/tsconfig.build.json diff --git a/packages/as-sha256/tsconfig.build.json b/packages/as-sha256/tsconfig.build.json new file mode 100644 index 000000000..e62040309 --- /dev/null +++ b/packages/as-sha256/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "include": [ + "src" + ], + "compilerOptions": { + "typeRoots": [ + "../../node_modules/@types", + "./node_modules/@types", + "./types" + ], + "outDir": "lib", + "target": "esnext", + "module": "ESNext", + "moduleResolution": "node", + "pretty": true, + "strict": true, + "sourceMap": true, + "alwaysStrict": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitAny": true, + "noImplicitThis": true, + "noImplicitReturns": true, + "esModuleInterop": true, + "declaration": true, + "declarationMap": true, + "incremental": false, + "preserveWatchOutput": true + } +} \ No newline at end of file From 4a314eb6a8f57138a8ec475f39c6f8da11571de7 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 01:35:40 +0700 Subject: [PATCH 07/47] chore: update ts-node and yarn.lock --- yarn.lock | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/yarn.lock b/yarn.lock index 8ceb785d2..2d5079bad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13888,6 +13888,11 @@ wait-port@^1.1.0: commander "^9.3.0" debug "^4.3.4" +wasm-feature-detect@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz#4e9f55b0a64d801f372fbb0324ed11ad3abd0c78" + integrity sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ== + watchpack-chokidar2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" From f314a8868c8e27e5a3f6d1a425b556f5aafa8b50 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 03:47:55 +0700 Subject: [PATCH 08/47] test: get as-sha256 tests to run --- packages/as-sha256/.mocharc.yaml | 6 +++--- packages/as-sha256/src/wasm.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/as-sha256/.mocharc.yaml b/packages/as-sha256/.mocharc.yaml index 206d46c98..49b6db8ad 100644 --- a/packages/as-sha256/.mocharc.yaml +++ b/packages/as-sha256/.mocharc.yaml @@ -1,7 +1,7 @@ colors: true require: -- ts-node/register -extension: + - ts-node/register +extension: - "ts" -loader: +loader: - ts-node/esm diff --git a/packages/as-sha256/src/wasm.ts b/packages/as-sha256/src/wasm.ts index ae7018f48..1ec768826 100644 --- a/packages/as-sha256/src/wasm.ts +++ b/packages/as-sha256/src/wasm.ts @@ -1,5 +1,5 @@ -import {wasmCode} from "./wasmCode"; -import {wasmSimdCode} from "./wasmSimdCode"; +import {wasmCode} from "./wasmCode.js"; +import {wasmSimdCode} from "./wasmSimdCode.js"; export interface WasmContext { readonly PARALLEL_FACTOR: number; From d7c77f15ffca599bd89e363eff6c62b39b109c0e Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 17:56:28 +0700 Subject: [PATCH 09/47] fix: assembly bug, missing export --- packages/as-sha256/assembly/index.simd.ts | 1 + packages/as-sha256/assembly/index.ts | 1 + packages/as-sha256/build/optimized.simd.wasm | Bin 16773 -> 16796 bytes packages/as-sha256/build/optimized.simd.wat | 2 ++ packages/as-sha256/build/optimized.wasm | Bin 4159 -> 4182 bytes packages/as-sha256/build/optimized.wat | 2 ++ packages/as-sha256/build/untouched.simd.wasm | Bin 27387 -> 27405 bytes packages/as-sha256/build/untouched.simd.wat | 1 + packages/as-sha256/build/untouched.wasm | Bin 6604 -> 6622 bytes packages/as-sha256/build/untouched.wat | 1 + 10 files changed, 8 insertions(+) diff --git a/packages/as-sha256/assembly/index.simd.ts b/packages/as-sha256/assembly/index.simd.ts index 73d3edd54..ea9c9019f 100644 --- a/packages/as-sha256/assembly/index.simd.ts +++ b/packages/as-sha256/assembly/index.simd.ts @@ -17,6 +17,7 @@ import { export { INPUT_LENGTH, + PARALLEL_FACTOR, input, output, init, diff --git a/packages/as-sha256/assembly/index.ts b/packages/as-sha256/assembly/index.ts index 0fbf74218..36e4c61de 100644 --- a/packages/as-sha256/assembly/index.ts +++ b/packages/as-sha256/assembly/index.ts @@ -1,5 +1,6 @@ export { INPUT_LENGTH, + PARALLEL_FACTOR, input, output, init, diff --git a/packages/as-sha256/build/optimized.simd.wasm b/packages/as-sha256/build/optimized.simd.wasm index eff7299b46c8f4726af4ca7f82f38c06939d99fd..7ad82ba3e248baf78f6fd82a91a2321f7b0e8b27 100644 GIT binary patch delta 1296 zcmb_bO=uHA6yBNL*4k}#wf@r9%;vqOY11@K(`?g?kPQBy60j8MO+4tuE&hZ=sCr1D z6g&vpt{xQeq97;;(o^-Iphpk&CisUG6g+ya=$mb}L_tpmvh%%}@4cD%-Zyiz?9ME^ zeoFsn?0qsn&gPf<{m-n(48NP-)9pFMw} zsyof+E>soBE$-HnX)7zZO;WTlA}I+1*0%@~n$AMU=pj6#0@@@z#%TR#2v z{NW{x%Afa_t~4RYt8Z?;y@)6uEnZt?*duSF{zo9GuLCQbw6pAUyJWRDQ)09?y{e@O11UDw4w5Ak{b4{hm4ULii-iff3zv|fO zhEm~HjisV2sKB6GjW7ra-*!7{36fx-3`xOctx~Rdo`*xw8)cGD(^UI(g}ytcD-b7M zUzC>xQ>!!xUanL;OhXa}VE~hmzyauoArBMKhy4)8KIp|b3_;q%UOIPpQHVgVhY=7E z_t0N*u?8_1^e|>VW{lS$FNm23*Cz@3V6!AeFEGT?eb6MVH*qiMlCk~tvQL|8*p zHuV!S)=t%frZ9umGpMY)*)+)ldXR92TmaN{e>P{2ht)mNNH@&|9-K)Q%CbOx32Mq2 z=BhKOE4e1*)ne{weUYS7r}7VuiQ)CL)JcVq^hX7?IpyWn(rOthIYU2w#@g!e9POEx zdR5`QYu6JRL{z8@ArvqO*b1}|h$_%V02HtYpaR19(kY)s` delta 1298 zcmb7DO=uHA6yBNLw6)vnww3!NW+M_it5#4@8r`mfxCr+MTD5~*>Qwv22k}Kot zXw)zn6|`vKSG58fBnb5-@bRGiBkgU&t%#a~h%gRnIi^6wE+(?G5kV{-X(75U zjGBK{sS%vskSL5f2}4woVWRO5i@H{Th_(_VqN7y6Z}XXgIBRmz^teUOl5R2)xMM3GvgMqSbdbPU!~5`L^dz7cy&%{Q6U+56xmE# zhm3Tl4%eJGHF-GuSenJQj#MLMUD96}WO0m3ZHAR&n6iRDI&ZWmXbNj)gj$q%?`D@w z0iQIbX8I-25HJav5cnl%K@gC@KmZc#M!+TLMlc|OSKp}^osht{(G4l1NB`;EgIZH{ zc}vyxg4&LZ{-+{}Dnj{CRFM=DqyH4q&^A?cL^dNIdKdH=y{OUJjEFlU;?9V;Ga~Mc zh&voTf=Xwe+End diff --git a/packages/as-sha256/build/optimized.simd.wat b/packages/as-sha256/build/optimized.simd.wat index ddfe89172..a22734da3 100644 --- a/packages/as-sha256/build/optimized.simd.wat +++ b/packages/as-sha256/build/optimized.simd.wat @@ -34,6 +34,7 @@ (global $assembly/simd/kV128Ptr (mut i32) (i32.const 0)) (global $assembly/simd/w64V12ArrayBuffer (mut i32) (i32.const 0)) (global $assembly/simd/w64V128Ptr (mut i32) (i32.const 0)) + (global $assembly/common/PARALLEL_FACTOR i32 (i32.const 4)) (global $assembly/common/INPUT_LENGTH i32 (i32.const 512)) (global $assembly/common/kPtr (mut i32) (i32.const 0)) (global $assembly/common/w64Ptr (mut i32) (i32.const 0)) @@ -108,6 +109,7 @@ (export "batchHash4UintArray64s" (func $assembly/index.simd/batchHash4UintArray64s)) (export "batchHash4HashObjectInputs" (func $assembly/index.simd/batchHash4HashObjectInputs)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) + (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) (export "output" (global $assembly/common/output)) (export "init" (func $assembly/common/init)) diff --git a/packages/as-sha256/build/optimized.wasm b/packages/as-sha256/build/optimized.wasm index 6dc43fb183f18a6214bea489d181d3675f050fe4..8869dc4fc0a99ce189e49b0d8d6485790bfba046 100644 GIT binary patch delta 1291 zcmbVLO=uHA6rP#g{LUtsw&`#BGubzYUPO!3B0}>Je+gPj^&m*Ey2YQ67HU;e5y69^ zvU<>icn|~yQ3`?z>cOK2y;wm+p`hT=iwG5clV&w29(2iOzBlu|H#6V+_KAL_FYHa; z=cdNcl^6HjTem;$ZQnV%dwin2dFR&gZ4S?k;ux08o68ehaMSp%F^9zt96B;R<@Co7 zPfuB(=hyHBmv@HA__;!-gig&+1uEqWY0- z_#ByLOOk0WcQE|;{N{_eaq;xqYj2L37=HfnXwfloeE8|ftyz=6?>8QtiJ2sxeR=uy zQIo>k^XHeiN#m8Pr{2YkL}q+?K`uI+*T6L%#7qX_CJPA@u9lg0kfx0od8Y( zW{?kO6CkdH=2AYd zSKuJ*2yLK9h4_r-C}*nl-#t?e>>RXIpq1iUwNed8v3Br?C@e8kCw9zKAw#^ZFDjbb zRT{KdU#V6D(*dof4O&bqDANKtXb+5ntjR%!)bL1^cIXI5pkId#za-bzKtfw!q`bqq zr~zma1;BSp_>_S^=?l%vZV3wDlOS3wr5R0Y5s>b6LXil|XtKzm4+_e&O^HPrypcg= z{hX9eNjvp~gWITTpJw6pRIwwf9_VIzxRCM(0Y@r0LT#xR#5umf9>BKFmr!3E-qlzn zt?ZG)6KOs8^B@hcr1azh>-ne`>&A_#x^+U`8 zmq6TtB!Pql9)Y9tztz*XW)9L8OBJa-c+sm{s)n>se;^SN zJSetoJ?KFYJSm9MlM1#6!LtW{Kt!S7!Gj0SmHK9zEkP7?$!5Mc?`P(H?_=M|HMw*$ z^^`!<(k*+ret&r>1Id}RJ27?a#Pq4j!&76^c1gQZ0~4sltbusL$Vzrvp-5FpA>5ntnjNL$ zqdH6ZB&t9lTA>?qKGDviB$_Wa@V|et5tuy?b;zULY}6Y8vQY$%fz$+MqrlQ)16+*D z`m`>I@!}%sp?aecs2<3xZV)ODIVGSAih;^OR&{}^vcQ!KMd%3>$EM=GfdLN`3zO-6 zP5zh=+5}&s(+AJ4>2(XdS)WQWY1g0(9ugwyX2!y8NdqK03h*#s8_jwIDo_@#nL;AY zAngn+>*Y9SHOZocxpAyoF(m`xN*2CMmrL;>f$Yo*zo-3SUys)HC{8D;t6SuNxrgb* z;}AJVj<%ghnYmfGl99tZ_h|=>#zDVTFehW)$aY$@j3rz6&^ghypN`;}zGm|VAKY$H zTEL8HWMLa%BS;vKLf{zSB1jq_5Tpz!B1jw1hah7>g?Cwk!!BuwEJ%^#KcgYAws4y} z!tGR((bB(a=x-9DC?V7iMF|-tN%}_x4gIHtW=u0UQ{e&?DCC$U5_3dij!4WAi8&%M zMwjQG{NAP diff --git a/packages/as-sha256/build/optimized.wat b/packages/as-sha256/build/optimized.wat index f707d2915..8a4e47183 100644 --- a/packages/as-sha256/build/optimized.wat +++ b/packages/as-sha256/build/optimized.wat @@ -7,6 +7,7 @@ (type $5 (func (param i32 i32 i32 i32))) (type $6 (func (param i32 i32 i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $assembly/common/PARALLEL_FACTOR i32 (i32.const 4)) (global $assembly/common/INPUT_LENGTH i32 (i32.const 512)) (global $assembly/common/kPtr (mut i32) (i32.const 0)) (global $assembly/common/w64Ptr (mut i32) (i32.const 0)) @@ -62,6 +63,7 @@ (data $8 (i32.const 1948) "<") (data $8.1 (i32.const 1960) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) + (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) (export "output" (global $assembly/common/output)) (export "init" (func $assembly/common/init)) diff --git a/packages/as-sha256/build/untouched.simd.wasm b/packages/as-sha256/build/untouched.simd.wasm index f74b6caf38f87237f95c4c7086dccc6e51e69cb7..fb653c99f3f8173358c26a9cace5c2a51f21606f 100644 GIT binary patch delta 41 xcmex;m9h64bBKQsGt=fqMsEoK DY1$2< delta 30 lcmca-e8zY~0i$3TCy%FJKxjz3kE@@1hzB#v=E;oS5&)aj2@n7P diff --git a/packages/as-sha256/build/untouched.wat b/packages/as-sha256/build/untouched.wat index fcc3a9d00..a4d0dfa15 100644 --- a/packages/as-sha256/build/untouched.wat +++ b/packages/as-sha256/build/untouched.wat @@ -68,6 +68,7 @@ (table $0 1 1 funcref) (elem $0 (i32.const 1)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) + (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) (export "output" (global $assembly/common/output)) (export "init" (func $assembly/common/init)) From 8f65f71f06742a7f30eb81a61b8a29af41099016 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 19 Dec 2024 17:57:04 +0700 Subject: [PATCH 10/47] chore: commit codgen wasm --- packages/as-sha256/src/wasmCode.ts | 2 +- packages/as-sha256/src/wasmSimdCode.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/as-sha256/src/wasmCode.ts b/packages/as-sha256/src/wasmCode.ts index 93a5ad04a..f99ae71cc 100644 --- a/packages/as-sha256/src/wasmCode.ts +++ b/packages/as-sha256/src/wasmCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,1,127,0,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,20,19,0,0,0,0,0,6,1,3,3,1,4,0,0,1,2,2,2,0,4,5,3,1,0,1,6,177,1,35,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,86,9,12,73,78,80,85,84,95,76,69,78,71,84,72,3,0,5,105,110,112,117,116,3,29,6,111,117,116,112,117,116,3,31,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,13,5,102,105,110,97,108,0,15,6,100,105,103,101,115,116,0,16,8,100,105,103,101,115,116,54,52,0,18,6,109,101,109,111,114,121,2,0,8,1,19,12,1,18,10,209,22,19,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,22,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,22,11,35,22,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,23,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,24,32,2,40,2,0,65,124,113,65,4,106,106,36,24,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,3,65,133,221,158,219,123,36,4,65,242,230,187,227,3,36,5,65,186,234,191,170,122,36,6,65,255,164,185,136,5,36,7,65,140,209,149,216,121,36,8,65,171,179,143,252,1,36,9,65,153,154,131,223,5,36,10,65,0,36,33,65,0,36,34,11,227,3,1,1,127,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,65,0,36,19,3,64,35,19,65,16,73,4,64,32,0,35,19,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,19,65,1,106,36,19,12,1,11,11,65,16,36,19,3,64,35,19,65,192,0,73,4,64,32,0,35,19,65,2,116,106,32,0,35,19,65,16,107,65,2,116,106,40,2,0,32,0,35,19,65,7,107,65,2,116,106,40,2,0,32,0,35,19,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,19,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,19,65,1,106,36,19,12,1,11,11,65,0,36,19,3,64,35,19,65,192,0,73,4,64,32,0,35,19,65,2,116,34,1,106,40,2,0,32,1,35,1,106,40,2,0,35,18,35,15,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,15,34,1,35,16,113,35,17,32,1,65,127,115,113,115,106,106,106,36,20,35,11,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,12,34,1,35,13,34,2,113,32,1,35,11,34,1,113,32,1,32,2,113,115,115,106,36,21,35,17,36,18,35,16,36,17,35,15,36,16,35,14,35,20,106,36,15,35,13,36,14,35,12,36,13,35,11,36,12,35,20,35,21,106,36,11,35,19,65,1,106,36,19,12,1,11,11,35,3,35,11,106,36,3,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,11,174,1,1,2,127,35,34,32,1,106,36,34,35,33,4,64,65,192,0,35,33,107,34,2,32,1,76,4,64,35,26,35,33,106,32,0,32,2,252,10,0,0,35,33,32,2,106,36,33,65,192,0,35,33,107,33,2,32,1,65,192,0,35,33,107,107,33,1,35,28,35,26,16,12,65,0,36,33,5,35,26,35,33,106,32,0,32,1,252,10,0,0,35,33,32,1,106,36,33,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,28,32,0,32,2,106,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,26,35,33,106,32,0,32,2,106,32,1,252,10,0,0,35,33,32,1,106,36,33,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,146,2,1,2,127,35,34,65,63,113,65,63,73,4,64,35,26,35,33,106,65,128,1,58,0,0,35,33,65,1,106,36,33,11,35,34,65,63,113,65,56,79,4,64,35,26,35,33,106,34,1,65,192,0,35,33,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,28,35,26,16,12,65,0,36,33,11,35,34,65,63,113,65,63,79,4,64,35,26,35,33,106,65,128,1,58,0,0,35,33,65,1,106,36,33,11,35,26,35,33,106,34,1,65,56,35,33,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,26,35,34,65,128,128,128,128,2,109,16,14,54,2,56,35,26,35,34,65,3,116,16,14,54,2,60,35,28,35,26,16,12,32,0,35,3,16,14,54,2,0,32,0,35,4,16,14,54,2,4,32,0,35,5,16,14,54,2,8,32,0,35,6,16,14,54,2,12,32,0,35,7,16,14,54,2,16,32,0,35,8,16,14,54,2,20,32,0,35,9,16,14,54,2,24,32,0,35,10,16,14,54,2,28,11,14,0,16,11,35,30,32,0,16,13,35,32,16,15,11,253,1,1,2,127,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,65,0,36,19,3,64,35,19,65,192,0,73,4,64,32,0,35,19,65,2,116,106,40,2,0,35,18,35,15,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,15,34,1,35,16,113,35,17,32,1,65,127,115,113,115,106,106,36,20,35,11,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,12,34,2,35,13,34,1,113,32,2,35,11,34,2,113,32,1,32,2,113,115,115,106,36,21,35,17,36,18,35,16,36,17,35,15,36,16,35,14,35,20,106,36,15,35,13,36,14,35,12,36,13,35,11,36,12,35,20,35,21,106,36,11,35,19,65,1,106,36,19,12,1,11,11,35,3,35,11,106,36,3,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,11,86,0,16,11,35,28,32,0,16,12,35,2,16,17,32,1,35,3,16,14,54,2,0,32,1,35,4,16,14,54,2,4,32,1,35,5,16,14,54,2,8,32,1,35,6,16,14,54,2,12,32,1,35,7,16,14,54,2,16,32,1,35,8,16,14,54,2,20,32,1,35,9,16,14,54,2,24,32,1,35,10,16,14,54,2,28,11,82,0,65,196,10,40,2,0,36,1,65,148,13,40,2,0,36,2,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,23,65,192,0,16,10,36,25,35,25,36,26,65,128,8,16,10,36,27,35,27,36,28,65,128,4,16,10,36,29,35,29,36,30,65,32,16,10,36,31,35,31,36,32,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); +export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,1,127,0,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,20,19,0,0,0,0,0,6,1,3,3,1,4,0,0,1,2,2,2,0,4,5,3,1,0,1,6,182,1,36,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,104,10,12,73,78,80,85,84,95,76,69,78,71,84,72,3,1,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,0,5,105,110,112,117,116,3,30,6,111,117,116,112,117,116,3,32,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,13,5,102,105,110,97,108,0,15,6,100,105,103,101,115,116,0,16,8,100,105,103,101,115,116,54,52,0,18,6,109,101,109,111,114,121,2,0,8,1,19,12,1,18,10,209,22,19,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,23,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,23,11,35,23,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,24,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,25,32,2,40,2,0,65,124,113,65,4,106,106,36,25,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,4,65,133,221,158,219,123,36,5,65,242,230,187,227,3,36,6,65,186,234,191,170,122,36,7,65,255,164,185,136,5,36,8,65,140,209,149,216,121,36,9,65,171,179,143,252,1,36,10,65,153,154,131,223,5,36,11,65,0,36,34,65,0,36,35,11,227,3,1,1,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,16,73,4,64,32,0,35,20,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,16,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,32,0,35,20,65,16,107,65,2,116,106,40,2,0,32,0,35,20,65,7,107,65,2,116,106,40,2,0,32,0,35,20,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,20,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,34,1,106,40,2,0,32,1,35,2,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,1,35,14,34,2,113,32,1,35,12,34,1,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,174,1,1,2,127,35,35,32,1,106,36,35,35,34,4,64,65,192,0,35,34,107,34,2,32,1,76,4,64,35,27,35,34,106,32,0,32,2,252,10,0,0,35,34,32,2,106,36,34,65,192,0,35,34,107,33,2,32,1,65,192,0,35,34,107,107,33,1,35,29,35,27,16,12,65,0,36,34,5,35,27,35,34,106,32,0,32,1,252,10,0,0,35,34,32,1,106,36,34,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,29,32,0,32,2,106,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,27,35,34,106,32,0,32,2,106,32,1,252,10,0,0,35,34,32,1,106,36,34,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,146,2,1,2,127,35,35,65,63,113,65,63,73,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,35,65,63,113,65,56,79,4,64,35,27,35,34,106,34,1,65,192,0,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,29,35,27,16,12,65,0,36,34,11,35,35,65,63,113,65,63,79,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,27,35,34,106,34,1,65,56,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,27,35,35,65,128,128,128,128,2,109,16,14,54,2,56,35,27,35,35,65,3,116,16,14,54,2,60,35,29,35,27,16,12,32,0,35,4,16,14,54,2,0,32,0,35,5,16,14,54,2,4,32,0,35,6,16,14,54,2,8,32,0,35,7,16,14,54,2,12,32,0,35,8,16,14,54,2,16,32,0,35,9,16,14,54,2,20,32,0,35,10,16,14,54,2,24,32,0,35,11,16,14,54,2,28,11,14,0,16,11,35,31,32,0,16,13,35,33,16,15,11,253,1,1,2,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,2,35,14,34,1,113,32,2,35,12,34,2,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,86,0,16,11,35,29,32,0,16,12,35,3,16,17,32,1,35,4,16,14,54,2,0,32,1,35,5,16,14,54,2,4,32,1,35,6,16,14,54,2,8,32,1,35,7,16,14,54,2,12,32,1,35,8,16,14,54,2,16,32,1,35,9,16,14,54,2,20,32,1,35,10,16,14,54,2,24,32,1,35,11,16,14,54,2,28,11,82,0,65,196,10,40,2,0,36,2,65,148,13,40,2,0,36,3,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,24,65,192,0,16,10,36,26,35,26,36,27,65,128,8,16,10,36,28,35,28,36,29,65,128,4,16,10,36,30,35,30,36,31,65,32,16,10,36,32,35,32,36,33,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); diff --git a/packages/as-sha256/src/wasmSimdCode.ts b/packages/as-sha256/src/wasmSimdCode.ts index c95183d78..c539555d2 100644 --- a/packages/as-sha256/src/wasmSimdCode.ts +++ b/packages/as-sha256/src/wasmSimdCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,30,29,0,0,0,0,0,6,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,0,0,3,3,3,0,4,5,3,1,0,1,6,217,4,59,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,140,1,11,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,27,5,105,110,112,117,116,3,53,6,111,117,116,112,117,116,3,55,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,158,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,52,32,2,65,2,116,106,32,2,65,3,106,34,4,35,54,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,52,32,3,65,2,116,106,35,54,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,52,32,2,65,2,116,106,35,54,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,52,32,4,65,2,116,106,35,54,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,52,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,52,106,35,54,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,52,32,0,16,19,11,74,0,65,231,204,167,208,6,36,30,65,133,221,158,219,123,36,31,65,242,230,187,227,3,36,32,65,186,234,191,170,122,36,33,65,255,164,185,136,5,36,34,65,140,209,149,216,121,36,35,65,171,179,143,252,1,36,36,65,153,154,131,223,5,36,37,65,0,36,57,65,0,36,58,11,227,3,1,1,127,35,30,36,38,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,65,0,36,46,3,64,35,46,65,16,73,4,64,32,0,35,46,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,46,65,1,106,36,46,12,1,11,11,65,16,36,46,3,64,35,46,65,192,0,73,4,64,32,0,35,46,65,2,116,106,32,0,35,46,65,16,107,65,2,116,106,40,2,0,32,0,35,46,65,7,107,65,2,116,106,40,2,0,32,0,35,46,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,46,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,46,65,1,106,36,46,12,1,11,11,65,0,36,46,3,64,35,46,65,192,0,73,4,64,32,0,35,46,65,2,116,34,1,106,40,2,0,32,1,35,28,106,40,2,0,35,45,35,42,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,42,34,1,35,43,113,35,44,32,1,65,127,115,113,115,106,106,106,36,47,35,38,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,39,34,1,35,40,34,2,113,32,1,35,38,34,1,113,32,1,32,2,113,115,115,106,36,48,35,44,36,45,35,43,36,44,35,42,36,43,35,41,35,47,106,36,42,35,40,36,41,35,39,36,40,35,38,36,39,35,47,35,48,106,36,38,35,46,65,1,106,36,46,12,1,11,11,35,30,35,38,106,36,30,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,11,174,1,1,2,127,35,58,32,1,106,36,58,35,57,4,64,65,192,0,35,57,107,34,2,32,1,76,4,64,35,50,35,57,106,32,0,32,2,252,10,0,0,35,57,32,2,106,36,57,65,192,0,35,57,107,33,2,32,1,65,192,0,35,57,107,107,33,1,35,52,35,50,16,23,65,0,36,57,5,35,50,35,57,106,32,0,32,1,252,10,0,0,35,57,32,1,106,36,57,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,52,32,0,32,2,106,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,50,35,57,106,32,0,32,2,106,32,1,252,10,0,0,35,57,32,1,106,36,57,11,11,146,2,1,2,127,35,58,65,63,113,65,63,73,4,64,35,50,35,57,106,65,128,1,58,0,0,35,57,65,1,106,36,57,11,35,58,65,63,113,65,56,79,4,64,35,50,35,57,106,34,1,65,192,0,35,57,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,52,35,50,16,23,65,0,36,57,11,35,58,65,63,113,65,63,79,4,64,35,50,35,57,106,65,128,1,58,0,0,35,57,65,1,106,36,57,11,35,50,35,57,106,34,1,65,56,35,57,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,50,35,58,65,128,128,128,128,2,109,16,18,54,2,56,35,50,35,58,65,3,116,16,18,54,2,60,35,52,35,50,16,23,32,0,35,30,16,18,54,2,0,32,0,35,31,16,18,54,2,4,32,0,35,32,16,18,54,2,8,32,0,35,33,16,18,54,2,12,32,0,35,34,16,18,54,2,16,32,0,35,35,16,18,54,2,20,32,0,35,36,16,18,54,2,24,32,0,35,37,16,18,54,2,28,11,14,0,16,22,35,54,32,0,16,24,35,56,16,25,11,253,1,1,2,127,35,30,36,38,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,65,0,36,46,3,64,35,46,65,192,0,73,4,64,32,0,35,46,65,2,116,106,40,2,0,35,45,35,42,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,42,34,1,35,43,113,35,44,32,1,65,127,115,113,115,106,106,36,47,35,38,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,39,34,2,35,40,34,1,113,32,2,35,38,34,2,113,32,1,32,2,113,115,115,106,36,48,35,44,36,45,35,43,36,44,35,42,36,43,35,41,35,47,106,36,42,35,40,36,41,35,39,36,40,35,38,36,39,35,47,35,48,106,36,38,35,46,65,1,106,36,46,12,1,11,11,35,30,35,38,106,36,30,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,11,86,0,16,22,35,52,32,0,16,23,35,29,16,27,32,1,35,30,16,18,54,2,0,32,1,35,31,16,18,54,2,4,32,1,35,32,16,18,54,2,8,32,1,35,33,16,18,54,2,12,32,1,35,34,16,18,54,2,16,32,1,35,35,16,18,54,2,20,32,1,35,36,16,18,54,2,24,32,1,35,37,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,28,65,148,13,40,2,0,36,29,65,192,0,16,11,36,49,35,49,36,50,65,128,8,16,11,36,51,35,51,36,52,65,128,4,16,11,36,53,35,53,36,54,65,32,16,11,36,55,35,55,36,56,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); +export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,30,29,0,0,0,0,0,6,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,0,0,3,3,3,0,4,5,3,1,0,1,6,222,4,60,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,158,1,12,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,28,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,27,5,105,110,112,117,116,3,54,6,111,117,116,112,117,116,3,56,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,158,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,53,32,2,65,2,116,106,32,2,65,3,106,34,4,35,55,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,3,65,2,116,106,35,55,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,2,65,2,116,106,35,55,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,4,65,2,116,106,35,55,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,53,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,53,106,35,55,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,53,32,0,16,19,11,74,0,65,231,204,167,208,6,36,31,65,133,221,158,219,123,36,32,65,242,230,187,227,3,36,33,65,186,234,191,170,122,36,34,65,255,164,185,136,5,36,35,65,140,209,149,216,121,36,36,65,171,179,143,252,1,36,37,65,153,154,131,223,5,36,38,65,0,36,58,65,0,36,59,11,227,3,1,1,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,16,73,4,64,32,0,35,47,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,16,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,32,0,35,47,65,16,107,65,2,116,106,40,2,0,32,0,35,47,65,7,107,65,2,116,106,40,2,0,32,0,35,47,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,47,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,34,1,106,40,2,0,32,1,35,29,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,1,35,41,34,2,113,32,1,35,39,34,1,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,174,1,1,2,127,35,59,32,1,106,36,59,35,58,4,64,65,192,0,35,58,107,34,2,32,1,76,4,64,35,51,35,58,106,32,0,32,2,252,10,0,0,35,58,32,2,106,36,58,65,192,0,35,58,107,33,2,32,1,65,192,0,35,58,107,107,33,1,35,53,35,51,16,23,65,0,36,58,5,35,51,35,58,106,32,0,32,1,252,10,0,0,35,58,32,1,106,36,58,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,53,32,0,32,2,106,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,51,35,58,106,32,0,32,2,106,32,1,252,10,0,0,35,58,32,1,106,36,58,11,11,146,2,1,2,127,35,59,65,63,113,65,63,73,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,59,65,63,113,65,56,79,4,64,35,51,35,58,106,34,1,65,192,0,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,53,35,51,16,23,65,0,36,58,11,35,59,65,63,113,65,63,79,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,51,35,58,106,34,1,65,56,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,51,35,59,65,128,128,128,128,2,109,16,18,54,2,56,35,51,35,59,65,3,116,16,18,54,2,60,35,53,35,51,16,23,32,0,35,31,16,18,54,2,0,32,0,35,32,16,18,54,2,4,32,0,35,33,16,18,54,2,8,32,0,35,34,16,18,54,2,12,32,0,35,35,16,18,54,2,16,32,0,35,36,16,18,54,2,20,32,0,35,37,16,18,54,2,24,32,0,35,38,16,18,54,2,28,11,14,0,16,22,35,55,32,0,16,24,35,57,16,25,11,253,1,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,1,113,32,2,35,39,34,2,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,86,0,16,22,35,53,32,0,16,23,35,30,16,27,32,1,35,31,16,18,54,2,0,32,1,35,32,16,18,54,2,4,32,1,35,33,16,18,54,2,8,32,1,35,34,16,18,54,2,12,32,1,35,35,16,18,54,2,16,32,1,35,36,16,18,54,2,20,32,1,35,37,16,18,54,2,24,32,1,35,38,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,29,65,148,13,40,2,0,36,30,65,192,0,16,11,36,50,35,50,36,51,65,128,8,16,11,36,52,35,52,36,53,65,128,4,16,11,36,54,35,54,36,55,65,32,16,11,36,56,35,56,36,57,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); From 5372c5f7836c7fc3ae3deaeed852d600bd215fc1 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Fri, 20 Dec 2024 03:11:19 +0700 Subject: [PATCH 11/47] test: clean up non-simd unit tests --- packages/as-sha256/test/unit/index.test.ts | 143 ++++++++++++--------- 1 file changed, 81 insertions(+), 62 deletions(-) diff --git a/packages/as-sha256/test/unit/index.test.ts b/packages/as-sha256/test/unit/index.test.ts index b0e9d95be..bd98e995a 100644 --- a/packages/as-sha256/test/unit/index.test.ts +++ b/packages/as-sha256/test/unit/index.test.ts @@ -1,40 +1,40 @@ import {describe, it, expect} from "vitest"; import {Buffer} from "buffer"; +import {expect} from "chai"; import * as sha256 from "../../src/index.js"; -describe("sha256", function () { - describe("digest function", function () { - it("abc", function () { - const input = Buffer.from("abc", "utf8"); - expect(Buffer.from(sha256.digest(input)).toString("hex")).toEqual( - "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" - ); - }); - - it("empty string", function () { - const input = Buffer.from("", "utf8"); - expect(Buffer.from(sha256.digest(input)).toString("hex")).toEqual( - "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - ); - }); +describe("as-sha256", function () { + describe("digest()", function () { + const digestTestCases = [ + { + input: "", + expected: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + }, + { + input: "abc", + expected: "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", + }, + { + input: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + expected: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1", + }, + { + input: + "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", + expected: "cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1", + }, + ]; - it("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", function () { - const input = Buffer.from("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "utf8"); - expect(Buffer.from(sha256.digest(input)).toString("hex")).toEqual( - "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1" - ); - }); - - it("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", function () { - const input = Buffer.from( - "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", - "utf8" - ); - expect(Buffer.from(sha256.digest(input)).toString("hex")).toEqual( - "cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1" - ); - }); + for (const {input, expected} of digestTestCases) { + const name = input === "" ? "empty string" : input; + it(`digest: ${name}`, function () { + const output = sha256.digest(Buffer.from(input, "utf-8")); + expect(Buffer.from(output).toString("hex")).to.be.equal(expected); + }); + } + }); + describe("digest64()", function () { it("gajindergajindergajindergajindergajindergajindergajindergajinder", function () { const input1 = "gajindergajindergajindergajinder"; const input2 = "gajindergajindergajindergajinder"; @@ -45,41 +45,60 @@ describe("sha256", function () { 131, 72, 178, 215, 235, 20, 207, 110, ]); expect(output).to.be.deep.equal(expectedOutput, "incorrect digest64 result"); - expect(Buffer.from(output).toString("hex")).toEqual( - "be39380ff1d0261e6f37dafe4278b662ef611f1cb2f7c0a18348b2d7eb14cf6e" - ); - // digestTwoHashObjects should be the same to digest64 - const buffer1 = Buffer.from(input1, "utf-8"); - const buffer2 = Buffer.from(input2, "utf-8"); - const obj1 = sha256.byteArrayToHashObject(buffer1, 0); - const obj2 = sha256.byteArrayToHashObject(buffer2, 0); - const obj = sha256.digest64HashObjects(obj1, obj2); - const output2 = new Uint8Array(32); - sha256.hashObjectToByteArray(obj, output2, 0); - for (let i = 0; i < 32; i++) { - expect(output2[i]).toEqual(output[i], "failed at index" + i); - } - expect(output2).to.be.deep.equal(expectedOutput, "incorrect digestTwoHashObjects result"); - - const digestBytes32 = sha256.digest2Bytes32(buffer1, buffer2); - expect(digestBytes32).to.be.deep.equal(expectedOutput, "incorrect digest64Bytes32 result"); }); + }); - it("harkamalharkamalharkamalharkamalharkamalharkamalharkamalharkamal", function () { - const input = Buffer.from("harkamalharkamalharkamalharkamalharkamalharkamalharkamalharkamal", "utf8"); - const output = Buffer.from(sha256.digest(input)).toString("hex"); - const output64 = Buffer.from(sha256.digest64(input)).toString("hex"); - expect(output).toEqual(output64); - }); + it("digest and digest64 output matches", function () { + const input = Buffer.from("harkamalharkamalharkamalharkamalharkamalharkamalharkamalharkamal", "utf8"); + const output = Buffer.from(sha256.digest(input)).toString("hex"); + const output64 = Buffer.from(sha256.digest64(input)).toString("hex"); + expect(output).to.be.equal(output64); + }); - it("1024 digest test", function () { - const inputStr = "12345678".repeat(128); - const input = Buffer.from(inputStr, "utf8"); - expect(input.length).toEqual(1024); + it("1024 digest test", function () { + const inputStr = "12345678".repeat(128); + const input = Buffer.from(inputStr, "utf8"); + expect(input.length).to.be.equal(1024); - const output = Buffer.from(sha256.digest(input)).toString("hex"); - expect(output).toEqual("54c7cb8a82d68145fd5f5da4103f5a66f422dbea23d9fc9f40f59b1dcf5403a9"); - }); + const output = Buffer.from(sha256.digest(input)).toString("hex"); + expect(output).to.be.equal("54c7cb8a82d68145fd5f5da4103f5a66f422dbea23d9fc9f40f59b1dcf5403a9"); + }); + + it("digest64HashObject", function () { + const input1 = sha256.byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf-8"), 0); + const input2 = sha256.byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf-8"), 0); + + const outputObj = sha256.digest64HashObjects(input1, input2); + const output = new Uint8Array(32); + sha256.hashObjectToByteArray(outputObj, output, 0); + + expect(Buffer.from(output).toString("hex")).to.be.equal( + "be39380ff1d0261e6f37dafe4278b662ef611f1cb2f7c0a18348b2d7eb14cf6e" + ); + }); + + it("digest64HashObject and digest64 output matches", function () { + const input1 = "gajindergajindergajindergajinder"; + const input2 = "gajindergajindergajindergajinder"; + const output = sha256.digest64(Buffer.from(input1 + input2, "utf8")); + + const inputObj1 = sha256.byteArrayToHashObject(Buffer.from(input1, "utf8"), 0); + const inputObj2 = sha256.byteArrayToHashObject(Buffer.from(input2, "utf8"), 0); + const outputObj = sha256.digest64HashObjects(inputObj1, inputObj2); + const outputByteArray = new Uint8Array(32); + sha256.hashObjectToByteArray(outputObj, outputByteArray, 0); + + expect(Buffer.from(output).toString("hex")).to.be.equal(Buffer.from(outputByteArray).toString("hex")); + }); + + it("digest2Bytes32 matches digest64", function () { + const input1 = Buffer.alloc(32, "*"); + const input2 = Buffer.alloc(32, "*"); + const digestBytes32 = sha256.digest2Bytes32(input1, input2); + expect(digestBytes32).to.be.deep.equal( + sha256.digest64(Buffer.of(...input1, ...input2)), + "incorrect digest2Bytes32 result" + ); }); }); From ef8ebdc842471d9411befc4616328ba48cddc1b0 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Fri, 20 Dec 2024 03:12:50 +0700 Subject: [PATCH 12/47] chore: clean up config files for ESM --- packages/persistent-merkle-tree/.prettierrc.cjs | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 packages/persistent-merkle-tree/.prettierrc.cjs diff --git a/packages/persistent-merkle-tree/.prettierrc.cjs b/packages/persistent-merkle-tree/.prettierrc.cjs deleted file mode 100644 index ee8eee2a2..000000000 --- a/packages/persistent-merkle-tree/.prettierrc.cjs +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - printWidth: 120, - tabWidth: 2, - useTabs: false, - semi: true, - singleQuote: false, - quoteProps: "as-needed", - trailingComma: "es5", - bracketSpacing: false, - arrowParens: "always", -}; From 2883e52614e2f6c8bd4efb6d8ca8736dd4fdf784 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Fri, 20 Dec 2024 03:13:38 +0700 Subject: [PATCH 13/47] feat: add ability to override simd for testing and check that its turned off --- packages/as-sha256/assembly/index.simd.ts | 2 ++ packages/as-sha256/assembly/index.ts | 2 ++ packages/as-sha256/build/optimized.simd.wasm | Bin 16796 -> 16812 bytes packages/as-sha256/build/optimized.simd.wat | 2 ++ packages/as-sha256/build/optimized.wasm | Bin 4182 -> 4198 bytes packages/as-sha256/build/optimized.wat | 2 ++ packages/as-sha256/build/untouched.simd.wasm | Bin 27405 -> 27421 bytes packages/as-sha256/build/untouched.simd.wat | 2 ++ packages/as-sha256/build/untouched.wasm | Bin 6622 -> 6638 bytes packages/as-sha256/build/untouched.wat | 2 ++ packages/as-sha256/src/index.ts | 10 +++++++++- packages/as-sha256/src/wasm.ts | 1 + packages/as-sha256/src/wasmCode.ts | 2 +- packages/as-sha256/src/wasmSimdCode.ts | 2 +- 14 files changed, 24 insertions(+), 3 deletions(-) diff --git a/packages/as-sha256/assembly/index.simd.ts b/packages/as-sha256/assembly/index.simd.ts index ea9c9019f..a529d32ed 100644 --- a/packages/as-sha256/assembly/index.simd.ts +++ b/packages/as-sha256/assembly/index.simd.ts @@ -15,6 +15,8 @@ import { inputPtr } from "./common"; +export const HAS_SIMD = true; + export { INPUT_LENGTH, PARALLEL_FACTOR, diff --git a/packages/as-sha256/assembly/index.ts b/packages/as-sha256/assembly/index.ts index 36e4c61de..f24a0fd4e 100644 --- a/packages/as-sha256/assembly/index.ts +++ b/packages/as-sha256/assembly/index.ts @@ -1,3 +1,5 @@ +export const HAS_SIMD = false; + export { INPUT_LENGTH, PARALLEL_FACTOR, diff --git a/packages/as-sha256/build/optimized.simd.wasm b/packages/as-sha256/build/optimized.simd.wasm index 7ad82ba3e248baf78f6fd82a91a2321f7b0e8b27..c1fb86d93269475d8b5860f5569796cce445ca7b 100644 GIT binary patch delta 49 zcmV-10M7rMg8{6A0gz+^;{-jikx&7V&?=MR0pk>Z06_r@2dM!K2uMLwUsFjQ diff --git a/packages/as-sha256/build/optimized.simd.wat b/packages/as-sha256/build/optimized.simd.wat index a22734da3..1cad265d1 100644 --- a/packages/as-sha256/build/optimized.simd.wat +++ b/packages/as-sha256/build/optimized.simd.wat @@ -67,6 +67,7 @@ (global $assembly/common/outputPtr (mut i32) (i32.const 0)) (global $assembly/common/mLength (mut i32) (i32.const 0)) (global $assembly/common/bytesHashed (mut i32) (i32.const 0)) + (global $assembly/index.simd/HAS_SIMD i32 (i32.const 1)) (memory $0 1) (data $0 (i32.const 1036) "\1c\01") (data $0.1 (i32.const 1048) "\01\00\00\00\00\01\00\00\98/\8aB\91D7q\cf\fb\c0\b5\a5\db\b5\e9[\c2V9\f1\11\f1Y\a4\82?\92\d5^\1c\ab\98\aa\07\d8\01[\83\12\be\851$\c3}\0cUt]\ber\fe\b1\de\80\a7\06\dc\9bt\f1\9b\c1\c1i\9b\e4\86G\be\ef\c6\9d\c1\0f\cc\a1\0c$o,\e9-\aa\84tJ\dc\a9\b0\\\da\88\f9vRQ>\98m\c61\a8\c8\'\03\b0\c7\7fY\bf\f3\0b\e0\c6G\91\a7\d5Qc\ca\06g))\14\85\n\b7\'8!\1b.\fcm,M\13\r8STs\ne\bb\njv.\c9\c2\81\85,r\92\a1\e8\bf\a2Kf\1a\a8p\8bK\c2\a3Ql\c7\19\e8\92\d1$\06\99\d6\855\0e\f4p\a0j\10\16\c1\a4\19\08l7\1eLwH\'\b5\bc\b04\b3\0c\1c9J\aa\d8NO\ca\9c[\f3o.h\ee\82\8ftoc\a5x\14x\c8\84\08\02\c7\8c\fa\ff\be\90\eblP\a4\f7\a3\f9\be\f2xq\c6") @@ -106,6 +107,7 @@ (data $18.1 (i32.const 2616) "\02\00\00\00,\00\00\00a\00s\00s\00e\00m\00b\00l\00y\00/\00u\00t\00i\00l\00s\00/\00v\001\002\008\00.\00t\00s") (data $19 (i32.const 2668) "\\") (data $19.1 (i32.const 2680) "\02\00\00\00H\00\00\00g\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 ") + (export "HAS_SIMD" (global $assembly/index.simd/HAS_SIMD)) (export "batchHash4UintArray64s" (func $assembly/index.simd/batchHash4UintArray64s)) (export "batchHash4HashObjectInputs" (func $assembly/index.simd/batchHash4HashObjectInputs)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) diff --git a/packages/as-sha256/build/optimized.wasm b/packages/as-sha256/build/optimized.wasm index 8869dc4fc0a99ce189e49b0d8d6485790bfba046..5010d73c2975b8333e3cf6920ce4e5edc3e9192d 100644 GIT binary patch delta 1302 zcmb`GOK1~87{_;JH=9jnlT6zreHfcbzE9Ab_Mk9g-{zCDSq{_^qhvW;o|=+l$iC(zU1Z#_Jh!i+xu;_92@nALZdE`DVw^z|EO z-lx#l76ScHEZdBQkis0en1?hLz(WZc?13!yg1|oTu}I32-GGvo6HY@}1bn{E0~K9M zk2Xr01z7T#5L$L*Ppx0NAlAz{niA0d<6gSE7fG+mO3`|+7Iu|NR_rcSXK@7vwrQaV zJ$0tt1;w;jXw(1TLOU?eptl8m)DPROc0gX0AxA=Pgt=H)UT8y}bcH%^DP~5gQG8RY z-43uH`mhMSbn+f@KteenGYVu%p3KRSNoD8{$gf|Ujq;fdA^1=X&=+?Z;~}6TQxL#u z=%*IIT%9Y{bQ(|rAVU=YnziV$;sISlEU1xSh30AuhM^+kJ4z)pSZ4;6g@O=vL)r0! zL*rC+SXt47Os$+$4^+22`kbkcpdM@KF}jwxpk8E~%?8ZXfq-~$bgDB*UYRXLSF&p4 z=SDiBu|)J+1+y~E8(oF5*W|%9;1Hw@cm$pS zpCDsE5@Zb&350V67%97@kDHAQl z|3{?unKRNIOCKEBLxJsB#}eyUVjWAYV~KSvv5qCyvBbJ*OFzrfi-fkmk~6KNKNRRI t`ARz?Z2}ymG{`Kjf>l`2iyq->SdGJa(IKot6_r**HK<{I>7{?#{s9Qg>;3=$ delta 1254 zcmb7EO=uHA6yBNL{O%^1v}w|&X*=0B2a5->pcE04L8>i=wv?*irB~fjZAc372R0&t z2gR1vgB}E-cu??C5Y&S`cow`^K}4b0gGbNx=goGv1kpo7vh%%pKQr%p-)4({;LGPy zFNkn8X_)wE8!PoEE6b5XvGYl5VsiTQ>|AYZ^5pEePBPPSM%HR$wYd}W`0Uh-u0<|f zTwH4EgV9S%O$GScS+Ze}f_ET#$0(Rk@YbVw((7$RhckVg?xUK#R+on3h(0e9E1ojs z&CicMT@?}eW9#*%E~4_)_cu?kh?xAn`tnvp#O3Yx_di}13Hfa8?luug`QYJ=FA-r% zP1yJYb5ke81w&ZgVyu+Kt(;zkoMaP5m1~gm9>*%xoFtCOS;RCY3;gR^5FlyOQGt@p zD~LDrtyrh!@%RwQdDVE??I;x<)mh3Wegy(lt$eqg@UfE321ZCd9{_CH)KT@Fp-4}^f-b+T4W$4 z(qM@c^g!Mb7B&_34F*__FuX$Ipld!Sgt`D6odC8`mFpVV^ETzAW>ldcY$Sx!?WBg= zoH|IfA5g}C9W-AiFaZ6`Qd5Y886?QSvUbKa^(xo>goSaeI-p8A%;LKDE>X;fhd8`5 z%lnnEM?hBUvVzm`>&iAcqVAzOu}$!uqf>zsDN{G|R+D^W_dY>TB@Ftjf;t)VMt9QO zek|F>4_#pC!*mqS1gSR_KDyH)*T7Jwl0`%T13^@QID(i07J|3}3_(JH9D<|*y$DPN zN@iMPCJb?nrJ&3*=1+eJdLUePSGb*O+KYz%Cn1UwLhVqLkWvz-|5VWM9wl@}HG?x{ z7U(RC0u4AKAx9+Sh=d%GkRuXuL_&^8$kB`@-zM?J5meqwsa2O>Gx%jRSd}e$_v6@E jQWT*m`ei$gummMBfPY;G2VqbQNsfpE7v;5Y)^+_4RvG6G diff --git a/packages/as-sha256/build/optimized.wat b/packages/as-sha256/build/optimized.wat index 8a4e47183..e157cd2f0 100644 --- a/packages/as-sha256/build/optimized.wat +++ b/packages/as-sha256/build/optimized.wat @@ -7,6 +7,7 @@ (type $5 (func (param i32 i32 i32 i32))) (type $6 (func (param i32 i32 i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $assembly/index/HAS_SIMD i32 (i32.const 0)) (global $assembly/common/PARALLEL_FACTOR i32 (i32.const 4)) (global $assembly/common/INPUT_LENGTH i32 (i32.const 512)) (global $assembly/common/kPtr (mut i32) (i32.const 0)) @@ -62,6 +63,7 @@ (data $7.1 (i32.const 1896) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00c\00m\00s\00.\00t\00s") (data $8 (i32.const 1948) "<") (data $8.1 (i32.const 1960) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (export "HAS_SIMD" (global $assembly/index/HAS_SIMD)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) diff --git a/packages/as-sha256/build/untouched.simd.wasm b/packages/as-sha256/build/untouched.simd.wasm index fb653c99f3f8173358c26a9cace5c2a51f21606f..b4892723dd0722acbbf0559a8c87dd85cd5a46b6 100644 GIT binary patch delta 52 zcmeCZ#yIyH9bbX)dNj0Q%hvCjbBd diff --git a/packages/as-sha256/build/untouched.simd.wat b/packages/as-sha256/build/untouched.simd.wat index 3a45ea419..3a787f1d3 100644 --- a/packages/as-sha256/build/untouched.simd.wat +++ b/packages/as-sha256/build/untouched.simd.wat @@ -90,6 +90,7 @@ (global $assembly/common/outputPtr (mut i32) (i32.const 0)) (global $assembly/common/mLength (mut i32) (i32.const 0)) (global $assembly/common/bytesHashed (mut i32) (i32.const 0)) + (global $assembly/index.simd/HAS_SIMD i32 (i32.const 1)) (global $~lib/memory/__heap_base i32 (i32.const 3196)) (memory $0 1) (data $0 (i32.const 12) "\1c\01\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\98/\8aB\91D7q\cf\fb\c0\b5\a5\db\b5\e9[\c2V9\f1\11\f1Y\a4\82?\92\d5^\1c\ab\98\aa\07\d8\01[\83\12\be\851$\c3}\0cUt]\ber\fe\b1\de\80\a7\06\dc\9bt\f1\9b\c1\c1i\9b\e4\86G\be\ef\c6\9d\c1\0f\cc\a1\0c$o,\e9-\aa\84tJ\dc\a9\b0\\\da\88\f9vRQ>\98m\c61\a8\c8\'\03\b0\c7\7fY\bf\f3\0b\e0\c6G\91\a7\d5Qc\ca\06g))\14\85\n\b7\'8!\1b.\fcm,M\13\r8STs\ne\bb\njv.\c9\c2\81\85,r\92\a1\e8\bf\a2Kf\1a\a8p\8bK\c2\a3Ql\c7\19\e8\92\d1$\06\99\d6\855\0e\f4p\a0j\10\16\c1\a4\19\08l7\1eLwH\'\b5\bc\b04\b3\0c\1c9J\aa\d8NO\ca\9c[\f3o.h\ee\82\8ftoc\a5x\14x\c8\84\08\02\c7\8c\fa\ff\be\90\eblP\a4\f7\a3\f9\be\f2xq\c6\00\00\00\00\00\00\00\00\00\00\00\00") @@ -116,6 +117,7 @@ (data $21 (i32.const 3100) "\\\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00H\00\00\00g\00e\00t\00V\001\002\008\00:\00 \00e\00x\00p\00e\00c\00t\00 \00i\00 \00f\00r\00o\00m\00 \000\00 \00t\00o\00 \006\003\00,\00 \00g\00o\00t\00 \00\00\00\00\00") (table $0 1 1 funcref) (elem $0 (i32.const 1)) + (export "HAS_SIMD" (global $assembly/index.simd/HAS_SIMD)) (export "batchHash4UintArray64s" (func $assembly/index.simd/batchHash4UintArray64s)) (export "batchHash4HashObjectInputs" (func $assembly/index.simd/batchHash4HashObjectInputs)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) diff --git a/packages/as-sha256/build/untouched.wasm b/packages/as-sha256/build/untouched.wasm index dda7a1f48bdaec02021e8b547a6b8c0f9e2f8bbc..82cec8ce245d31f28eb007b9a29e506c99448647 100644 GIT binary patch delta 1496 zcmbVMU1%d!6u$RPCQWja%uO;$CTWwsH|M5F+tj))s3^P5MQdA$-DS734+?z~o%*-5 z3soOdl!Zle^soWpQ=MalKRK zv>6N*25a}3dsa`Lb{zMyC!apQ>2#A%o!^X{>76U|noDo7gRz^mxpPPAq?2wgB>E!9 zp=mGiuksRItdKznE7E$)U`CkTqiQ>M8US=ugA6p5X~1T8L+U`SjZ7Nu4qmzPUJ3E(lsm`0%-+1ABS9^x&9{y+f zk1p*DA*BVRbpbNE2waySt9{7nGURmyJYB`g!0AI^#B!p~`jV&|1S-#lk}8ItBOSvw zRRRM{x%P7Itw&Xjy>aSh~-2H2<+MXtu(L~^9{6D^GDI%$hVt^ zAol0S5Kv`9@a?!)Py4C~WpxB9_JmhGn^X#cTT;mut`l|{$r2vMQvefMg4Bl+x`sGH zwPo9|Ei}2U4YZZ54eW|DlTc6{DB5?u;I=wcbQQ|ThmX9JpcW!UMWm{LlnJD+2K5kG z{AX#q?H?V22h~t}{7XvN&=6#6Rw6O8&`b33{Gqol=^)XEHuORnDFP$A8G@IQAL<@T zDGrByuOz&L_sM_{eu?A>j2Lz7y^soVHtPl(R#jKC)D4(!6Q?Wh)I|cQ~Z5KGynbdIwWsJ@tl%d zXgJD}np!MN6f^iJqOx*O^Iw<7gFq#vE0h0{waxjpv_QTKDvc7J^Z&1e+xrsUW;7TI z4IO;AHjIfGqz_+zB-%luKl3A^e?yzGyxgGNPNB`(#d70#4(Th&f-J`LmGhp0D1m+E+8PyEDYRS{GKl|s-U<{||2q${F{;{E|1{5lAt5e1bEc<{WUuX|>P1&=oL>(}*r@As(cwbLI_l)9Wwaxb<8ndt!L%{AWOs%g2W)M+&sEDz4!tL|AldD^7* zBac0Cal`B+9>2H|ISbn#kt;Siq#sP~l3;r!b<#`+%T}M|90>Gf=eztYa5e*iQ#Kn) zp`Xp(JZi4gIaLNHdyc`W>)dC6!HBehpiQWsldLXhm7#VFCL{nzi9cHu=z08aK})uk z0T%il=*W5WP4pLFK`uI$!RC-p{r=^ZuM#q;Uik5yAD)pZ_1ACLel=xUUETfSz1yCa z8THS*pT1~IN4@g(8{a=Av+DirSNDj_skbgYf8CaOWymhRJ?9sjbViVru6`)j#7#-x z?1Qh^39C>0+z>hNMV^j05fprVIrnzYS0t2vmN<@Lljt2|KfI3N4LZUELoiHuIDeS< z`ptZR_T&5!w14DVGY2U43&s>sp(F5g*R7{LF#{zr3uQfY{WG=@NIb^{pHp-roToARsw#c>s`Ap(ABrdwLuLdeF7{I9cefb26~{ zAfX%bXx6y0moe}&_Cwi4k;KcPpqz}|bwQvFlC`1%*^^`xQk)p^V-kL%1Wqtmf6mIJ zt-ob+&2b@4L*!a|az6uIOwxtIxs@LJYH2kZEJ&==6;y2zVImbKnRgk6gPV(LI1tC) zIUL9035115wBtSMoxW28@@jXxZEtFU4hJUAjoYAgM1E1Cr986oUuSY+m@h%qx))xQ`4@ z99dPSs6htNI;)vJhiLQqyjS(+xxw17 z$QGOrDalOl&mGhIb3o1lC#4dbXdILwQMFixC|>YTG$mo8#&^9&)fWkF^TdB-tb##6K)!MfNdyx-VS6FYjn6m|4(v}xTa2PC79p>_0` ta&SD0ee!sL7vny8lRgnqQVCIp9HJFo;^i2vOi^DYMHTYfAC!+<{{mK34Kx4% diff --git a/packages/as-sha256/build/untouched.wat b/packages/as-sha256/build/untouched.wat index a4d0dfa15..27a7b2e3e 100644 --- a/packages/as-sha256/build/untouched.wat +++ b/packages/as-sha256/build/untouched.wat @@ -8,6 +8,7 @@ (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $assembly/index/HAS_SIMD i32 (i32.const 0)) (global $assembly/utils/const/K i32 (i32.const 320)) (global $assembly/utils/const/W64 i32 (i32.const 656)) (global $assembly/common/PARALLEL_FACTOR i32 (i32.const 4)) @@ -67,6 +68,7 @@ (data $9 (i32.const 992) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (table $0 1 1 funcref) (elem $0 (i32.const 1)) + (export "HAS_SIMD" (global $assembly/index/HAS_SIMD)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index c95338fd1..f3a108cc8 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -6,7 +6,11 @@ import {byteArrayIntoHashObject, byteArrayToHashObject, hashObjectToByteArray} f import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; -const hasSimd = await simd(); +let hasSimd = await simd(); +if (`${process.env.DISABLE_SIMD}` === "true") { + hasSimd = false; +} + const ctx = newInstance(hasSimd); const wasmInputValue = ctx.input.value; const wasmOutputValue = ctx.output.value; @@ -16,6 +20,10 @@ const outputUint8Array = new Uint8Array(ctx.memory.buffer, wasmOutputValue, ctx. const outputUint8Array32 = new Uint8Array(ctx.memory.buffer, wasmOutputValue, 32); const inputUint32Array = new Uint32Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); +export function simdEnabled(): boolean { + return ctx.HAS_SIMD; +} + export function digest(data: Uint8Array): Uint8Array { if (data.length === 64) { return digest64(data); diff --git a/packages/as-sha256/src/wasm.ts b/packages/as-sha256/src/wasm.ts index 1ec768826..c8838be33 100644 --- a/packages/as-sha256/src/wasm.ts +++ b/packages/as-sha256/src/wasm.ts @@ -2,6 +2,7 @@ import {wasmCode} from "./wasmCode.js"; import {wasmSimdCode} from "./wasmSimdCode.js"; export interface WasmContext { + readonly HAS_SIMD: boolean; readonly PARALLEL_FACTOR: number; readonly INPUT_LENGTH: number; memory: { diff --git a/packages/as-sha256/src/wasmCode.ts b/packages/as-sha256/src/wasmCode.ts index f99ae71cc..2ac79ff2a 100644 --- a/packages/as-sha256/src/wasmCode.ts +++ b/packages/as-sha256/src/wasmCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,1,127,0,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,20,19,0,0,0,0,0,6,1,3,3,1,4,0,0,1,2,2,2,0,4,5,3,1,0,1,6,182,1,36,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,104,10,12,73,78,80,85,84,95,76,69,78,71,84,72,3,1,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,0,5,105,110,112,117,116,3,30,6,111,117,116,112,117,116,3,32,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,13,5,102,105,110,97,108,0,15,6,100,105,103,101,115,116,0,16,8,100,105,103,101,115,116,54,52,0,18,6,109,101,109,111,114,121,2,0,8,1,19,12,1,18,10,209,22,19,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,23,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,23,11,35,23,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,24,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,25,32,2,40,2,0,65,124,113,65,4,106,106,36,25,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,4,65,133,221,158,219,123,36,5,65,242,230,187,227,3,36,6,65,186,234,191,170,122,36,7,65,255,164,185,136,5,36,8,65,140,209,149,216,121,36,9,65,171,179,143,252,1,36,10,65,153,154,131,223,5,36,11,65,0,36,34,65,0,36,35,11,227,3,1,1,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,16,73,4,64,32,0,35,20,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,16,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,32,0,35,20,65,16,107,65,2,116,106,40,2,0,32,0,35,20,65,7,107,65,2,116,106,40,2,0,32,0,35,20,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,20,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,34,1,106,40,2,0,32,1,35,2,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,1,35,14,34,2,113,32,1,35,12,34,1,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,174,1,1,2,127,35,35,32,1,106,36,35,35,34,4,64,65,192,0,35,34,107,34,2,32,1,76,4,64,35,27,35,34,106,32,0,32,2,252,10,0,0,35,34,32,2,106,36,34,65,192,0,35,34,107,33,2,32,1,65,192,0,35,34,107,107,33,1,35,29,35,27,16,12,65,0,36,34,5,35,27,35,34,106,32,0,32,1,252,10,0,0,35,34,32,1,106,36,34,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,29,32,0,32,2,106,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,27,35,34,106,32,0,32,2,106,32,1,252,10,0,0,35,34,32,1,106,36,34,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,146,2,1,2,127,35,35,65,63,113,65,63,73,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,35,65,63,113,65,56,79,4,64,35,27,35,34,106,34,1,65,192,0,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,29,35,27,16,12,65,0,36,34,11,35,35,65,63,113,65,63,79,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,27,35,34,106,34,1,65,56,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,27,35,35,65,128,128,128,128,2,109,16,14,54,2,56,35,27,35,35,65,3,116,16,14,54,2,60,35,29,35,27,16,12,32,0,35,4,16,14,54,2,0,32,0,35,5,16,14,54,2,4,32,0,35,6,16,14,54,2,8,32,0,35,7,16,14,54,2,12,32,0,35,8,16,14,54,2,16,32,0,35,9,16,14,54,2,20,32,0,35,10,16,14,54,2,24,32,0,35,11,16,14,54,2,28,11,14,0,16,11,35,31,32,0,16,13,35,33,16,15,11,253,1,1,2,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,2,35,14,34,1,113,32,2,35,12,34,2,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,86,0,16,11,35,29,32,0,16,12,35,3,16,17,32,1,35,4,16,14,54,2,0,32,1,35,5,16,14,54,2,4,32,1,35,6,16,14,54,2,8,32,1,35,7,16,14,54,2,12,32,1,35,8,16,14,54,2,16,32,1,35,9,16,14,54,2,20,32,1,35,10,16,14,54,2,24,32,1,35,11,16,14,54,2,28,11,82,0,65,196,10,40,2,0,36,2,65,148,13,40,2,0,36,3,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,24,65,192,0,16,10,36,26,35,26,36,27,65,128,8,16,10,36,28,35,28,36,29,65,128,4,16,10,36,30,35,30,36,31,65,32,16,10,36,32,35,32,36,33,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); +export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,1,127,0,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,20,19,0,0,0,0,0,6,1,3,3,1,4,0,0,1,2,2,2,0,4,5,3,1,0,1,6,187,1,37,127,0,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,115,11,8,72,65,83,95,83,73,77,68,3,0,12,73,78,80,85,84,95,76,69,78,71,84,72,3,2,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,1,5,105,110,112,117,116,3,31,6,111,117,116,112,117,116,3,33,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,13,5,102,105,110,97,108,0,15,6,100,105,103,101,115,116,0,16,8,100,105,103,101,115,116,54,52,0,18,6,109,101,109,111,114,121,2,0,8,1,19,12,1,18,10,209,22,19,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,24,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,24,11,35,24,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,25,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,26,32,2,40,2,0,65,124,113,65,4,106,106,36,26,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,5,65,133,221,158,219,123,36,6,65,242,230,187,227,3,36,7,65,186,234,191,170,122,36,8,65,255,164,185,136,5,36,9,65,140,209,149,216,121,36,10,65,171,179,143,252,1,36,11,65,153,154,131,223,5,36,12,65,0,36,35,65,0,36,36,11,227,3,1,1,127,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,35,12,36,20,65,0,36,21,3,64,35,21,65,16,73,4,64,32,0,35,21,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,21,65,1,106,36,21,12,1,11,11,65,16,36,21,3,64,35,21,65,192,0,73,4,64,32,0,35,21,65,2,116,106,32,0,35,21,65,16,107,65,2,116,106,40,2,0,32,0,35,21,65,7,107,65,2,116,106,40,2,0,32,0,35,21,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,21,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,21,65,1,106,36,21,12,1,11,11,65,0,36,21,3,64,35,21,65,192,0,73,4,64,32,0,35,21,65,2,116,34,1,106,40,2,0,32,1,35,3,106,40,2,0,35,20,35,17,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,17,34,1,35,18,113,35,19,32,1,65,127,115,113,115,106,106,106,36,22,35,13,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,14,34,1,35,15,34,2,113,32,1,35,13,34,1,113,32,1,32,2,113,115,115,106,36,23,35,19,36,20,35,18,36,19,35,17,36,18,35,16,35,22,106,36,17,35,15,36,16,35,14,36,15,35,13,36,14,35,22,35,23,106,36,13,35,21,65,1,106,36,21,12,1,11,11,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,35,12,35,20,106,36,12,11,174,1,1,2,127,35,36,32,1,106,36,36,35,35,4,64,65,192,0,35,35,107,34,2,32,1,76,4,64,35,28,35,35,106,32,0,32,2,252,10,0,0,35,35,32,2,106,36,35,65,192,0,35,35,107,33,2,32,1,65,192,0,35,35,107,107,33,1,35,30,35,28,16,12,65,0,36,35,5,35,28,35,35,106,32,0,32,1,252,10,0,0,35,35,32,1,106,36,35,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,30,32,0,32,2,106,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,28,35,35,106,32,0,32,2,106,32,1,252,10,0,0,35,35,32,1,106,36,35,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,146,2,1,2,127,35,36,65,63,113,65,63,73,4,64,35,28,35,35,106,65,128,1,58,0,0,35,35,65,1,106,36,35,11,35,36,65,63,113,65,56,79,4,64,35,28,35,35,106,34,1,65,192,0,35,35,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,30,35,28,16,12,65,0,36,35,11,35,36,65,63,113,65,63,79,4,64,35,28,35,35,106,65,128,1,58,0,0,35,35,65,1,106,36,35,11,35,28,35,35,106,34,1,65,56,35,35,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,28,35,36,65,128,128,128,128,2,109,16,14,54,2,56,35,28,35,36,65,3,116,16,14,54,2,60,35,30,35,28,16,12,32,0,35,5,16,14,54,2,0,32,0,35,6,16,14,54,2,4,32,0,35,7,16,14,54,2,8,32,0,35,8,16,14,54,2,12,32,0,35,9,16,14,54,2,16,32,0,35,10,16,14,54,2,20,32,0,35,11,16,14,54,2,24,32,0,35,12,16,14,54,2,28,11,14,0,16,11,35,32,32,0,16,13,35,34,16,15,11,253,1,1,2,127,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,35,12,36,20,65,0,36,21,3,64,35,21,65,192,0,73,4,64,32,0,35,21,65,2,116,106,40,2,0,35,20,35,17,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,17,34,1,35,18,113,35,19,32,1,65,127,115,113,115,106,106,36,22,35,13,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,14,34,2,35,15,34,1,113,32,2,35,13,34,2,113,32,1,32,2,113,115,115,106,36,23,35,19,36,20,35,18,36,19,35,17,36,18,35,16,35,22,106,36,17,35,15,36,16,35,14,36,15,35,13,36,14,35,22,35,23,106,36,13,35,21,65,1,106,36,21,12,1,11,11,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,35,12,35,20,106,36,12,11,86,0,16,11,35,30,32,0,16,12,35,4,16,17,32,1,35,5,16,14,54,2,0,32,1,35,6,16,14,54,2,4,32,1,35,7,16,14,54,2,8,32,1,35,8,16,14,54,2,12,32,1,35,9,16,14,54,2,16,32,1,35,10,16,14,54,2,20,32,1,35,11,16,14,54,2,24,32,1,35,12,16,14,54,2,28,11,82,0,65,196,10,40,2,0,36,3,65,148,13,40,2,0,36,4,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,25,65,192,0,16,10,36,27,35,27,36,28,65,128,8,16,10,36,29,35,29,36,30,65,128,4,16,10,36,31,35,31,36,32,65,32,16,10,36,33,35,33,36,34,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); diff --git a/packages/as-sha256/src/wasmSimdCode.ts b/packages/as-sha256/src/wasmSimdCode.ts index c539555d2..643ee2dfe 100644 --- a/packages/as-sha256/src/wasmSimdCode.ts +++ b/packages/as-sha256/src/wasmSimdCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,30,29,0,0,0,0,0,6,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,0,0,3,3,3,0,4,5,3,1,0,1,6,222,4,60,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,158,1,12,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,28,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,27,5,105,110,112,117,116,3,54,6,111,117,116,112,117,116,3,56,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,158,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,53,32,2,65,2,116,106,32,2,65,3,106,34,4,35,55,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,3,65,2,116,106,35,55,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,2,65,2,116,106,35,55,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,4,65,2,116,106,35,55,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,53,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,53,106,35,55,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,53,32,0,16,19,11,74,0,65,231,204,167,208,6,36,31,65,133,221,158,219,123,36,32,65,242,230,187,227,3,36,33,65,186,234,191,170,122,36,34,65,255,164,185,136,5,36,35,65,140,209,149,216,121,36,36,65,171,179,143,252,1,36,37,65,153,154,131,223,5,36,38,65,0,36,58,65,0,36,59,11,227,3,1,1,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,16,73,4,64,32,0,35,47,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,16,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,32,0,35,47,65,16,107,65,2,116,106,40,2,0,32,0,35,47,65,7,107,65,2,116,106,40,2,0,32,0,35,47,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,47,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,34,1,106,40,2,0,32,1,35,29,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,1,35,41,34,2,113,32,1,35,39,34,1,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,174,1,1,2,127,35,59,32,1,106,36,59,35,58,4,64,65,192,0,35,58,107,34,2,32,1,76,4,64,35,51,35,58,106,32,0,32,2,252,10,0,0,35,58,32,2,106,36,58,65,192,0,35,58,107,33,2,32,1,65,192,0,35,58,107,107,33,1,35,53,35,51,16,23,65,0,36,58,5,35,51,35,58,106,32,0,32,1,252,10,0,0,35,58,32,1,106,36,58,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,53,32,0,32,2,106,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,51,35,58,106,32,0,32,2,106,32,1,252,10,0,0,35,58,32,1,106,36,58,11,11,146,2,1,2,127,35,59,65,63,113,65,63,73,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,59,65,63,113,65,56,79,4,64,35,51,35,58,106,34,1,65,192,0,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,53,35,51,16,23,65,0,36,58,11,35,59,65,63,113,65,63,79,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,51,35,58,106,34,1,65,56,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,51,35,59,65,128,128,128,128,2,109,16,18,54,2,56,35,51,35,59,65,3,116,16,18,54,2,60,35,53,35,51,16,23,32,0,35,31,16,18,54,2,0,32,0,35,32,16,18,54,2,4,32,0,35,33,16,18,54,2,8,32,0,35,34,16,18,54,2,12,32,0,35,35,16,18,54,2,16,32,0,35,36,16,18,54,2,20,32,0,35,37,16,18,54,2,24,32,0,35,38,16,18,54,2,28,11,14,0,16,22,35,55,32,0,16,24,35,57,16,25,11,253,1,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,1,113,32,2,35,39,34,2,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,86,0,16,22,35,53,32,0,16,23,35,30,16,27,32,1,35,31,16,18,54,2,0,32,1,35,32,16,18,54,2,4,32,1,35,33,16,18,54,2,8,32,1,35,34,16,18,54,2,12,32,1,35,35,16,18,54,2,16,32,1,35,36,16,18,54,2,20,32,1,35,37,16,18,54,2,24,32,1,35,38,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,29,65,148,13,40,2,0,36,30,65,192,0,16,11,36,50,35,50,36,51,65,128,8,16,11,36,52,35,52,36,53,65,128,4,16,11,36,54,35,54,36,55,65,32,16,11,36,56,35,56,36,57,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); +export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,30,29,0,0,0,0,0,6,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,0,0,3,3,3,0,4,5,3,1,0,1,6,227,4,61,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,1,11,7,169,1,13,8,72,65,83,95,83,73,77,68,3,60,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,28,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,27,5,105,110,112,117,116,3,54,6,111,117,116,112,117,116,3,56,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,158,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,53,32,2,65,2,116,106,32,2,65,3,106,34,4,35,55,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,3,65,2,116,106,35,55,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,2,65,2,116,106,35,55,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,4,65,2,116,106,35,55,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,53,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,53,106,35,55,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,53,32,0,16,19,11,74,0,65,231,204,167,208,6,36,31,65,133,221,158,219,123,36,32,65,242,230,187,227,3,36,33,65,186,234,191,170,122,36,34,65,255,164,185,136,5,36,35,65,140,209,149,216,121,36,36,65,171,179,143,252,1,36,37,65,153,154,131,223,5,36,38,65,0,36,58,65,0,36,59,11,227,3,1,1,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,16,73,4,64,32,0,35,47,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,16,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,32,0,35,47,65,16,107,65,2,116,106,40,2,0,32,0,35,47,65,7,107,65,2,116,106,40,2,0,32,0,35,47,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,47,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,34,1,106,40,2,0,32,1,35,29,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,1,35,41,34,2,113,32,1,35,39,34,1,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,174,1,1,2,127,35,59,32,1,106,36,59,35,58,4,64,65,192,0,35,58,107,34,2,32,1,76,4,64,35,51,35,58,106,32,0,32,2,252,10,0,0,35,58,32,2,106,36,58,65,192,0,35,58,107,33,2,32,1,65,192,0,35,58,107,107,33,1,35,53,35,51,16,23,65,0,36,58,5,35,51,35,58,106,32,0,32,1,252,10,0,0,35,58,32,1,106,36,58,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,53,32,0,32,2,106,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,51,35,58,106,32,0,32,2,106,32,1,252,10,0,0,35,58,32,1,106,36,58,11,11,146,2,1,2,127,35,59,65,63,113,65,63,73,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,59,65,63,113,65,56,79,4,64,35,51,35,58,106,34,1,65,192,0,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,53,35,51,16,23,65,0,36,58,11,35,59,65,63,113,65,63,79,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,51,35,58,106,34,1,65,56,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,51,35,59,65,128,128,128,128,2,109,16,18,54,2,56,35,51,35,59,65,3,116,16,18,54,2,60,35,53,35,51,16,23,32,0,35,31,16,18,54,2,0,32,0,35,32,16,18,54,2,4,32,0,35,33,16,18,54,2,8,32,0,35,34,16,18,54,2,12,32,0,35,35,16,18,54,2,16,32,0,35,36,16,18,54,2,20,32,0,35,37,16,18,54,2,24,32,0,35,38,16,18,54,2,28,11,14,0,16,22,35,55,32,0,16,24,35,57,16,25,11,253,1,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,1,113,32,2,35,39,34,2,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,86,0,16,22,35,53,32,0,16,23,35,30,16,27,32,1,35,31,16,18,54,2,0,32,1,35,32,16,18,54,2,4,32,1,35,33,16,18,54,2,8,32,1,35,34,16,18,54,2,12,32,1,35,35,16,18,54,2,16,32,1,35,36,16,18,54,2,20,32,1,35,37,16,18,54,2,24,32,1,35,38,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,29,65,148,13,40,2,0,36,30,65,192,0,16,11,36,50,35,50,36,51,65,128,8,16,11,36,52,35,52,36,53,65,128,4,16,11,36,54,35,54,36,55,65,32,16,11,36,56,35,56,36,57,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); From f66c82b557a36307665bcc9d20ec578494b1a7d8 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Fri, 20 Dec 2024 05:53:51 +0700 Subject: [PATCH 14/47] fix: simd override --- packages/as-sha256/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index f3a108cc8..9c443d32b 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -7,7 +7,7 @@ import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; let hasSimd = await simd(); -if (`${process.env.DISABLE_SIMD}` === "true") { +if (process.env.DISABLE_SIMD === "true") { hasSimd = false; } @@ -21,7 +21,7 @@ const outputUint8Array32 = new Uint8Array(ctx.memory.buffer, wasmOutputValue, 32 const inputUint32Array = new Uint32Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); export function simdEnabled(): boolean { - return ctx.HAS_SIMD; + return Boolean(ctx.HAS_SIMD.valueOf()); } export function digest(data: Uint8Array): Uint8Array { From 594c6424ff8492931f8e7996680e63f2c04ac173 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Fri, 20 Dec 2024 06:14:55 +0700 Subject: [PATCH 15/47] fix: trying to get non-simd to run during unit tests --- packages/as-sha256/src/index.ts | 37 +++++++--- packages/as-sha256/test/unit/getSimdTests.ts | 75 ++++++++++++++++++++ packages/as-sha256/test/unit/index.test.ts | 2 + packages/as-sha256/test/unit/noSimd.test.ts | 6 ++ packages/as-sha256/test/unit/simd.test.ts | 68 ++---------------- 5 files changed, 113 insertions(+), 75 deletions(-) create mode 100644 packages/as-sha256/test/unit/getSimdTests.ts create mode 100644 packages/as-sha256/test/unit/noSimd.test.ts diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 9c443d32b..9727db0e8 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -6,24 +6,39 @@ import {byteArrayIntoHashObject, byteArrayToHashObject, hashObjectToByteArray} f import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; -let hasSimd = await simd(); -if (process.env.DISABLE_SIMD === "true") { - hasSimd = false; -} +const hasSimd = await simd(); -const ctx = newInstance(hasSimd); -const wasmInputValue = ctx.input.value; -const wasmOutputValue = ctx.output.value; -const inputUint8Array = new Uint8Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); -const outputUint8Array = new Uint8Array(ctx.memory.buffer, wasmOutputValue, ctx.PARALLEL_FACTOR * 32); +let ctx: WasmSimdContext; +let wasmInputValue: number; +let wasmOutputValue: number; +let inputUint8Array: Uint8Array; +let outputUint8Array: Uint8Array; /** output uint8array, length 32, used to easily copy output data */ -const outputUint8Array32 = new Uint8Array(ctx.memory.buffer, wasmOutputValue, 32); -const inputUint32Array = new Uint32Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); +let outputUint8Array32: Uint8Array; +let inputUint32Array: Uint32Array; + +function initializeInstance(useSimd: boolean): void { + ctx = newInstance(useSimd) as WasmSimdContext; + wasmInputValue = ctx.input.value; + wasmOutputValue = ctx.output.value; + inputUint8Array = new Uint8Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); + outputUint8Array = new Uint8Array(ctx.memory.buffer, wasmOutputValue, ctx.PARALLEL_FACTOR * 32); + /** output uint8array, length 32, used to easily copy output data */ + outputUint8Array32 = new Uint8Array(ctx.memory.buffer, wasmOutputValue, 32); + inputUint32Array = new Uint32Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); +} + +initializeInstance(hasSimd); export function simdEnabled(): boolean { return Boolean(ctx.HAS_SIMD.valueOf()); } +export function reinitializeInstance(useSimd: boolean): boolean { + initializeInstance(useSimd); + return simdEnabled(); +} + export function digest(data: Uint8Array): Uint8Array { if (data.length === 64) { return digest64(data); diff --git a/packages/as-sha256/test/unit/getSimdTests.ts b/packages/as-sha256/test/unit/getSimdTests.ts new file mode 100644 index 000000000..8ed6f2291 --- /dev/null +++ b/packages/as-sha256/test/unit/getSimdTests.ts @@ -0,0 +1,75 @@ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import {expect} from "chai"; +import crypto from "crypto"; +import {byteArrayToHashObject, hashObjectToByteArray} from "../../src/hashObject.js"; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export function getSimdTests(sha256: any, hasSimd: boolean): void { + describe(`Test as-sha256 ${hasSimd ? "with SIMD" : "without SIMD"}`, () => { + before(function () { + expect(sha256.simdEnabled()).to.equal(hasSimd); + }); + it("testHash4UintArray64s", () => { + const input1 = "gajindergajindergajindergajinder"; + const input2 = "gajindergajindergajindergajinder"; + const input = Buffer.from(input1 + input2, "utf8"); + const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); + const expectedOutput = new Uint8Array([ + 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, + 131, 72, 178, 215, 235, 20, 207, 110, + ]); + for (let i = 0; i < 4; i++) { + expect(outputs[i]).to.be.deep.equal(expectedOutput, "incorrect batchHash4UintArray64s result " + i); + } + }); + + it("testHash4UintArray64s 1000 times", () => { + for (let i = 0; i < 1000; i++) { + const input = crypto.randomBytes(64); + const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); + const expectedOutput = sha256.digest64(input); + expect(outputs[0]).to.be.deep.equal(expectedOutput); + expect(outputs[1]).to.be.deep.equal(expectedOutput); + expect(outputs[2]).to.be.deep.equal(expectedOutput); + expect(outputs[3]).to.be.deep.equal(expectedOutput); + } + }); + + it("testHash4HashObjectInputs", () => { + const input1 = "gajindergajindergajindergajinder"; + const inputHashObject = byteArrayToHashObject(Buffer.from(input1, "utf8"), 0); + const outputs = sha256.batchHash4HashObjectInputs(Array.from({length: 8}, () => inputHashObject)); + const expectedOutput = new Uint8Array([ + 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, + 131, 72, 178, 215, 235, 20, 207, 110, + ]); + for (let i = 0; i < 4; i++) { + const output = new Uint8Array(32); + hashObjectToByteArray(outputs[i], output, 0); + expect(output).to.be.deep.equal(expectedOutput, "incorrect batchHash4UintArray64s result " + i); + } + }); + + const numHashes = [4, 5, 6, 7]; + for (const numHash of numHashes) { + it(`hashInto ${numHash} hashes`, () => { + const inputs = Array.from({length: numHash}, () => crypto.randomBytes(64)); + const input = new Uint8Array(numHash * 64); + for (let i = 0; i < numHash; i++) { + input.set(inputs[i], i * 64); + } + const output = new Uint8Array(numHash * 32); + + sha256.hashInto(input, output); + + const expectedOutputs = Array.from({length: numHash}, (_, i) => sha256.digest64(inputs[i])); + for (let i = 0; i < numHash; i++) { + expect(output.subarray(i * 32, (i + 1) * 32)).to.be.deep.equal(expectedOutputs[i]); + } + }); + } + }); +} diff --git a/packages/as-sha256/test/unit/index.test.ts b/packages/as-sha256/test/unit/index.test.ts index bd98e995a..6f65d2b42 100644 --- a/packages/as-sha256/test/unit/index.test.ts +++ b/packages/as-sha256/test/unit/index.test.ts @@ -3,6 +3,8 @@ import {Buffer} from "buffer"; import {expect} from "chai"; import * as sha256 from "../../src/index.js"; +sha256.reinitializeInstance(true); + describe("as-sha256", function () { describe("digest()", function () { const digestTestCases = [ diff --git a/packages/as-sha256/test/unit/noSimd.test.ts b/packages/as-sha256/test/unit/noSimd.test.ts new file mode 100644 index 000000000..9b38ee992 --- /dev/null +++ b/packages/as-sha256/test/unit/noSimd.test.ts @@ -0,0 +1,6 @@ +import * as sha256 from "../../src/index.js"; +import {getSimdTests} from "./getSimdTests.js"; + +const useSimd = false; +sha256.reinitializeInstance(useSimd); +getSimdTests(sha256, useSimd); diff --git a/packages/as-sha256/test/unit/simd.test.ts b/packages/as-sha256/test/unit/simd.test.ts index fbd21e519..acce45b3d 100644 --- a/packages/as-sha256/test/unit/simd.test.ts +++ b/packages/as-sha256/test/unit/simd.test.ts @@ -1,66 +1,6 @@ -import {describe, it, expect} from "vitest"; -import crypto from "crypto"; -import {byteArrayToHashObject, hashObjectToByteArray} from "../../src/hashObject.js"; import * as sha256 from "../../src/index.js"; +import {getSimdTests} from "./getSimdTests.js"; -describe("Test SIMD implementation of as-sha256", () => { - it("testHash4UintArray64s", () => { - const input1 = "gajindergajindergajindergajinder"; - const input2 = "gajindergajindergajindergajinder"; - const input = Buffer.from(input1 + input2, "utf8"); - const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); - const expectedOutput = new Uint8Array([ - 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, 131, - 72, 178, 215, 235, 20, 207, 110, - ]); - for (let i = 0; i < 4; i++) { - expect(outputs[i]).toEqualWithMessage(expectedOutput, "incorrect batchHash4UintArray64s result " + i); - } - }); - - it("testHash4UintArray64s 1000 times", () => { - for (let i = 0; i < 1000; i++) { - const input = crypto.randomBytes(64); - const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); - const expectedOutput = sha256.digest64(input); - expect(outputs[0]).toEqual(expectedOutput); - expect(outputs[1]).toEqual(expectedOutput); - expect(outputs[2]).toEqual(expectedOutput); - expect(outputs[3]).toEqual(expectedOutput); - } - }); - - it("testHash4HashObjectInputs", () => { - const input1 = "gajindergajindergajindergajinder"; - const inputHashObject = byteArrayToHashObject(Buffer.from(input1, "utf8"), 0); - const outputs = sha256.batchHash4HashObjectInputs(Array.from({length: 8}, () => inputHashObject)); - const expectedOutput = new Uint8Array([ - 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, 131, - 72, 178, 215, 235, 20, 207, 110, - ]); - for (let i = 0; i < 4; i++) { - const output = new Uint8Array(32); - hashObjectToByteArray(outputs[i], output, 0); - expect(output).toEqualWithMessage(expectedOutput, "incorrect batchHash4UintArray64s result " + i); - } - }); - - const numHashes = [4, 5, 6, 7]; - for (const numHash of numHashes) { - it(`hashInto ${numHash} hashes`, () => { - const inputs = Array.from({length: numHash}, () => crypto.randomBytes(64)); - const input = new Uint8Array(numHash * 64); - for (let i = 0; i < numHash; i++) { - input.set(inputs[i], i * 64); - } - const output = new Uint8Array(numHash * 32); - - sha256.hashInto(input, output); - - const expectedOutputs = Array.from({length: numHash}, (_, i) => sha256.digest64(inputs[i])); - for (let i = 0; i < numHash; i++) { - expect(output.subarray(i * 32, (i + 1) * 32)).toEqual(expectedOutputs[i]); - } - }); - } -}); +const useSimd = true; +sha256.reinitializeInstance(useSimd); +getSimdTests(sha256, useSimd); From ea434566b8e011f0ab04598b057b889d819396ae Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Fri, 20 Dec 2024 15:24:40 +0700 Subject: [PATCH 16/47] test: non-simd implementation --- packages/as-sha256/src/index.ts | 3 ++- packages/as-sha256/test/unit/getSimdTests.ts | 7 ++++--- packages/as-sha256/test/unit/noSimd.test.ts | 1 - packages/as-sha256/test/unit/simd.test.ts | 1 - 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 9727db0e8..0e8fd37ed 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -6,7 +6,7 @@ import {byteArrayIntoHashObject, byteArrayToHashObject, hashObjectToByteArray} f import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; -const hasSimd = await simd(); +let hasSimd = await simd(); let ctx: WasmSimdContext; let wasmInputValue: number; @@ -18,6 +18,7 @@ let outputUint8Array32: Uint8Array; let inputUint32Array: Uint32Array; function initializeInstance(useSimd: boolean): void { + hasSimd = useSimd; ctx = newInstance(useSimd) as WasmSimdContext; wasmInputValue = ctx.input.value; wasmOutputValue = ctx.output.value; diff --git a/packages/as-sha256/test/unit/getSimdTests.ts b/packages/as-sha256/test/unit/getSimdTests.ts index 8ed6f2291..a9067eb53 100644 --- a/packages/as-sha256/test/unit/getSimdTests.ts +++ b/packages/as-sha256/test/unit/getSimdTests.ts @@ -7,10 +7,11 @@ import crypto from "crypto"; import {byteArrayToHashObject, hashObjectToByteArray} from "../../src/hashObject.js"; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types -export function getSimdTests(sha256: any, hasSimd: boolean): void { - describe(`Test as-sha256 ${hasSimd ? "with SIMD" : "without SIMD"}`, () => { +export function getSimdTests(sha256: any, useSimd: boolean): void { + describe(`Test as-sha256 ${useSimd ? "with SIMD" : "without SIMD"}`, () => { before(function () { - expect(sha256.simdEnabled()).to.equal(hasSimd); + sha256.reinitializeInstance(useSimd); + expect(sha256.simdEnabled()).to.equal(useSimd); }); it("testHash4UintArray64s", () => { const input1 = "gajindergajindergajindergajinder"; diff --git a/packages/as-sha256/test/unit/noSimd.test.ts b/packages/as-sha256/test/unit/noSimd.test.ts index 9b38ee992..1d524567c 100644 --- a/packages/as-sha256/test/unit/noSimd.test.ts +++ b/packages/as-sha256/test/unit/noSimd.test.ts @@ -2,5 +2,4 @@ import * as sha256 from "../../src/index.js"; import {getSimdTests} from "./getSimdTests.js"; const useSimd = false; -sha256.reinitializeInstance(useSimd); getSimdTests(sha256, useSimd); diff --git a/packages/as-sha256/test/unit/simd.test.ts b/packages/as-sha256/test/unit/simd.test.ts index acce45b3d..cc5eb7116 100644 --- a/packages/as-sha256/test/unit/simd.test.ts +++ b/packages/as-sha256/test/unit/simd.test.ts @@ -2,5 +2,4 @@ import * as sha256 from "../../src/index.js"; import {getSimdTests} from "./getSimdTests.js"; const useSimd = true; -sha256.reinitializeInstance(useSimd); getSimdTests(sha256, useSimd); From 653baffcf730ee163708801cce27a8b0fbc5415c Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 2 Jan 2025 18:35:23 +0700 Subject: [PATCH 17/47] refactor: import HashObject as type --- packages/persistent-merkle-tree/src/node.ts | 2 +- packages/persistent-merkle-tree/test/unit/node.test.ts | 2 +- packages/persistent-merkle-tree/test/unit/packedNode.test.ts | 2 +- packages/ssz/src/branchNodeStruct.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/persistent-merkle-tree/src/node.ts b/packages/persistent-merkle-tree/src/node.ts index 545258757..b522fa747 100644 --- a/packages/persistent-merkle-tree/src/node.ts +++ b/packages/persistent-merkle-tree/src/node.ts @@ -1,4 +1,4 @@ -import {HashObject} from "@chainsafe/as-sha256"; +import type {HashObject} from "@chainsafe/as-sha256"; import {hashObjectToUint8Array, hasher, uint8ArrayToHashObject} from "./hasher/index.js"; const TWO_POWER_32 = 2 ** 32; diff --git a/packages/persistent-merkle-tree/test/unit/node.test.ts b/packages/persistent-merkle-tree/test/unit/node.test.ts index 5ebd6b941..7e9f3d508 100644 --- a/packages/persistent-merkle-tree/test/unit/node.test.ts +++ b/packages/persistent-merkle-tree/test/unit/node.test.ts @@ -1,4 +1,4 @@ -import {HashObject} from "@chainsafe/as-sha256"; +import type {HashObject} from "@chainsafe/as-sha256"; import {describe, it, expect} from "vitest"; import {BranchNode, LeafNode, countToDepth, subtreeFillToContents} from "../../src/index.js"; import {HashComputation, HashComputationLevel, getHashComputations} from "../../src/hashComputation.js"; diff --git a/packages/persistent-merkle-tree/test/unit/packedNode.test.ts b/packages/persistent-merkle-tree/test/unit/packedNode.test.ts index 51117a878..47682174b 100644 --- a/packages/persistent-merkle-tree/test/unit/packedNode.test.ts +++ b/packages/persistent-merkle-tree/test/unit/packedNode.test.ts @@ -1,5 +1,5 @@ import {describe, it, expect} from "vitest"; -import {HashObject} from "@chainsafe/as-sha256"; +import type {HashObject} from "@chainsafe/as-sha256"; import {LeafNode, Node} from "../../src/index.js"; import {packedNodeRootsToBytes, packedRootsBytesToLeafNodes, packedUintNum64sToLeafNodes} from "../../src/packedNode.js"; diff --git a/packages/ssz/src/branchNodeStruct.ts b/packages/ssz/src/branchNodeStruct.ts index 6debce71c..9a142d01c 100644 --- a/packages/ssz/src/branchNodeStruct.ts +++ b/packages/ssz/src/branchNodeStruct.ts @@ -1,4 +1,4 @@ -import {HashObject} from "@chainsafe/as-sha256"; +import type {HashObject} from "@chainsafe/as-sha256"; import {hashObjectToUint8Array, Node} from "@chainsafe/persistent-merkle-tree"; /** From a81feee8e22c7e4bdedcaf0dcc922d2c3eafc7b1 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 2 Jan 2025 20:29:13 +0700 Subject: [PATCH 18/47] feat: remove dependency of as-sha256 from noble hasher --- packages/persistent-merkle-tree/src/hasher/noble.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/persistent-merkle-tree/src/hasher/noble.ts b/packages/persistent-merkle-tree/src/hasher/noble.ts index 9096dbb41..28f989768 100644 --- a/packages/persistent-merkle-tree/src/hasher/noble.ts +++ b/packages/persistent-merkle-tree/src/hasher/noble.ts @@ -1,5 +1,5 @@ import {sha256} from "@noble/hashes/sha256"; -import {digest64HashObjects, byteArrayIntoHashObject} from "@chainsafe/as-sha256"; +import {byteArrayIntoHashObject} from "@chainsafe/as-sha256"; import type {Hasher} from "./types.js"; import { BLOCK_SIZE, @@ -55,7 +55,7 @@ export const hasher: Hasher = { } for (const hc of hcArr) { - hc.dest.applyHash(digest64HashObjects(hc.src0, hc.src1)); + hc.dest.applyHash(hasher.digest64HashObjects(hc.src0, hc.src1)); } } }, From 5481202d856b5f11a3487a7855ec325ae172ad50 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 2 Jan 2025 20:29:28 +0700 Subject: [PATCH 19/47] chore: turn on check-types for as-sha256 --- packages/as-sha256/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/as-sha256/package.json b/packages/as-sha256/package.json index 6edce91dd..3eba9b750 100644 --- a/packages/as-sha256/package.json +++ b/packages/as-sha256/package.json @@ -23,7 +23,7 @@ "scripts": { "clean": "rm -rf ./dist", "lint": "echo 'no linting for this package'", - "check-types": "echo 'no type check for this package'", + "check-types": "tsc --noEmit", "generate": "rm -rf ./dist && node --loader ts-node/esm ./scripts/codegen.ts", "asbuild:untouched": "asc assembly/index.ts -o build/untouched.wasm -t build/untouched.wat --runtime minimal --target debug", "asbuild:optimized": "asc assembly/index.ts -o build/optimized.wasm -t build/optimized.wat --runtime minimal --target release -O3z --noAssert", From 1425cae0449e28cf8c0f566b608428fecf51665b Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 2 Jan 2025 20:30:11 +0700 Subject: [PATCH 20/47] feat: as-sha256 async initialization --- packages/as-sha256/src/index.ts | 657 ++++++++++++++++---------------- 1 file changed, 339 insertions(+), 318 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 0e8fd37ed..031cc0d47 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -1,364 +1,385 @@ import {simd} from "wasm-feature-detect"; import {allocUnsafe} from "./alloc.js"; -import {newInstance, WasmSimdContext} from "./wasm.js"; +import {newInstance, WasmSimdContext, WasmContext} from "./wasm.js"; import type {HashObject} from "./hashObject.js"; import {byteArrayIntoHashObject, byteArrayToHashObject, hashObjectToByteArray} from "./hashObject.js"; import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; -let hasSimd = await simd(); - -let ctx: WasmSimdContext; -let wasmInputValue: number; -let wasmOutputValue: number; -let inputUint8Array: Uint8Array; -let outputUint8Array: Uint8Array; -/** output uint8array, length 32, used to easily copy output data */ -let outputUint8Array32: Uint8Array; -let inputUint32Array: Uint32Array; - -function initializeInstance(useSimd: boolean): void { - hasSimd = useSimd; - ctx = newInstance(useSimd) as WasmSimdContext; - wasmInputValue = ctx.input.value; - wasmOutputValue = ctx.output.value; - inputUint8Array = new Uint8Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); - outputUint8Array = new Uint8Array(ctx.memory.buffer, wasmOutputValue, ctx.PARALLEL_FACTOR * 32); - /** output uint8array, length 32, used to easily copy output data */ - outputUint8Array32 = new Uint8Array(ctx.memory.buffer, wasmOutputValue, 32); - inputUint32Array = new Uint32Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); -} - -initializeInstance(hasSimd); - -export function simdEnabled(): boolean { - return Boolean(ctx.HAS_SIMD.valueOf()); -} +export class AssemblyScriptSha256Hasher { + private ctx!: WasmSimdContext | WasmContext; + private hasSimd!: boolean; + private wasmInputValue!: number; + private wasmOutputValue!: number; + private inputUint8Array!: Uint8Array; + private outputUint8Array!: Uint8Array; + private outputUint8Array32!: Uint8Array; + private inputUint32Array!: Uint32Array; + private constructor(useSimd: boolean) { + this.initializeInstance(useSimd); + } -export function reinitializeInstance(useSimd: boolean): boolean { - initializeInstance(useSimd); - return simdEnabled(); -} + static async initialize(shouldUseSimd?: boolean): Promise { + const useSimd = shouldUseSimd !== undefined ? shouldUseSimd : await simd(); + return new AssemblyScriptSha256Hasher(useSimd); + } -export function digest(data: Uint8Array): Uint8Array { - if (data.length === 64) { - return digest64(data); + reinitializeInstance(useSimd: boolean): boolean { + this.initializeInstance(useSimd); + return this.simdEnabled(); } - if (data.length <= ctx.INPUT_LENGTH) { - inputUint8Array.set(data); - ctx.digest(data.length); - return allocDigest(); + simdEnabled(): boolean { + return Boolean(this.ctx.HAS_SIMD.valueOf()); } - ctx.init(); - update(data); - return final(); -} + digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Array { + if (bytes1.length !== 32 || bytes2.length !== 32) { + throw new Error("InvalidLengthForDigest64"); + } + this.inputUint8Array.set(bytes1); + this.inputUint8Array.set(bytes2, 32); + this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); + return this.allocDigest(); + } -export function digest64(data: Uint8Array): Uint8Array { - if (data.length === 64) { - inputUint8Array.set(data); - ctx.digest64(wasmInputValue, wasmOutputValue); - return allocDigest(); + /** + * Digest 2 objects, each has 8 properties from h0 to h7. + * The performance is a little bit better than digest64 due to the use of Uint32Array + * and the memory is a little bit better than digest64 due to no temporary Uint8Array. + */ + digest64HashObjects(obj1: HashObject, obj2: HashObject): HashObject { + const result: HashObject = { + h0: 0, + h1: 0, + h2: 0, + h3: 0, + h4: 0, + h5: 0, + h6: 0, + h7: 0, + }; + this.digest64HashObjectsInto(obj1, obj2, result); + return result; } - throw new Error("InvalidLengthForDigest64"); -} -export function digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Array { - if (bytes1.length === 32 && bytes2.length === 32) { - inputUint8Array.set(bytes1); - inputUint8Array.set(bytes2, 32); - ctx.digest64(wasmInputValue, wasmOutputValue); - return allocDigest(); + /** + * Same to above but this set result to the output param to save memory. + */ + digest64HashObjectsInto(obj1: HashObject, obj2: HashObject, output: HashObject): void { + // TODO: expect obj1 and obj2 as HashObject + this.inputUint32Array[0] = obj1.h0; + this.inputUint32Array[1] = obj1.h1; + this.inputUint32Array[2] = obj1.h2; + this.inputUint32Array[3] = obj1.h3; + this.inputUint32Array[4] = obj1.h4; + this.inputUint32Array[5] = obj1.h5; + this.inputUint32Array[6] = obj1.h6; + this.inputUint32Array[7] = obj1.h7; + this.inputUint32Array[8] = obj2.h0; + this.inputUint32Array[9] = obj2.h1; + this.inputUint32Array[10] = obj2.h2; + this.inputUint32Array[11] = obj2.h3; + this.inputUint32Array[12] = obj2.h4; + this.inputUint32Array[13] = obj2.h5; + this.inputUint32Array[14] = obj2.h6; + this.inputUint32Array[15] = obj2.h7; + + this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); + + // extracting numbers from Uint32Array causes more memory + byteArrayIntoHashObject(this.outputUint8Array, 0, output); } - throw new Error("InvalidLengthForDigest64"); -} -/** - * Digest 2 objects, each has 8 properties from h0 to h7. - * The performance is a little bit better than digest64 due to the use of Uint32Array - * and the memory is a little bit better than digest64 due to no temporary Uint8Array. - * @returns - */ -export function digest64HashObjects(obj1: HashObject, obj2: HashObject): HashObject { - const result: HashObject = { - h0: 0, - h1: 0, - h2: 0, - h3: 0, - h4: 0, - h5: 0, - h6: 0, - h7: 0, - }; - digest64HashObjectsInto(obj1, obj2, result); - return result; -} + /** + * Hash 4 HashObject inputs in parallel + * - Each input (inputs{i}) is 4 bytes which make it 32 bytes + * - Each HashObject input contains 2 HashObjects which is 64 bytes similar to batchHash4UintArray64s + * + * Inputs i0 i1 i2 i3 i4 i5 i6 i7 + * \ / \ / \ / \ / + * Outputs o0 o1 o2 o3 + * // TODO - batch: support equivalent method to hash into + */ + batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { + if (inputs.length !== 8) { + throw new Error("Input length must be 8"); + } -/** - * Same to above but this set result to the output param to save memory. - */ -export function digest64HashObjectsInto(obj1: HashObject, obj2: HashObject, output: HashObject): void { - // TODO: expect obj1 and obj2 as HashObject - inputUint32Array[0] = obj1.h0; - inputUint32Array[1] = obj1.h1; - inputUint32Array[2] = obj1.h2; - inputUint32Array[3] = obj1.h3; - inputUint32Array[4] = obj1.h4; - inputUint32Array[5] = obj1.h5; - inputUint32Array[6] = obj1.h6; - inputUint32Array[7] = obj1.h7; - inputUint32Array[8] = obj2.h0; - inputUint32Array[9] = obj2.h1; - inputUint32Array[10] = obj2.h2; - inputUint32Array[11] = obj2.h3; - inputUint32Array[12] = obj2.h4; - inputUint32Array[13] = obj2.h5; - inputUint32Array[14] = obj2.h6; - inputUint32Array[15] = obj2.h7; - - ctx.digest64(wasmInputValue, wasmOutputValue); - - // extracting numbers from Uint32Array causes more memory - byteArrayIntoHashObject(outputUint8Array, 0, output); -} + if (!this.hasSimd) { + const output: HashObject[] = new Array(4); + for (let i = 0; i < 4; i++) { + output[i] = this.digest64HashObjects(inputs[2 * i], inputs[2 * i + 1]); + } + return output; + } -/** - * Hash 4 Uint8Array objects in parallel, each 64 length as below - * - * Inputs: i0 i1 i2 i3 i4 i5 i6 i7 - * \ / \ / \ / \ / - * Outputs: o0 o1 o2 o3 - */ -export function batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { - if (inputs.length !== 4) { - throw new Error("Input length must be 4"); + // inputUint8Array is 256 bytes + // inputUint32Array is 64 items + // v128 0 + this.inputUint32Array[0] = inputs[0].h0; + this.inputUint32Array[1] = inputs[2].h0; + this.inputUint32Array[2] = inputs[4].h0; + this.inputUint32Array[3] = inputs[6].h0; + + // v128 1 + this.inputUint32Array[4] = inputs[0].h1; + this.inputUint32Array[5] = inputs[2].h1; + this.inputUint32Array[6] = inputs[4].h1; + this.inputUint32Array[7] = inputs[6].h1; + + // v128 2 + this.inputUint32Array[8] = inputs[0].h2; + this.inputUint32Array[9] = inputs[2].h2; + this.inputUint32Array[10] = inputs[4].h2; + this.inputUint32Array[11] = inputs[6].h2; + + // v128 3 + this.inputUint32Array[12] = inputs[0].h3; + this.inputUint32Array[13] = inputs[2].h3; + this.inputUint32Array[14] = inputs[4].h3; + this.inputUint32Array[15] = inputs[6].h3; + + // v128 4 + this.inputUint32Array[16] = inputs[0].h4; + this.inputUint32Array[17] = inputs[2].h4; + this.inputUint32Array[18] = inputs[4].h4; + this.inputUint32Array[19] = inputs[6].h4; + + // v128 5 + this.inputUint32Array[20] = inputs[0].h5; + this.inputUint32Array[21] = inputs[2].h5; + this.inputUint32Array[22] = inputs[4].h5; + this.inputUint32Array[23] = inputs[6].h5; + + // v128 6 + this.inputUint32Array[24] = inputs[0].h6; + this.inputUint32Array[25] = inputs[2].h6; + this.inputUint32Array[26] = inputs[4].h6; + this.inputUint32Array[27] = inputs[6].h6; + + // v128 7 + this.inputUint32Array[28] = inputs[0].h7; + this.inputUint32Array[29] = inputs[2].h7; + this.inputUint32Array[30] = inputs[4].h7; + this.inputUint32Array[31] = inputs[6].h7; + + // v128 8 + this.inputUint32Array[32] = inputs[1].h0; + this.inputUint32Array[33] = inputs[3].h0; + this.inputUint32Array[34] = inputs[5].h0; + this.inputUint32Array[35] = inputs[7].h0; + + // v128 9 + this.inputUint32Array[36] = inputs[1].h1; + this.inputUint32Array[37] = inputs[3].h1; + this.inputUint32Array[38] = inputs[5].h1; + this.inputUint32Array[39] = inputs[7].h1; + + // v128 10 + this.inputUint32Array[40] = inputs[1].h2; + this.inputUint32Array[41] = inputs[3].h2; + this.inputUint32Array[42] = inputs[5].h2; + this.inputUint32Array[43] = inputs[7].h2; + + // v128 11 + this.inputUint32Array[44] = inputs[1].h3; + this.inputUint32Array[45] = inputs[3].h3; + this.inputUint32Array[46] = inputs[5].h3; + this.inputUint32Array[47] = inputs[7].h3; + + // v128 12 + this.inputUint32Array[48] = inputs[1].h4; + this.inputUint32Array[49] = inputs[3].h4; + this.inputUint32Array[50] = inputs[5].h4; + this.inputUint32Array[51] = inputs[7].h4; + + // v128 13 + this.inputUint32Array[52] = inputs[1].h5; + this.inputUint32Array[53] = inputs[3].h5; + this.inputUint32Array[54] = inputs[5].h5; + this.inputUint32Array[55] = inputs[7].h5; + + // v128 14 + this.inputUint32Array[56] = inputs[1].h6; + this.inputUint32Array[57] = inputs[3].h6; + this.inputUint32Array[58] = inputs[5].h6; + this.inputUint32Array[59] = inputs[7].h6; + + // v128 15 + this.inputUint32Array[60] = inputs[1].h7; + this.inputUint32Array[61] = inputs[3].h7; + this.inputUint32Array[62] = inputs[5].h7; + this.inputUint32Array[63] = inputs[7].h7; + + (this.ctx as WasmSimdContext).batchHash4HashObjectInputs(this.wasmOutputValue); + + const output0 = byteArrayToHashObject(this.outputUint8Array, 0); + const output1 = byteArrayToHashObject(this.outputUint8Array, 32); + const output2 = byteArrayToHashObject(this.outputUint8Array, 64); + const output3 = byteArrayToHashObject(this.outputUint8Array, 96); + + return [output0, output1, output2, output3]; } - for (let i = 0; i < 4; i++) { - const input = inputs[i]; - if (input == null) { - throw new Error(`Input ${i} is null or undefined`); + + /** + * Hash an input into preallocated input using batch if possible. + */ + hashInto(input: Uint8Array, output: Uint8Array): void { + if (input.length % 64 !== 0) { + throw new Error(`Invalid input length ${input.length}`); } - if (input.length !== 64) { - throw new Error(`Invalid length ${input.length} at input ${i}`); + if (input.length !== output.length * 2) { + throw new Error(`Invalid output length ${output.length}`); } - } - - if (hasSimd) { - // set up input buffer for v128 - inputUint8Array.set(inputs[0], 0); - inputUint8Array.set(inputs[1], 64); - inputUint8Array.set(inputs[2], 128); - inputUint8Array.set(inputs[3], 192); - (ctx as WasmSimdContext).batchHash4UintArray64s(wasmOutputValue); - - const output0 = allocDigest(); - const output1 = allocDigestOffset(32); - const output2 = allocDigestOffset(64); - const output3 = allocDigestOffset(96); + let num64ByteChunksHashed = 0; + let num64ByteChunksRemaining = input.length / 64; + if (this.hasSimd) { + // for every 64 x 4 = 256 bytes, do the batch hash if SIMD is present + const num256ByteChunks = Math.floor(input.length / 256); + for (let i = 0; i < num256ByteChunks; i++) { + this.inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); + (this.ctx as WasmSimdContext).batchHash4UintArray64s(this.wasmOutputValue); + output.set(this.outputUint8Array.subarray(0, 128), i * 128); + } + num64ByteChunksHashed = num256ByteChunks * 4; + num64ByteChunksRemaining -= num64ByteChunksHashed; + } - return [output0, output1, output2, output3]; + const inputOffset = num64ByteChunksHashed * 64; + const outputOffset = num64ByteChunksHashed * 32; + for (let i = 0; i < num64ByteChunksRemaining; i++) { + this.inputUint8Array.set(input.subarray(inputOffset + i * 64, inputOffset + (i + 1) * 64), 0); + this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); + output.set(this.outputUint8Array.subarray(0, 32), outputOffset + i * 32); + } } - return inputs.map(digest64); -} - -/** - * Hash 4 HashObject inputs in parallel - * - Each input (inputs{i}) is 4 bytes which make it 32 bytes - * - Each HashObject input contains 2 HashObjects which is 64 bytes similar to batchHash4UintArray64s - * - * Inputs i0 i1 i2 i3 i4 i5 i6 i7 - * \ / \ / \ / \ / - * Outputs o0 o1 o2 o3 - * // TODO - batch: support equivalent method to hash into - */ -export function batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { - if (inputs.length !== 8) { - throw new Error("Input length must be 8"); + private initializeInstance(useSimd: boolean): void { + this.ctx = newInstance(useSimd); + this.hasSimd = this.simdEnabled(); + this.wasmInputValue = this.ctx.input.value; + this.wasmOutputValue = this.ctx.output.value; + this.inputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); + this.outputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, this.ctx.PARALLEL_FACTOR * 32); + /** output uint8array, length 32, used to easily copy output data */ + this.outputUint8Array32 = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, 32); + this.inputUint32Array = new Uint32Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); } - if (!hasSimd) { - const output: HashObject[] = new Array(4); - for (let i = 0; i < 4; i++) { - output[i] = digest64HashObjects(inputs[2 * i], inputs[2 * i + 1]); + private update(data: Uint8Array): void { + const INPUT_LENGTH = this.ctx.INPUT_LENGTH; + if (data.length > INPUT_LENGTH) { + for (let i = 0; i < data.length; i += INPUT_LENGTH) { + const sliced = data.subarray(i, i + INPUT_LENGTH); + this.inputUint8Array.set(sliced); + this.ctx.update(this.wasmInputValue, sliced.length); + } + } else { + this.inputUint8Array.set(data); + this.ctx.update(this.wasmInputValue, data.length); } - return output; } - // inputUint8Array is 256 bytes - // inputUint32Array is 64 items - // v128 0 - inputUint32Array[0] = inputs[0].h0; - inputUint32Array[1] = inputs[2].h0; - inputUint32Array[2] = inputs[4].h0; - inputUint32Array[3] = inputs[6].h0; - - // v128 1 - inputUint32Array[4] = inputs[0].h1; - inputUint32Array[5] = inputs[2].h1; - inputUint32Array[6] = inputs[4].h1; - inputUint32Array[7] = inputs[6].h1; - - // v128 2 - inputUint32Array[8] = inputs[0].h2; - inputUint32Array[9] = inputs[2].h2; - inputUint32Array[10] = inputs[4].h2; - inputUint32Array[11] = inputs[6].h2; - - // v128 3 - inputUint32Array[12] = inputs[0].h3; - inputUint32Array[13] = inputs[2].h3; - inputUint32Array[14] = inputs[4].h3; - inputUint32Array[15] = inputs[6].h3; - - // v128 4 - inputUint32Array[16] = inputs[0].h4; - inputUint32Array[17] = inputs[2].h4; - inputUint32Array[18] = inputs[4].h4; - inputUint32Array[19] = inputs[6].h4; - - // v128 5 - inputUint32Array[20] = inputs[0].h5; - inputUint32Array[21] = inputs[2].h5; - inputUint32Array[22] = inputs[4].h5; - inputUint32Array[23] = inputs[6].h5; - - // v128 6 - inputUint32Array[24] = inputs[0].h6; - inputUint32Array[25] = inputs[2].h6; - inputUint32Array[26] = inputs[4].h6; - inputUint32Array[27] = inputs[6].h6; - - // v128 7 - inputUint32Array[28] = inputs[0].h7; - inputUint32Array[29] = inputs[2].h7; - inputUint32Array[30] = inputs[4].h7; - inputUint32Array[31] = inputs[6].h7; - - // v128 8 - inputUint32Array[32] = inputs[1].h0; - inputUint32Array[33] = inputs[3].h0; - inputUint32Array[34] = inputs[5].h0; - inputUint32Array[35] = inputs[7].h0; - - // v128 9 - inputUint32Array[36] = inputs[1].h1; - inputUint32Array[37] = inputs[3].h1; - inputUint32Array[38] = inputs[5].h1; - inputUint32Array[39] = inputs[7].h1; - - // v128 10 - inputUint32Array[40] = inputs[1].h2; - inputUint32Array[41] = inputs[3].h2; - inputUint32Array[42] = inputs[5].h2; - inputUint32Array[43] = inputs[7].h2; - - // v128 11 - inputUint32Array[44] = inputs[1].h3; - inputUint32Array[45] = inputs[3].h3; - inputUint32Array[46] = inputs[5].h3; - inputUint32Array[47] = inputs[7].h3; - - // v128 12 - inputUint32Array[48] = inputs[1].h4; - inputUint32Array[49] = inputs[3].h4; - inputUint32Array[50] = inputs[5].h4; - inputUint32Array[51] = inputs[7].h4; - - // v128 13 - inputUint32Array[52] = inputs[1].h5; - inputUint32Array[53] = inputs[3].h5; - inputUint32Array[54] = inputs[5].h5; - inputUint32Array[55] = inputs[7].h5; - - // v128 14 - inputUint32Array[56] = inputs[1].h6; - inputUint32Array[57] = inputs[3].h6; - inputUint32Array[58] = inputs[5].h6; - inputUint32Array[59] = inputs[7].h6; - - // v128 15 - inputUint32Array[60] = inputs[1].h7; - inputUint32Array[61] = inputs[3].h7; - inputUint32Array[62] = inputs[5].h7; - inputUint32Array[63] = inputs[7].h7; - - (ctx as WasmSimdContext).batchHash4HashObjectInputs(wasmOutputValue); - - const output0 = byteArrayToHashObject(outputUint8Array, 0); - const output1 = byteArrayToHashObject(outputUint8Array, 32); - const output2 = byteArrayToHashObject(outputUint8Array, 64); - const output3 = byteArrayToHashObject(outputUint8Array, 96); - - return [output0, output1, output2, output3]; -} + private final(): Uint8Array { + this.ctx.final(this.wasmOutputValue); + return this.allocDigest(); + } -/** - * Hash an input into preallocated input using batch if possible. - */ -export function hashInto(input: Uint8Array, output: Uint8Array): void { - if (input.length % 64 !== 0) { - throw new Error(`Invalid input length ${input.length}`); + /** + * allocate memory and copy result + */ + private allocDigest(): Uint8Array { + const out = allocUnsafe(32); + out.set(this.outputUint8Array32); + return out; } - if (input.length !== output.length * 2) { - throw new Error(`Invalid output length ${output.length}`); + + /** allocate memory and copy result at offset */ + private allocDigestOffset(offset: number): Uint8Array { + const out = allocUnsafe(32); + out.set(this.outputUint8Array.subarray(offset, offset + 32)); + return out; } - let num64ByteChunksHashed = 0; - let num64ByteChunksRemaining = input.length / 64; - if (hasSimd) { - // for every 64 x 4 = 256 bytes, do the batch hash if SIMD is present - const num256ByteChunks = Math.floor(input.length / 256); - for (let i = 0; i < num256ByteChunks; i++) { - inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); - (ctx as WasmSimdContext).batchHash4UintArray64s(wasmOutputValue); - output.set(outputUint8Array.subarray(0, 128), i * 128); + /** + * @deprecated methods that are not used by persistent-merkle-tree. + * + * To be removed in a future release + */ + + /** + * @deprecated + */ + private digest(data: Uint8Array): Uint8Array { + if (data.length === 64) { + return this.digest64(data); + } + + if (data.length <= this.ctx.INPUT_LENGTH) { + this.inputUint8Array.set(data); + this.ctx.digest(data.length); + return this.allocDigest(); } - num64ByteChunksHashed = num256ByteChunks * 4; - num64ByteChunksRemaining -= num64ByteChunksHashed; - } - const inputOffset = num64ByteChunksHashed * 64; - const outputOffset = num64ByteChunksHashed * 32; - for (let i = 0; i < num64ByteChunksRemaining; i++) { - inputUint8Array.set(input.subarray(inputOffset + i * 64, inputOffset + (i + 1) * 64), 0); - ctx.digest64(wasmInputValue, wasmOutputValue); - output.set(outputUint8Array.subarray(0, 32), outputOffset + i * 32); + this.ctx.init(); + this.update(data); + return this.final(); } -} -function update(data: Uint8Array): void { - const INPUT_LENGTH = ctx.INPUT_LENGTH; - if (data.length > INPUT_LENGTH) { - for (let i = 0; i < data.length; i += INPUT_LENGTH) { - const sliced = data.subarray(i, i + INPUT_LENGTH); - inputUint8Array.set(sliced); - ctx.update(wasmInputValue, sliced.length); + /** + * @deprecated + */ + private digest64(data: Uint8Array): Uint8Array { + if (data.length === 64) { + this.inputUint8Array.set(data); + this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); + return this.allocDigest(); } - } else { - inputUint8Array.set(data); - ctx.update(wasmInputValue, data.length); + throw new Error("InvalidLengthForDigest64"); } -} -function final(): Uint8Array { - ctx.final(wasmOutputValue); - return allocDigest(); -} + /** + * @deprecated + * + * Hash 4 Uint8Array objects in parallel, each 64 length as below + * + * Inputs: i0 i1 i2 i3 i4 i5 i6 i7 + * \ / \ / \ / \ / + * Outputs: o0 o1 o2 o3 + */ + private batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { + if (inputs.length !== 4) { + throw new Error("Input length must be 4"); + } + for (let i = 0; i < 4; i++) { + const input = inputs[i]; + if (input == null) { + throw new Error(`Input ${i} is null or undefined`); + } + if (input.length !== 64) { + throw new Error(`Invalid length ${input.length} at input ${i}`); + } + } -/** allocate memory and copy result */ -function allocDigest(): Uint8Array { - const out = allocUnsafe(32); - out.set(outputUint8Array32); - return out; -} + if (!this.hasSimd) { + return inputs.map(this.digest64); + } -/** allocate memory and copy result at offset */ -function allocDigestOffset(offset: number): Uint8Array { - const out = allocUnsafe(32); - out.set(outputUint8Array.subarray(offset, offset + 32)); - return out; + // set up input buffer for v128 + this.inputUint8Array.set(inputs[1], 64); + this.inputUint8Array.set(inputs[0], 0); + this.inputUint8Array.set(inputs[2], 128); + this.inputUint8Array.set(inputs[3], 192); + + (this.ctx as WasmSimdContext).batchHash4UintArray64s(this.wasmOutputValue); + + const output0 = this.allocDigest(); + const output1 = this.allocDigestOffset(32); + const output2 = this.allocDigestOffset(64); + const output3 = this.allocDigestOffset(96); + + return [output0, output1, output2, output3]; + } } From 66f82471d2e3f9b526a0767a0fb59ccdaaac8d66 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 2 Jan 2025 20:30:48 +0700 Subject: [PATCH 21/47] test: update as-sha256 tests for async initialization and remove unused method tests --- packages/as-sha256/test/perf/index.test.ts | 64 ++++---- packages/as-sha256/test/perf/simd.test.ts | 27 ++-- packages/as-sha256/test/unit/getSimdTests.ts | 48 +++--- packages/as-sha256/test/unit/index.test.ts | 157 ++++++++++--------- packages/as-sha256/test/unit/noSimd.test.ts | 3 +- packages/as-sha256/test/unit/simd.test.ts | 3 +- 6 files changed, 162 insertions(+), 140 deletions(-) diff --git a/packages/as-sha256/test/perf/index.test.ts b/packages/as-sha256/test/perf/index.test.ts index 2e420aeac..b7c522d73 100644 --- a/packages/as-sha256/test/perf/index.test.ts +++ b/packages/as-sha256/test/perf/index.test.ts @@ -1,5 +1,5 @@ import {itBench, setBenchOpts} from "@dapplion/benchmark"; -import * as sha256 from "../../src/index.js"; +import {AssemblyScriptSha256Hasher, byteArrayToHashObject, hashObjectToByteArray} from "../../src/index.js"; // Feb 2024 Mac M1 // digestTwoHashObjects vs digest64 vs digest @@ -11,39 +11,43 @@ describe("digestTwoHashObjects vs digest64 vs digest", () => { minMs: 60000, }); - const input = Buffer.from("gajindergajindergajindergajindergajindergajindergajindergajinder", "utf8"); + let sha256: AssemblyScriptSha256Hasher; + before(async function () { + sha256 = await AssemblyScriptSha256Hasher.initialize(); + }); + const input1 = "gajindergajindergajindergajinder"; const input2 = "gajindergajindergajindergajinder"; const buffer1 = Buffer.from(input1, "utf-8"); const buffer2 = Buffer.from(input2, "utf-8"); - const obj1 = sha256.byteArrayToHashObject(buffer1, 0); - const obj2 = sha256.byteArrayToHashObject(buffer2, 0); + const obj1 = byteArrayToHashObject(buffer1, 0); + const obj2 = byteArrayToHashObject(buffer2, 0); // total number of time running hash for 200000 balances const iterations = 50023; itBench(`digestTwoHashObjects ${iterations} times`, () => { for (let j = 0; j < iterations; j++) sha256.digest64HashObjects(obj1, obj2); }); - itBench(`digest64 ${iterations} times`, () => { - for (let j = 0; j < iterations; j++) sha256.digest64(input); + itBench(`digest2Bytes32 ${iterations} times`, () => { + for (let j = 0; j < iterations; j++) sha256.digest2Bytes32(buffer1, buffer2); }); - itBench(`digest ${iterations} times`, () => { - for (let j = 0; j < iterations; j++) sha256.digest(input); - }); + // itBench(`digest ${iterations} times`, () => { + // for (let j = 0; j < iterations; j++) sha256.digest(input); + // }); }); -describe("digest different Buffers", () => { - const randomBuffer = (length: number): Uint8Array => - Buffer.from(Array.from({length}, () => Math.round(Math.random() * 255))); +// describe("digest different Buffers", () => { +// const randomBuffer = (length: number): Uint8Array => +// Buffer.from(Array.from({length}, () => Math.round(Math.random() * 255))); - for (const length of [32, 64, 128, 256, 512, 1024]) { - const buffer = randomBuffer(length); - itBench(`input length ${length}`, () => { - sha256.digest(buffer); - }); - } -}); +// for (const length of [32, 64, 128, 256, 512, 1024]) { +// const buffer = randomBuffer(length); +// itBench(`input length ${length}`, () => { +// sha256.digest(buffer); +// }); +// } +// }); /** * time java: 2968 336927.2237196765 hashes/sec @@ -53,16 +57,16 @@ describe("digest different Buffers", () => { * digest 1000000 times 0.8279731 ops/s 1.207769 s/op - 82 runs 100 s * => we are at 8279731 hashes/sec */ -describe("hash - compare to java", () => { - // java statistic for same test: https://gist.github.com/scoroberts/a60d61a2cc3afba1e8813b338ecd1501 +// describe("hash - compare to java", () => { +// // java statistic for same test: https://gist.github.com/scoroberts/a60d61a2cc3afba1e8813b338ecd1501 - const iterations = 1000000; - const input = Buffer.from("lwkjt23uy45pojsdf;lnwo45y23po5i;lknwe;lknasdflnqw3uo5", "utf8"); +// const iterations = 1000000; +// const input = Buffer.from("lwkjt23uy45pojsdf;lnwo45y23po5i;lknwe;lknasdflnqw3uo5", "utf8"); - itBench(`digest ${iterations} times`, () => { - for (let i = 0; i < iterations; i++) sha256.digest(input); - }); -}); +// itBench(`digest ${iterations} times`, () => { +// for (let i = 0; i < iterations; i++) sha256.digest(input); +// }); +// }); // Aug 10 2021 // utils @@ -71,17 +75,17 @@ describe("hash - compare to java", () => { describe("utils", () => { const input1 = "gajindergajindergajindergajinder"; const buffer1 = Buffer.from(input1, "utf-8"); - const obj1 = sha256.byteArrayToHashObject(buffer1, 0); + const obj1 = byteArrayToHashObject(buffer1, 0); // total number of time running hash for 200000 balances const iterations = 50023; itBench(`hashObjectToByteArray ${iterations} times`, () => { const byteArr = new Uint8Array(32); - for (let j = 0; j < iterations; j++) sha256.hashObjectToByteArray(obj1, byteArr, 0); + for (let j = 0; j < iterations; j++) hashObjectToByteArray(obj1, byteArr, 0); }); itBench(`byteArrayToHashObject ${iterations} times`, () => { - for (let j = 0; j < iterations; j++) sha256.byteArrayToHashObject(buffer1, 0); + for (let j = 0; j < iterations; j++) byteArrayToHashObject(buffer1, 0); }); }); diff --git a/packages/as-sha256/test/perf/simd.test.ts b/packages/as-sha256/test/perf/simd.test.ts index a14605330..3c0e6b875 100644 --- a/packages/as-sha256/test/perf/simd.test.ts +++ b/packages/as-sha256/test/perf/simd.test.ts @@ -1,5 +1,5 @@ import {itBench, setBenchOpts} from "@dapplion/benchmark"; -import * as sha256 from "../../src/index.js"; +import {AssemblyScriptSha256Hasher} from "../../src/index.js"; import {byteArrayToHashObject} from "../../src/hashObject.js"; /** @@ -18,19 +18,24 @@ describe("digest64 vs batchHash4UintArray64s vs digest64HashObjects vs batchHash minMs: 10_000, }); - const input = Buffer.from("gajindergajindergajindergajindergajindergajindergajindergajinder", "utf8"); + let sha256: AssemblyScriptSha256Hasher; + before(async function () { + sha256 = await AssemblyScriptSha256Hasher.initialize(); + }); + + // const input = Buffer.from("gajindergajindergajindergajindergajindergajindergajindergajinder", "utf8"); // total number of time running hash for 200000 balances const iterations = 50023; - itBench(`digest64 ${iterations * 4} times`, () => { - for (let j = 0; j < iterations * 4; j++) sha256.digest64(input); - }); + // itBench(`digest64 ${iterations * 4} times`, () => { + // for (let j = 0; j < iterations * 4; j++) sha256.digest64(input); + // }); - // batchHash4UintArray64s do 4 sha256 in parallel - itBench(`hash ${iterations * 4} times using batchHash4UintArray64s`, () => { - for (let j = 0; j < iterations; j++) { - sha256.batchHash4UintArray64s([input, input, input, input]); - } - }); + // // batchHash4UintArray64s do 4 sha256 in parallel + // itBench(`hash ${iterations * 4} times using batchHash4UintArray64s`, () => { + // for (let j = 0; j < iterations; j++) { + // sha256.batchHash4UintArray64s([input, input, input, input]); + // } + // }); const hashObject = byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf8"), 0); itBench(`digest64HashObjects ${iterations * 4} times`, () => { diff --git a/packages/as-sha256/test/unit/getSimdTests.ts b/packages/as-sha256/test/unit/getSimdTests.ts index a9067eb53..fa365b025 100644 --- a/packages/as-sha256/test/unit/getSimdTests.ts +++ b/packages/as-sha256/test/unit/getSimdTests.ts @@ -13,31 +13,31 @@ export function getSimdTests(sha256: any, useSimd: boolean): void { sha256.reinitializeInstance(useSimd); expect(sha256.simdEnabled()).to.equal(useSimd); }); - it("testHash4UintArray64s", () => { - const input1 = "gajindergajindergajindergajinder"; - const input2 = "gajindergajindergajindergajinder"; - const input = Buffer.from(input1 + input2, "utf8"); - const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); - const expectedOutput = new Uint8Array([ - 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, - 131, 72, 178, 215, 235, 20, 207, 110, - ]); - for (let i = 0; i < 4; i++) { - expect(outputs[i]).to.be.deep.equal(expectedOutput, "incorrect batchHash4UintArray64s result " + i); - } - }); + // it("testHash4UintArray64s", () => { + // const input1 = "gajindergajindergajindergajinder"; + // const input2 = "gajindergajindergajindergajinder"; + // const input = Buffer.from(input1 + input2, "utf8"); + // const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); + // const expectedOutput = new Uint8Array([ + // 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, + // 131, 72, 178, 215, 235, 20, 207, 110, + // ]); + // for (let i = 0; i < 4; i++) { + // expect(outputs[i]).to.be.deep.equal(expectedOutput, "incorrect batchHash4UintArray64s result " + i); + // } + // }); - it("testHash4UintArray64s 1000 times", () => { - for (let i = 0; i < 1000; i++) { - const input = crypto.randomBytes(64); - const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); - const expectedOutput = sha256.digest64(input); - expect(outputs[0]).to.be.deep.equal(expectedOutput); - expect(outputs[1]).to.be.deep.equal(expectedOutput); - expect(outputs[2]).to.be.deep.equal(expectedOutput); - expect(outputs[3]).to.be.deep.equal(expectedOutput); - } - }); + // it("testHash4UintArray64s 1000 times", () => { + // for (let i = 0; i < 1000; i++) { + // const input = crypto.randomBytes(64); + // const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); + // const expectedOutput = sha256.digest64(input); + // expect(outputs[0]).to.be.deep.equal(expectedOutput); + // expect(outputs[1]).to.be.deep.equal(expectedOutput); + // expect(outputs[2]).to.be.deep.equal(expectedOutput); + // expect(outputs[3]).to.be.deep.equal(expectedOutput); + // } + // }); it("testHash4HashObjectInputs", () => { const input1 = "gajindergajindergajindergajinder"; diff --git a/packages/as-sha256/test/unit/index.test.ts b/packages/as-sha256/test/unit/index.test.ts index 6f65d2b42..73776f998 100644 --- a/packages/as-sha256/test/unit/index.test.ts +++ b/packages/as-sha256/test/unit/index.test.ts @@ -1,47 +1,20 @@ import {describe, it, expect} from "vitest"; import {Buffer} from "buffer"; import {expect} from "chai"; -import * as sha256 from "../../src/index.js"; - -sha256.reinitializeInstance(true); +import {AssemblyScriptSha256Hasher, byteArrayToHashObject, hashObjectToByteArray} from "../../src/index.js"; describe("as-sha256", function () { - describe("digest()", function () { - const digestTestCases = [ - { - input: "", - expected: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - }, - { - input: "abc", - expected: "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", - }, - { - input: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - expected: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1", - }, - { - input: - "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", - expected: "cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1", - }, - ]; - - for (const {input, expected} of digestTestCases) { - const name = input === "" ? "empty string" : input; - it(`digest: ${name}`, function () { - const output = sha256.digest(Buffer.from(input, "utf-8")); - expect(Buffer.from(output).toString("hex")).to.be.equal(expected); - }); - } + let sha256: AssemblyScriptSha256Hasher; + before(async function () { + sha256 = await AssemblyScriptSha256Hasher.initialize(); }); - describe("digest64()", function () { + describe("digest2Bytes32()", function () { it("gajindergajindergajindergajindergajindergajindergajindergajinder", function () { - const input1 = "gajindergajindergajindergajinder"; - const input2 = "gajindergajindergajindergajinder"; - const input = Buffer.from(input1 + input2, "utf8"); - const output = sha256.digest64(input); + const input1 = Buffer.from("gajindergajindergajindergajinder", "utf8"); + const input2 = Buffer.from("gajindergajindergajindergajinder", "utf8"); + // const input = Buffer.from(input1 + input2, "utf8"); + const output = sha256.digest2Bytes32(input1, input2); const expectedOutput = new Uint8Array([ 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, 131, 72, 178, 215, 235, 20, 207, 110, @@ -50,58 +23,96 @@ describe("as-sha256", function () { }); }); - it("digest and digest64 output matches", function () { - const input = Buffer.from("harkamalharkamalharkamalharkamalharkamalharkamalharkamalharkamal", "utf8"); - const output = Buffer.from(sha256.digest(input)).toString("hex"); - const output64 = Buffer.from(sha256.digest64(input)).toString("hex"); - expect(output).to.be.equal(output64); - }); - - it("1024 digest test", function () { - const inputStr = "12345678".repeat(128); - const input = Buffer.from(inputStr, "utf8"); - expect(input.length).to.be.equal(1024); - - const output = Buffer.from(sha256.digest(input)).toString("hex"); - expect(output).to.be.equal("54c7cb8a82d68145fd5f5da4103f5a66f422dbea23d9fc9f40f59b1dcf5403a9"); - }); - it("digest64HashObject", function () { - const input1 = sha256.byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf-8"), 0); - const input2 = sha256.byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf-8"), 0); + const input1 = byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf-8"), 0); + const input2 = byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf-8"), 0); const outputObj = sha256.digest64HashObjects(input1, input2); const output = new Uint8Array(32); - sha256.hashObjectToByteArray(outputObj, output, 0); + hashObjectToByteArray(outputObj, output, 0); expect(Buffer.from(output).toString("hex")).to.be.equal( "be39380ff1d0261e6f37dafe4278b662ef611f1cb2f7c0a18348b2d7eb14cf6e" ); }); - it("digest64HashObject and digest64 output matches", function () { - const input1 = "gajindergajindergajindergajinder"; - const input2 = "gajindergajindergajindergajinder"; - const output = sha256.digest64(Buffer.from(input1 + input2, "utf8")); + it("digest64HashObject and digest2Bytes32 output matches", function () { + const input1 = Buffer.from("gajindergajindergajindergajinder", "utf8"); + const input2 = Buffer.from("gajindergajindergajindergajinder", "utf8"); + const output = sha256.digest2Bytes32(input1, input2); - const inputObj1 = sha256.byteArrayToHashObject(Buffer.from(input1, "utf8"), 0); - const inputObj2 = sha256.byteArrayToHashObject(Buffer.from(input2, "utf8"), 0); + const inputObj1 = byteArrayToHashObject(input1, 0); + const inputObj2 = byteArrayToHashObject(input2, 0); const outputObj = sha256.digest64HashObjects(inputObj1, inputObj2); const outputByteArray = new Uint8Array(32); - sha256.hashObjectToByteArray(outputObj, outputByteArray, 0); + hashObjectToByteArray(outputObj, outputByteArray, 0); expect(Buffer.from(output).toString("hex")).to.be.equal(Buffer.from(outputByteArray).toString("hex")); }); - it("digest2Bytes32 matches digest64", function () { - const input1 = Buffer.alloc(32, "*"); - const input2 = Buffer.alloc(32, "*"); - const digestBytes32 = sha256.digest2Bytes32(input1, input2); - expect(digestBytes32).to.be.deep.equal( - sha256.digest64(Buffer.of(...input1, ...input2)), - "incorrect digest2Bytes32 result" - ); - }); + /** + * TODO: by @matthewkeil + * + * tests for @deprecated methods + * + * to be removed when methods are removed + */ + + // describe("digest()", function () { + // const digestTestCases = [ + // { + // input: "", + // expected: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + // }, + // { + // input: "abc", + // expected: "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", + // }, + // { + // input: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + // expected: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1", + // }, + // { + // input: + // "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", + // expected: "cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1", + // }, + // ]; + + // for (const {input, expected} of digestTestCases) { + // const name = input === "" ? "empty string" : input; + // it(`digest: ${name}`, function () { + // const output = sha256.digest(Buffer.from(input, "utf-8")); + // expect(Buffer.from(output).toString("hex")).to.be.equal(expected); + // }); + // } + // }); + + // it("digest and digest64 output matches", function () { + // const input = Buffer.from("harkamalharkamalharkamalharkamalharkamalharkamalharkamalharkamal", "utf8"); + // const output = Buffer.from(sha256.digest(input)).toString("hex"); + // const output64 = Buffer.from(sha256.digest64(input)).toString("hex"); + // expect(output).to.be.equal(output64); + // }); + + // it("1024 digest test", function () { + // const inputStr = "12345678".repeat(128); + // const input = Buffer.from(inputStr, "utf8"); + // expect(input.length).to.be.equal(1024); + + // const output = Buffer.from(sha256.digest(input)).toString("hex"); + // expect(output).to.be.equal("54c7cb8a82d68145fd5f5da4103f5a66f422dbea23d9fc9f40f59b1dcf5403a9"); + // }); + + // it("digest2Bytes32 matches digest64", function () { + // const input1 = Buffer.alloc(32, "*"); + // const input2 = Buffer.alloc(32, "*"); + // const digestBytes32 = sha256.digest2Bytes32(input1, input2); + // expect(digestBytes32).to.be.deep.equal( + // sha256.digest64(Buffer.of(...input1, ...input2)), + // "incorrect digest2Bytes32 result" + // ); + // }); }); describe("sha256.hashObjectToByteArray and sha256.byteArrayToHashObject", function () { @@ -118,9 +129,9 @@ describe("sha256.hashObjectToByteArray and sha256.byteArrayToHashObject", functi ]; for (const [i, byteArr] of tcs.entries()) { it("test case " + i, function () { - const obj = sha256.byteArrayToHashObject(byteArr, 0); + const obj = byteArrayToHashObject(byteArr, 0); const newByteArr = new Uint8Array(32); - sha256.hashObjectToByteArray(obj, newByteArr, 0); + hashObjectToByteArray(obj, newByteArr, 0); expect(newByteArr).to.be.deep.equal(byteArr, "failed test case" + i); }); } diff --git a/packages/as-sha256/test/unit/noSimd.test.ts b/packages/as-sha256/test/unit/noSimd.test.ts index 1d524567c..04aaa75cb 100644 --- a/packages/as-sha256/test/unit/noSimd.test.ts +++ b/packages/as-sha256/test/unit/noSimd.test.ts @@ -1,5 +1,6 @@ -import * as sha256 from "../../src/index.js"; +import {AssemblyScriptSha256Hasher} from "../../src/index.js"; import {getSimdTests} from "./getSimdTests.js"; const useSimd = false; +const sha256 = await AssemblyScriptSha256Hasher.initialize(useSimd); getSimdTests(sha256, useSimd); diff --git a/packages/as-sha256/test/unit/simd.test.ts b/packages/as-sha256/test/unit/simd.test.ts index cc5eb7116..6e4d2600e 100644 --- a/packages/as-sha256/test/unit/simd.test.ts +++ b/packages/as-sha256/test/unit/simd.test.ts @@ -1,5 +1,6 @@ -import * as sha256 from "../../src/index.js"; +import {AssemblyScriptSha256Hasher} from "../../src/index.js"; import {getSimdTests} from "./getSimdTests.js"; const useSimd = true; +const sha256 = await AssemblyScriptSha256Hasher.initialize(useSimd); getSimdTests(sha256, useSimd); From 4de647da9e863acaa155d3516c563c483b14ac90 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Fri, 3 Jan 2025 00:52:25 +0700 Subject: [PATCH 22/47] fix: bind class in map to fix unit tests --- packages/as-sha256/src/index.ts | 156 +++++++------ packages/as-sha256/test/unit/getSimdTests.ts | 52 ++--- packages/as-sha256/test/unit/index.test.ts | 219 ++++++++++--------- 3 files changed, 212 insertions(+), 215 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 031cc0d47..f6e367ede 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -33,6 +33,37 @@ export class AssemblyScriptSha256Hasher { return Boolean(this.ctx.HAS_SIMD.valueOf()); } + /** + * Sha256 for data of any length + */ + digest(data: Uint8Array): Uint8Array { + if (data.length === 64) { + return this.digest64(data); + } + + if (data.length <= this.ctx.INPUT_LENGTH) { + this.inputUint8Array.set(data); + this.ctx.digest(data.length); + return this.allocDigest(); + } + + this.ctx.init(); + this.update(data); + return this.final(); + } + + /** + * Sha256 for 64byte ArrayBuffer + */ + digest64(data: Uint8Array): Uint8Array { + if (data.length === 64) { + this.inputUint8Array.set(data); + this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); + return this.allocDigest(); + } + throw new Error("InvalidLengthForDigest64"); + } + digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Array { if (bytes1.length !== 32 || bytes2.length !== 32) { throw new Error("InvalidLengthForDigest64"); @@ -222,6 +253,47 @@ export class AssemblyScriptSha256Hasher { return [output0, output1, output2, output3]; } + /** + * Hash 4 Uint8Array objects in parallel, each 64 length as below + * + * Inputs: i0 i1 i2 i3 i4 i5 i6 i7 + * \ / \ / \ / \ / + * Outputs: o0 o1 o2 o3 + */ + batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { + if (inputs.length !== 4) { + throw new Error("Input length must be 4"); + } + for (let i = 0; i < 4; i++) { + const input = inputs[i]; + if (input == null) { + throw new Error(`Input ${i} is null or undefined`); + } + if (input.length !== 64) { + throw new Error(`Invalid length ${input.length} at input ${i}`); + } + } + + if (!this.hasSimd) { + return inputs.map(this.digest64.bind(this)); + } + + // set up input buffer for v128 + this.inputUint8Array.set(inputs[1], 64); + this.inputUint8Array.set(inputs[0], 0); + this.inputUint8Array.set(inputs[2], 128); + this.inputUint8Array.set(inputs[3], 192); + + (this.ctx as WasmSimdContext).batchHash4UintArray64s(this.wasmOutputValue); + + const output0 = this.allocDigest(); + const output1 = this.allocDigestOffset(32); + const output2 = this.allocDigestOffset(64); + const output3 = this.allocDigestOffset(96); + + return [output0, output1, output2, output3]; + } + /** * Hash an input into preallocated input using batch if possible. */ @@ -296,90 +368,12 @@ export class AssemblyScriptSha256Hasher { return out; } - /** allocate memory and copy result at offset */ + /** + * allocate memory and copy result at offset + */ private allocDigestOffset(offset: number): Uint8Array { const out = allocUnsafe(32); out.set(this.outputUint8Array.subarray(offset, offset + 32)); return out; } - - /** - * @deprecated methods that are not used by persistent-merkle-tree. - * - * To be removed in a future release - */ - - /** - * @deprecated - */ - private digest(data: Uint8Array): Uint8Array { - if (data.length === 64) { - return this.digest64(data); - } - - if (data.length <= this.ctx.INPUT_LENGTH) { - this.inputUint8Array.set(data); - this.ctx.digest(data.length); - return this.allocDigest(); - } - - this.ctx.init(); - this.update(data); - return this.final(); - } - - /** - * @deprecated - */ - private digest64(data: Uint8Array): Uint8Array { - if (data.length === 64) { - this.inputUint8Array.set(data); - this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); - return this.allocDigest(); - } - throw new Error("InvalidLengthForDigest64"); - } - - /** - * @deprecated - * - * Hash 4 Uint8Array objects in parallel, each 64 length as below - * - * Inputs: i0 i1 i2 i3 i4 i5 i6 i7 - * \ / \ / \ / \ / - * Outputs: o0 o1 o2 o3 - */ - private batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { - if (inputs.length !== 4) { - throw new Error("Input length must be 4"); - } - for (let i = 0; i < 4; i++) { - const input = inputs[i]; - if (input == null) { - throw new Error(`Input ${i} is null or undefined`); - } - if (input.length !== 64) { - throw new Error(`Invalid length ${input.length} at input ${i}`); - } - } - - if (!this.hasSimd) { - return inputs.map(this.digest64); - } - - // set up input buffer for v128 - this.inputUint8Array.set(inputs[1], 64); - this.inputUint8Array.set(inputs[0], 0); - this.inputUint8Array.set(inputs[2], 128); - this.inputUint8Array.set(inputs[3], 192); - - (this.ctx as WasmSimdContext).batchHash4UintArray64s(this.wasmOutputValue); - - const output0 = this.allocDigest(); - const output1 = this.allocDigestOffset(32); - const output2 = this.allocDigestOffset(64); - const output3 = this.allocDigestOffset(96); - - return [output0, output1, output2, output3]; - } } diff --git a/packages/as-sha256/test/unit/getSimdTests.ts b/packages/as-sha256/test/unit/getSimdTests.ts index fa365b025..736370869 100644 --- a/packages/as-sha256/test/unit/getSimdTests.ts +++ b/packages/as-sha256/test/unit/getSimdTests.ts @@ -8,38 +8,38 @@ import {byteArrayToHashObject, hashObjectToByteArray} from "../../src/hashObject // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getSimdTests(sha256: any, useSimd: boolean): void { - describe(`Test as-sha256 ${useSimd ? "with SIMD" : "without SIMD"}`, () => { + describe(`as-sha256 SIMD enabled methods ${useSimd ? "with SIMD" : "without SIMD"}`, () => { before(function () { sha256.reinitializeInstance(useSimd); expect(sha256.simdEnabled()).to.equal(useSimd); }); - // it("testHash4UintArray64s", () => { - // const input1 = "gajindergajindergajindergajinder"; - // const input2 = "gajindergajindergajindergajinder"; - // const input = Buffer.from(input1 + input2, "utf8"); - // const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); - // const expectedOutput = new Uint8Array([ - // 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, - // 131, 72, 178, 215, 235, 20, 207, 110, - // ]); - // for (let i = 0; i < 4; i++) { - // expect(outputs[i]).to.be.deep.equal(expectedOutput, "incorrect batchHash4UintArray64s result " + i); - // } - // }); + it("testHash4UintArray64s()", () => { + const input1 = "gajindergajindergajindergajinder"; + const input2 = "gajindergajindergajindergajinder"; + const input = Buffer.from(input1 + input2, "utf8"); + const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); + const expectedOutput = new Uint8Array([ + 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, + 131, 72, 178, 215, 235, 20, 207, 110, + ]); + for (let i = 0; i < 4; i++) { + expect(outputs[i]).to.be.deep.equal(expectedOutput, "incorrect batchHash4UintArray64s result " + i); + } + }); - // it("testHash4UintArray64s 1000 times", () => { - // for (let i = 0; i < 1000; i++) { - // const input = crypto.randomBytes(64); - // const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); - // const expectedOutput = sha256.digest64(input); - // expect(outputs[0]).to.be.deep.equal(expectedOutput); - // expect(outputs[1]).to.be.deep.equal(expectedOutput); - // expect(outputs[2]).to.be.deep.equal(expectedOutput); - // expect(outputs[3]).to.be.deep.equal(expectedOutput); - // } - // }); + it("testHash4UintArray64s() 1000 times", () => { + for (let i = 0; i < 1000; i++) { + const input = crypto.randomBytes(64); + const outputs = sha256.batchHash4UintArray64s([input, input, input, input]); + const expectedOutput = sha256.digest64(input); + expect(outputs[0]).to.be.deep.equal(expectedOutput); + expect(outputs[1]).to.be.deep.equal(expectedOutput); + expect(outputs[2]).to.be.deep.equal(expectedOutput); + expect(outputs[3]).to.be.deep.equal(expectedOutput); + } + }); - it("testHash4HashObjectInputs", () => { + it("testHash4HashObjectInputs()", () => { const input1 = "gajindergajindergajindergajinder"; const inputHashObject = byteArrayToHashObject(Buffer.from(input1, "utf8"), 0); const outputs = sha256.batchHash4HashObjectInputs(Array.from({length: 8}, () => inputHashObject)); diff --git a/packages/as-sha256/test/unit/index.test.ts b/packages/as-sha256/test/unit/index.test.ts index 73776f998..4e16982fe 100644 --- a/packages/as-sha256/test/unit/index.test.ts +++ b/packages/as-sha256/test/unit/index.test.ts @@ -1,42 +1,131 @@ import {describe, it, expect} from "vitest"; +import {createHash, randomBytes} from "crypto"; import {Buffer} from "buffer"; import {expect} from "chai"; import {AssemblyScriptSha256Hasher, byteArrayToHashObject, hashObjectToByteArray} from "../../src/index.js"; -describe("as-sha256", function () { +describe("hashObjectToByteArray and byteArrayToHashObject", function () { + const tcs = [ + new Uint8Array([ + 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, 131, + 72, 178, 215, 235, 20, 207, 110, + ]), + new Uint8Array([ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, + ]), + new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), + ]; + for (const [i, byteArr] of tcs.entries()) { + it("test case " + i, function () { + const obj = byteArrayToHashObject(byteArr, 0); + const newByteArr = new Uint8Array(32); + hashObjectToByteArray(obj, newByteArr, 0); + expect(newByteArr).to.be.deep.equal(byteArr, "failed test case" + i); + }); + } +}); + +describe("as-sha256 non-SIMD enabled methods", function () { let sha256: AssemblyScriptSha256Hasher; before(async function () { sha256 = await AssemblyScriptSha256Hasher.initialize(); }); - describe("digest2Bytes32()", function () { - it("gajindergajindergajindergajindergajindergajindergajindergajinder", function () { - const input1 = Buffer.from("gajindergajindergajindergajinder", "utf8"); - const input2 = Buffer.from("gajindergajindergajindergajinder", "utf8"); - // const input = Buffer.from(input1 + input2, "utf8"); - const output = sha256.digest2Bytes32(input1, input2); - const expectedOutput = new Uint8Array([ - 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, - 131, 72, 178, 215, 235, 20, 207, 110, - ]); - expect(output).to.be.deep.equal(expectedOutput, "incorrect digest64 result"); - }); + describe("digest()", function () { + const digestTestCases = [ + { + input: "", + expectedInputLength: 0, + expected: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + }, + { + input: "12345678".repeat(128), + expectedInputLength: 1024, + expected: "54c7cb8a82d68145fd5f5da4103f5a66f422dbea23d9fc9f40f59b1dcf5403a9", + }, + { + input: "abc", + expected: "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", + }, + { + input: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + expected: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1", + }, + { + input: + "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", + expected: "cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1", + }, + ]; + + for (const {input, expectedInputLength, expected} of digestTestCases) { + const name = input === "" ? "empty string" : input; + const trimmed = name.length > 97 ? `${name.substring(0, 100)}...` : name; + it(trimmed, function () { + const inputBuffer = Buffer.from(input, "utf8"); + if (expectedInputLength) { + expect(inputBuffer.length).to.be.equal(expectedInputLength, "Invalid input buffer length"); + } + const output = sha256.digest(inputBuffer); + expect(Buffer.from(output).toString("hex")).to.be.equal(expected, "Invalid digest"); + }); + } }); - it("digest64HashObject", function () { - const input1 = byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf-8"), 0); - const input2 = byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf-8"), 0); + it("digest64()", function () { + const input = Buffer.alloc(64, "lodestar"); + const output = Buffer.from(sha256.digest64(input)).toString("hex"); + const expected = createHash("sha256").update(input).digest("hex"); + expect(output).to.equal(expected); + }); - const outputObj = sha256.digest64HashObjects(input1, input2); - const output = new Uint8Array(32); - hashObjectToByteArray(outputObj, output, 0); + it("digest() and digest64() output matches", function () { + const input = Buffer.from("harkamalharkamalharkamalharkamalharkamalharkamalharkamalharkamal", "utf8"); + const output = Buffer.from(sha256.digest(input)).toString("hex"); + const output64 = Buffer.from(sha256.digest64(input)).toString("hex"); + expect(output).to.be.equal(output64); + }); + + it("digest2Bytes32()", function () { + const input1 = randomBytes(32); + const input2 = randomBytes(32); + const output = Buffer.from(sha256.digest2Bytes32(input1, input2)).toString("hex"); + const expectedOutput = createHash("sha256") + .update(Buffer.of(...input1, ...input2)) + .digest("hex"); + expect(output).to.equal(expectedOutput); + }); - expect(Buffer.from(output).toString("hex")).to.be.equal( - "be39380ff1d0261e6f37dafe4278b662ef611f1cb2f7c0a18348b2d7eb14cf6e" + it("digest2Bytes32() matches digest64()", function () { + const input1 = Buffer.alloc(32, "*"); + const input2 = Buffer.alloc(32, "*"); + const digestBytes32 = sha256.digest2Bytes32(input1, input2); + expect(digestBytes32).to.be.deep.equal( + sha256.digest64(Buffer.of(...input1, ...input2)), + "incorrect digest2Bytes32 result" ); }); - it("digest64HashObject and digest2Bytes32 output matches", function () { + it("digest64HashObject()", function () { + const input1 = randomBytes(32); + const obj1 = byteArrayToHashObject(input1, 0); + const input2 = randomBytes(32); + const obj2 = byteArrayToHashObject(input2, 0); + + const outputObj = sha256.digest64HashObjects(obj1, obj2); + const outputArray = new Uint8Array(32); + hashObjectToByteArray(outputObj, outputArray, 0); + const output = Buffer.from(outputArray).toString("hex"); + + const expectedOutput = createHash("sha256") + .update(Buffer.of(...input1, ...input2)) + .digest("hex"); + + expect(output).to.equal(expectedOutput); + }); + + it("digest64HashObject() and digest2Bytes32() output matches", function () { const input1 = Buffer.from("gajindergajindergajindergajinder", "utf8"); const input2 = Buffer.from("gajindergajindergajindergajinder", "utf8"); const output = sha256.digest2Bytes32(input1, input2); @@ -49,90 +138,4 @@ describe("as-sha256", function () { expect(Buffer.from(output).toString("hex")).to.be.equal(Buffer.from(outputByteArray).toString("hex")); }); - - /** - * TODO: by @matthewkeil - * - * tests for @deprecated methods - * - * to be removed when methods are removed - */ - - // describe("digest()", function () { - // const digestTestCases = [ - // { - // input: "", - // expected: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - // }, - // { - // input: "abc", - // expected: "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", - // }, - // { - // input: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - // expected: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1", - // }, - // { - // input: - // "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", - // expected: "cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1", - // }, - // ]; - - // for (const {input, expected} of digestTestCases) { - // const name = input === "" ? "empty string" : input; - // it(`digest: ${name}`, function () { - // const output = sha256.digest(Buffer.from(input, "utf-8")); - // expect(Buffer.from(output).toString("hex")).to.be.equal(expected); - // }); - // } - // }); - - // it("digest and digest64 output matches", function () { - // const input = Buffer.from("harkamalharkamalharkamalharkamalharkamalharkamalharkamalharkamal", "utf8"); - // const output = Buffer.from(sha256.digest(input)).toString("hex"); - // const output64 = Buffer.from(sha256.digest64(input)).toString("hex"); - // expect(output).to.be.equal(output64); - // }); - - // it("1024 digest test", function () { - // const inputStr = "12345678".repeat(128); - // const input = Buffer.from(inputStr, "utf8"); - // expect(input.length).to.be.equal(1024); - - // const output = Buffer.from(sha256.digest(input)).toString("hex"); - // expect(output).to.be.equal("54c7cb8a82d68145fd5f5da4103f5a66f422dbea23d9fc9f40f59b1dcf5403a9"); - // }); - - // it("digest2Bytes32 matches digest64", function () { - // const input1 = Buffer.alloc(32, "*"); - // const input2 = Buffer.alloc(32, "*"); - // const digestBytes32 = sha256.digest2Bytes32(input1, input2); - // expect(digestBytes32).to.be.deep.equal( - // sha256.digest64(Buffer.of(...input1, ...input2)), - // "incorrect digest2Bytes32 result" - // ); - // }); -}); - -describe("sha256.hashObjectToByteArray and sha256.byteArrayToHashObject", function () { - const tcs = [ - new Uint8Array([ - 190, 57, 56, 15, 241, 208, 38, 30, 111, 55, 218, 254, 66, 120, 182, 98, 239, 97, 31, 28, 178, 247, 192, 161, 131, - 72, 178, 215, 235, 20, 207, 110, - ]), - new Uint8Array([ - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, - ]), - new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), - ]; - for (const [i, byteArr] of tcs.entries()) { - it("test case " + i, function () { - const obj = byteArrayToHashObject(byteArr, 0); - const newByteArr = new Uint8Array(32); - hashObjectToByteArray(obj, newByteArr, 0); - expect(newByteArr).to.be.deep.equal(byteArr, "failed test case" + i); - }); - } }); From b532dd3b4282efc74f05e5019688d99c836d8eaf Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 00:41:54 +0700 Subject: [PATCH 23/47] fix: noble hasher executeHashComputations --- packages/persistent-merkle-tree/src/hasher/noble.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/persistent-merkle-tree/src/hasher/noble.ts b/packages/persistent-merkle-tree/src/hasher/noble.ts index 28f989768..9d7a643e8 100644 --- a/packages/persistent-merkle-tree/src/hasher/noble.ts +++ b/packages/persistent-merkle-tree/src/hasher/noble.ts @@ -55,7 +55,7 @@ export const hasher: Hasher = { } for (const hc of hcArr) { - hc.dest.applyHash(hasher.digest64HashObjects(hc.src0, hc.src1)); + hasher.digest64HashObjects(hc.src0, hc.src1, hc.dest); } } }, From e717db3df6b81c978817ff9ab9cd4d92489461a5 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 00:43:04 +0700 Subject: [PATCH 24/47] feat: update as-sha256 hasher to use async init --- .../src/hasher/as-sha256.ts | 54 +++++++++++++------ .../src/hasher/index.ts | 5 +- .../src/hasher/types.ts | 2 + setHasher.mjs | 2 +- 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/packages/persistent-merkle-tree/src/hasher/as-sha256.ts b/packages/persistent-merkle-tree/src/hasher/as-sha256.ts index 2eb26d1b1..8a6a857bb 100644 --- a/packages/persistent-merkle-tree/src/hasher/as-sha256.ts +++ b/packages/persistent-merkle-tree/src/hasher/as-sha256.ts @@ -1,15 +1,10 @@ -import { - digest2Bytes32, - digest64HashObjectsInto, - digest64HashObjects, - batchHash4HashObjectInputs, - hashInto, -} from "@chainsafe/as-sha256"; +import {HashObject, AssemblyScriptSha256Hasher} from "@chainsafe/as-sha256"; import type {Hasher} from "./types.js"; import {Node} from "../node.js"; import type {HashComputationLevel} from "../hashComputation.js"; import {BLOCK_SIZE, doDigestNLevel, doMerkleizeBlockArray, doMerkleizeBlocksBytes} from "./util.js"; +let sha256: undefined | AssemblyScriptSha256Hasher; /** * hashInto() function of as-sha256 loop through every 256 bytes * This is the same to hashInto() function of as-sha256 https://github.com/ChainSafe/ssz/blob/cf3e1f038c8bf7cba1bb27c38540e50b0391d0e6/packages/as-sha256/src/index.ts#L270 @@ -18,18 +13,43 @@ const buffer = new Uint8Array(4 * BLOCK_SIZE); export const hasher: Hasher = { name: "as-sha256", - digest64: digest2Bytes32, - digest64HashObjects: digest64HashObjectsInto, + async initialize() { + sha256 = await AssemblyScriptSha256Hasher.initialize(); + }, + digest64(a32Bytes: Uint8Array, b32Bytes: Uint8Array): Uint8Array { + if (!sha256) { + throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); + } + return sha256.digest2Bytes32(a32Bytes, b32Bytes); + }, + digest64HashObjects(left: HashObject, right: HashObject, parent: HashObject): void { + if (!sha256) { + throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); + } + return sha256.digest64HashObjectsInto(left, right, parent); + }, merkleizeBlocksBytes(blocksBytes: Uint8Array, padFor: number, output: Uint8Array, offset: number): void { - return doMerkleizeBlocksBytes(blocksBytes, padFor, output, offset, hashInto); + if (!sha256) { + throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); + } + return doMerkleizeBlocksBytes(blocksBytes, padFor, output, offset, sha256.hashInto.bind(sha256)); }, merkleizeBlockArray(blocks, blockLimit, padFor, output, offset) { - return doMerkleizeBlockArray(blocks, blockLimit, padFor, output, offset, hashInto, buffer); + if (!sha256) { + throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); + } + return doMerkleizeBlockArray(blocks, blockLimit, padFor, output, offset, sha256.hashInto.bind(sha256), buffer); }, digestNLevel(data: Uint8Array, nLevel: number): Uint8Array { - return doDigestNLevel(data, nLevel, hashInto); + if (!sha256) { + throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); + } + return doDigestNLevel(data, nLevel, sha256.hashInto.bind(sha256)); }, executeHashComputations: (hashComputations: HashComputationLevel[]) => { + if (!sha256) { + throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); + } for (let level = hashComputations.length - 1; level >= 0; level--) { const hcArr = hashComputations[level]; if (!hcArr) { @@ -96,7 +116,7 @@ export const hasher: Hasher = { dest3 !== null ) { // TODO - batch: find a way not allocate here - const [o0, o1, o2, o3] = batchHash4HashObjectInputs([ + const [o0, o1, o2, o3] = sha256.batchHash4HashObjectInputs([ src0_0, src1_0, src0_1, @@ -137,16 +157,16 @@ export const hasher: Hasher = { // remaining if (src0_0 !== null && src1_0 !== null && dest0 !== null) { - dest0.applyHash(digest64HashObjects(src0_0, src1_0)); + dest0.applyHash(sha256.digest64HashObjects(src0_0, src1_0)); } if (src0_1 !== null && src1_1 !== null && dest1 !== null) { - dest1.applyHash(digest64HashObjects(src0_1, src1_1)); + dest1.applyHash(sha256.digest64HashObjects(src0_1, src1_1)); } if (src0_2 !== null && src1_2 !== null && dest2 !== null) { - dest2.applyHash(digest64HashObjects(src0_2, src1_2)); + dest2.applyHash(sha256.digest64HashObjects(src0_2, src1_2)); } if (src0_3 !== null && src1_3 !== null && dest3 !== null) { - dest3.applyHash(digest64HashObjects(src0_3, src1_3)); + dest3.applyHash(sha256.digest64HashObjects(src0_3, src1_3)); } } }, diff --git a/packages/persistent-merkle-tree/src/hasher/index.ts b/packages/persistent-merkle-tree/src/hasher/index.ts index 0aaadb9d4..b69d7f8a2 100644 --- a/packages/persistent-merkle-tree/src/hasher/index.ts +++ b/packages/persistent-merkle-tree/src/hasher/index.ts @@ -15,7 +15,10 @@ export let hasher: Hasher = nobleHasher; * * WARNING: This function is intended for power users and must be executed before any other SSZ code is imported */ -export function setHasher(newHasher: Hasher): void { +export async function setHasher(newHasher: Hasher): Promise { + if (typeof newHasher.initialize === "function") { + await newHasher.initialize(); + } hasher = newHasher; } diff --git a/packages/persistent-merkle-tree/src/hasher/types.ts b/packages/persistent-merkle-tree/src/hasher/types.ts index 37327fa48..e0a3d2d4c 100644 --- a/packages/persistent-merkle-tree/src/hasher/types.ts +++ b/packages/persistent-merkle-tree/src/hasher/types.ts @@ -6,6 +6,8 @@ export type {HashObject}; export type Hasher = { // name of the hashing library name: string; + // as-sha256 has an async initialization. must run this to detect correct bindings + initialize?: () => Promise; /** * Hash two 32-byte Uint8Arrays */ diff --git a/setHasher.mjs b/setHasher.mjs index 24b27a27d..c146a3e9e 100644 --- a/setHasher.mjs +++ b/setHasher.mjs @@ -2,6 +2,6 @@ // Used to run benchmarks with with visibility into hashtree performance, useful for Lodestar import {setHasher} from "@chainsafe/persistent-merkle-tree/lib/hasher/index.js"; import {hasher} from "@chainsafe/persistent-merkle-tree/lib/hasher/hashtree.js"; -setHasher(hasher); +await setHasher(hasher); export {}; From 4ca9e6a40d5b752f481ec087017b75752724e6a6 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 01:09:27 +0700 Subject: [PATCH 25/47] fix: tests to allow for async initialization of hasher --- packages/as-sha256/test/perf/index.test.ts | 53 +++-- packages/as-sha256/test/perf/simd.test.ts | 18 +- .../test/perf/hashComputation.test.ts | 8 +- .../test/perf/hasher.test.ts | 4 +- .../test/unit/hasher.test.ts | 206 ++++++++++-------- 5 files changed, 157 insertions(+), 132 deletions(-) diff --git a/packages/as-sha256/test/perf/index.test.ts b/packages/as-sha256/test/perf/index.test.ts index b7c522d73..f916bdc82 100644 --- a/packages/as-sha256/test/perf/index.test.ts +++ b/packages/as-sha256/test/perf/index.test.ts @@ -16,6 +16,7 @@ describe("digestTwoHashObjects vs digest64 vs digest", () => { sha256 = await AssemblyScriptSha256Hasher.initialize(); }); + const input = Buffer.from("gajindergajindergajindergajindergajindergajindergajindergajinder", "utf8"); const input1 = "gajindergajindergajindergajinder"; const input2 = "gajindergajindergajindergajinder"; const buffer1 = Buffer.from(input1, "utf-8"); @@ -32,22 +33,27 @@ describe("digestTwoHashObjects vs digest64 vs digest", () => { for (let j = 0; j < iterations; j++) sha256.digest2Bytes32(buffer1, buffer2); }); - // itBench(`digest ${iterations} times`, () => { - // for (let j = 0; j < iterations; j++) sha256.digest(input); - // }); + itBench(`digest ${iterations} times`, () => { + for (let j = 0; j < iterations; j++) sha256.digest(input); + }); }); -// describe("digest different Buffers", () => { -// const randomBuffer = (length: number): Uint8Array => -// Buffer.from(Array.from({length}, () => Math.round(Math.random() * 255))); +describe("digest different Buffers", () => { + let sha256: AssemblyScriptSha256Hasher; + before(async function () { + sha256 = await AssemblyScriptSha256Hasher.initialize(); + }); + + const randomBuffer = (length: number): Uint8Array => + Buffer.from(Array.from({length}, () => Math.round(Math.random() * 255))); -// for (const length of [32, 64, 128, 256, 512, 1024]) { -// const buffer = randomBuffer(length); -// itBench(`input length ${length}`, () => { -// sha256.digest(buffer); -// }); -// } -// }); + for (const length of [32, 64, 128, 256, 512, 1024]) { + const buffer = randomBuffer(length); + itBench(`input length ${length}`, () => { + sha256.digest(buffer); + }); + } +}); /** * time java: 2968 336927.2237196765 hashes/sec @@ -57,16 +63,21 @@ describe("digestTwoHashObjects vs digest64 vs digest", () => { * digest 1000000 times 0.8279731 ops/s 1.207769 s/op - 82 runs 100 s * => we are at 8279731 hashes/sec */ -// describe("hash - compare to java", () => { -// // java statistic for same test: https://gist.github.com/scoroberts/a60d61a2cc3afba1e8813b338ecd1501 +describe("hash - compare to java", () => { + // java statistic for same test: https://gist.github.com/scoroberts/a60d61a2cc3afba1e8813b338ecd1501 -// const iterations = 1000000; -// const input = Buffer.from("lwkjt23uy45pojsdf;lnwo45y23po5i;lknwe;lknasdflnqw3uo5", "utf8"); + let sha256: AssemblyScriptSha256Hasher; + before(async function () { + sha256 = await AssemblyScriptSha256Hasher.initialize(); + }); -// itBench(`digest ${iterations} times`, () => { -// for (let i = 0; i < iterations; i++) sha256.digest(input); -// }); -// }); + const iterations = 1000000; + const input = Buffer.from("lwkjt23uy45pojsdf;lnwo45y23po5i;lknwe;lknasdflnqw3uo5", "utf8"); + + itBench(`digest ${iterations} times`, () => { + for (let i = 0; i < iterations; i++) sha256.digest(input); + }); +}); // Aug 10 2021 // utils diff --git a/packages/as-sha256/test/perf/simd.test.ts b/packages/as-sha256/test/perf/simd.test.ts index 3c0e6b875..b462be03a 100644 --- a/packages/as-sha256/test/perf/simd.test.ts +++ b/packages/as-sha256/test/perf/simd.test.ts @@ -23,19 +23,19 @@ describe("digest64 vs batchHash4UintArray64s vs digest64HashObjects vs batchHash sha256 = await AssemblyScriptSha256Hasher.initialize(); }); - // const input = Buffer.from("gajindergajindergajindergajindergajindergajindergajindergajinder", "utf8"); + const input = Buffer.from("gajindergajindergajindergajindergajindergajindergajindergajinder", "utf8"); // total number of time running hash for 200000 balances const iterations = 50023; - // itBench(`digest64 ${iterations * 4} times`, () => { - // for (let j = 0; j < iterations * 4; j++) sha256.digest64(input); - // }); + itBench(`digest64 ${iterations * 4} times`, () => { + for (let j = 0; j < iterations * 4; j++) sha256.digest64(input); + }); // // batchHash4UintArray64s do 4 sha256 in parallel - // itBench(`hash ${iterations * 4} times using batchHash4UintArray64s`, () => { - // for (let j = 0; j < iterations; j++) { - // sha256.batchHash4UintArray64s([input, input, input, input]); - // } - // }); + itBench(`hash ${iterations * 4} times using batchHash4UintArray64s`, () => { + for (let j = 0; j < iterations; j++) { + sha256.batchHash4UintArray64s([input, input, input, input]); + } + }); const hashObject = byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf8"), 0); itBench(`digest64HashObjects ${iterations * 4} times`, () => { diff --git a/packages/persistent-merkle-tree/test/perf/hashComputation.test.ts b/packages/persistent-merkle-tree/test/perf/hashComputation.test.ts index dee96bdc3..ecc4b9292 100644 --- a/packages/persistent-merkle-tree/test/perf/hashComputation.test.ts +++ b/packages/persistent-merkle-tree/test/perf/hashComputation.test.ts @@ -1,5 +1,5 @@ import {itBench} from "@dapplion/benchmark"; -import { HashComputation, HashComputationLevel, LeafNode, zeroHash } from "../../src/index.js"; +import {HashComputation, HashComputationLevel, LeafNode, zeroHash} from "../../src/index.js"; /** * HashComputationLevel push then loop is faster than HashComputation[] push then loop @@ -30,7 +30,7 @@ describe("HashComputationLevel", function () { for (const hc of level) { const {src0, src1, dest} = hc; } - } + }, }); itBench({ @@ -43,6 +43,6 @@ describe("HashComputationLevel", function () { for (const hc of level) { const {src0, src1, dest} = hc; } - } - }) + }, + }); }); diff --git a/packages/persistent-merkle-tree/test/perf/hasher.test.ts b/packages/persistent-merkle-tree/test/perf/hasher.test.ts index af41d7ef7..a6c95f6bc 100644 --- a/packages/persistent-merkle-tree/test/perf/hasher.test.ts +++ b/packages/persistent-merkle-tree/test/perf/hasher.test.ts @@ -93,9 +93,9 @@ describe("hashtree", function () { itBench({ id: `get root`, - beforeEach: () => { + beforeEach: async () => { const [tree] = buildComparisonTrees(16); - setHasher(hashtreeHasher); + await setHasher(hashtreeHasher); return tree; }, fn: (tree) => { diff --git a/packages/persistent-merkle-tree/test/unit/hasher.test.ts b/packages/persistent-merkle-tree/test/unit/hasher.test.ts index 9fa03282a..090eec56d 100644 --- a/packages/persistent-merkle-tree/test/unit/hasher.test.ts +++ b/packages/persistent-merkle-tree/test/unit/hasher.test.ts @@ -1,4 +1,4 @@ -import {describe, it, expect} from "vitest" +import {describe, it, expect} from "vitest"; import {expectEqualHex} from "../utils/expectHex.js"; import {uint8ArrayToHashObject, hashObjectToUint8Array} from "../../src/hasher/util.js"; @@ -6,12 +6,27 @@ import {hasher as nobleHasher} from "../../src/hasher/noble.js"; import {hasher as asSha256Hasher} from "../../src/hasher/as-sha256.js"; import {hasher as hashtreeHasher} from "../../src/hasher/hashtree.js"; import {buildComparisonTrees} from "../utils/tree.js"; -import {HashComputationLevel, HashObject, LeafNode, getHashComputations, subtreeFillToContents} from "../../src/index.js"; -import { zeroHash } from "../../src/zeroHash.js"; - -const hashers = [hashtreeHasher, asSha256Hasher, nobleHasher]; +import { + HashComputationLevel, + HashObject, + Hasher, + LeafNode, + getHashComputations, + subtreeFillToContents, +} from "../../src/index.js"; +import {zeroHash} from "../../src/zeroHash.js"; describe("hashers", function () { + const hashers: Hasher[] = [hashtreeHasher, asSha256Hasher, nobleHasher]; + + before(async function () { + for (const hasher of hashers) { + if (typeof hasher.initialize === "function") { + await hasher.initialize(); + } + } + }); + describe("digest64 vs digest64HashObjects methods should be the same", () => { for (const hasher of hashers) { it(`${hasher.name} hasher`, () => { @@ -68,107 +83,106 @@ describe("hashers", function () { }); } }); -}); -describe("hasher.digestNLevel", function () { - const hashers = [nobleHasher, hashtreeHasher, asSha256Hasher]; - for (const hasher of hashers) { - const numValidators = [1, 2, 3, 4]; - for (const numValidator of numValidators) { - it(`${hasher.name} digestNLevel ${numValidator} validators = ${8 * numValidator} chunk(s)`, () => { - const nodes = Array.from({length: 8 * numValidator}, (_, i) => - LeafNode.fromRoot(Buffer.alloc(32, i + numValidator)) - ); - const hashInput = Buffer.concat(nodes.map((node) => node.root)); - const hashOutput = hasher.digestNLevel(hashInput, 3).slice(); - for (let i = 0; i < numValidator; i++) { - const root = subtreeFillToContents(nodes.slice(i * 8, (i + 1) * 8), 3).root; - expectEqualHex(hashOutput.subarray(i * 32, (i + 1) * 32), root); - } - }); + describe("hasher.digestNLevel", function () { + for (const hasher of hashers) { + const numValidators = [1, 2, 3, 4]; + for (const numValidator of numValidators) { + it(`${hasher.name} digestNLevel ${numValidator} validators = ${8 * numValidator} chunk(s)`, () => { + const nodes = Array.from({length: 8 * numValidator}, (_, i) => + LeafNode.fromRoot(Buffer.alloc(32, i + numValidator)) + ); + const hashInput = Buffer.concat(nodes.map((node) => node.root)); + const hashOutput = hasher.digestNLevel(hashInput, 3).slice(); + for (let i = 0; i < numValidator; i++) { + const root = subtreeFillToContents(nodes.slice(i * 8, (i + 1) * 8), 3).root; + expectEqualHex(hashOutput.subarray(i * 32, (i + 1) * 32), root); + } + }); + } } - } -}); - -describe("hasher.merkleizeInto", function () { - const numNodes = [0, 1, 2, 3, 4, 5, 6, 7, 8]; - for (const hasher of [nobleHasher, hashtreeHasher, asSha256Hasher]) { - it(`${hasher.name} should throw error if not multiple of 64 bytes`, () => { - const data = Buffer.alloc(63, 0); - const output = Buffer.alloc(32); - expect(() => hasher.merkleizeBlocksBytes(data, 2, output, 0)).to.throw("Invalid input length"); - }); + }); - for (const numNode of numNodes) { - it(`${hasher.name}.merkleizeBlocksBytes for ${numNode} nodes`, () => { - const nodes = Array.from({length: numNode}, (_, i) => LeafNode.fromRoot(Buffer.alloc(32, i))); - const data = Buffer.concat(nodes.map((node) => node.root)); + describe("hasher.merkleizeBlocksBytes", function () { + const numNodes = [0, 1, 2, 3, 4, 5, 6, 7, 8]; + for (const hasher of hashers) { + it(`${hasher.name} should throw error if not multiple of 64 bytes`, () => { + const data = Buffer.alloc(63, 0); const output = Buffer.alloc(32); - const chunkCount = Math.max(numNode, 1); - const padData = numNode % 2 === 1 ? Buffer.concat([data, zeroHash(0)]) : data; - hasher.merkleizeBlocksBytes(padData, chunkCount, output, 0); - const depth = Math.ceil(Math.log2(chunkCount)); - const root = subtreeFillToContents(nodes, depth).root; - expectEqualHex(output, root); + expect(() => hasher.merkleizeBlocksBytes(data, 2, output, 0)).to.throw("Invalid input length"); }); - } - } -}); -/** - * The same to the previous test, but using the merkleizeBlockArray method - */ -describe("hasher.merkleizeBlockArray", function () { - for (const hasher of [nobleHasher, hashtreeHasher, asSha256Hasher]) { - it(`${hasher.name} should throw error if invalid blockLimit`, () => { - const data = Buffer.alloc(64, 0); - const output = Buffer.alloc(32); - expect(() => hasher.merkleizeBlockArray([data], 2, 2, output, 0)).to.throw( - "Invalid blockLimit, expect to be less than or equal blocks.length 1, got 2" - ); - }); + for (const numNode of numNodes) { + it(`${hasher.name}.merkleizeBlocksBytes for ${numNode} nodes`, () => { + const nodes = Array.from({length: numNode}, (_, i) => LeafNode.fromRoot(Buffer.alloc(32, i))); + const data = Buffer.concat(nodes.map((node) => node.root)); + const output = Buffer.alloc(32); + const chunkCount = Math.max(numNode, 1); + const padData = numNode % 2 === 1 ? Buffer.concat([data, zeroHash(0)]) : data; + hasher.merkleizeBlocksBytes(padData, chunkCount, output, 0); + const depth = Math.ceil(Math.log2(chunkCount)); + const root = subtreeFillToContents(nodes, depth).root; + expectEqualHex(output, root); + }); + } + } + }); - it(`${hasher.name} should throw error if not multiple of 64 bytes`, () => { - const data = Buffer.alloc(63, 0); - const output = Buffer.alloc(32); - expect(() => hasher.merkleizeBlockArray([data], 1, 2, output, 0)).to.throw( - "Invalid block length, expect to be 64 bytes, got 63" - ); - }); + /** + * The same to the previous test, but using the merkleizeBlockArray method + */ + describe("hasher.merkleizeBlockArray", function () { + for (const hasher of hashers) { + it(`${hasher.name} should throw error if invalid blockLimit`, () => { + const data = Buffer.alloc(64, 0); + const output = Buffer.alloc(32); + expect(() => hasher.merkleizeBlockArray([data], 2, 2, output, 0)).to.throw( + "Invalid blockLimit, expect to be less than or equal blocks.length 1, got 2" + ); + }); - it(`${hasher.name} should throw error if chunkCount < 1`, () => { - const data = Buffer.alloc(64, 0); - const output = Buffer.alloc(32); - const chunkCount = 0; - expect(() => hasher.merkleizeBlockArray([data], 1, chunkCount, output, 0)).to.throw( - "Invalid padFor, expect to be at least 1, got 0" - ); - }); + it(`${hasher.name} should throw error if not multiple of 64 bytes`, () => { + const data = Buffer.alloc(63, 0); + const output = Buffer.alloc(32); + expect(() => hasher.merkleizeBlockArray([data], 1, 2, output, 0)).to.throw( + "Invalid block length, expect to be 64 bytes, got 63" + ); + }); - // hashtree has a buffer of 16 * 64 bytes = 32 nodes - const numNodes = [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79]; - for (const numNode of numNodes) { - it(`${hasher.name}.merkleizeBlockArray for ${numNode} nodes`, () => { - const nodes = Array.from({length: numNode}, (_, i) => LeafNode.fromRoot(Buffer.alloc(32, i))); - const data = Buffer.concat(nodes.map((node) => node.root)); + it(`${hasher.name} should throw error if chunkCount < 1`, () => { + const data = Buffer.alloc(64, 0); const output = Buffer.alloc(32); - // depth of 79 nodes are 7, make it 10 to test the padding - const chunkCount = Math.max(numNode, 10); - const padData = numNode % 2 === 1 ? Buffer.concat([data, zeroHash(0)]) : data; - expect(padData.length % 64).to.equal(0); - const blocks: Uint8Array[] = []; - for (let i = 0; i < padData.length; i += 64) { - blocks.push(padData.slice(i, i + 64)); - } - const blockLimit = blocks.length; - // should be able to run with above blocks, however add some redundant blocks similar to the consumer - blocks.push(Buffer.alloc(64, 1)); - blocks.push(Buffer.alloc(64, 2)); - hasher.merkleizeBlockArray(blocks, blockLimit, chunkCount, output, 0); - const depth = Math.ceil(Math.log2(chunkCount)); - const root = subtreeFillToContents(nodes, depth).root; - expectEqualHex(output, root); + const chunkCount = 0; + expect(() => hasher.merkleizeBlockArray([data], 1, chunkCount, output, 0)).to.throw( + "Invalid padFor, expect to be at least 1, got 0" + ); }); + + // hashtree has a buffer of 16 * 64 bytes = 32 nodes + const numNodes = [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79]; + for (const numNode of numNodes) { + it(`${hasher.name}.merkleizeBlockArray for ${numNode} nodes`, () => { + const nodes = Array.from({length: numNode}, (_, i) => LeafNode.fromRoot(Buffer.alloc(32, i))); + const data = Buffer.concat(nodes.map((node) => node.root)); + const output = Buffer.alloc(32); + // depth of 79 nodes are 7, make it 10 to test the padding + const chunkCount = Math.max(numNode, 10); + const padData = numNode % 2 === 1 ? Buffer.concat([data, zeroHash(0)]) : data; + expect(padData.length % 64).to.equal(0); + const blocks: Uint8Array[] = []; + for (let i = 0; i < padData.length; i += 64) { + blocks.push(padData.slice(i, i + 64)); + } + const blockLimit = blocks.length; + // should be able to run with above blocks, however add some redundant blocks similar to the consumer + blocks.push(Buffer.alloc(64, 1)); + blocks.push(Buffer.alloc(64, 2)); + hasher.merkleizeBlockArray(blocks, blockLimit, chunkCount, output, 0); + const depth = Math.ceil(Math.log2(chunkCount)); + const root = subtreeFillToContents(nodes, depth).root; + expectEqualHex(output, root); + }); + } } - } + }); }); From 51b1bdd71a5eebad148ea04b8eaae149e820455a Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 01:19:58 +0700 Subject: [PATCH 26/47] fix: add back prettierrc to persistent-merkle-tree --- packages/persistent-merkle-tree/.prettierrc | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/persistent-merkle-tree/.prettierrc diff --git a/packages/persistent-merkle-tree/.prettierrc b/packages/persistent-merkle-tree/.prettierrc new file mode 100644 index 000000000..3d25a0ef3 --- /dev/null +++ b/packages/persistent-merkle-tree/.prettierrc @@ -0,0 +1,9 @@ +printWidth: 120 +tabWidth: 2 +useTabs: false +semi: true +singleQuote: false +quoteProps: "as-needed" +trailingComma: "es5" +bracketSpacing: false +arrowParens: "always" \ No newline at end of file From 5cede1744b15661a5fc2717ed47373efa7915e09 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 01:41:04 +0700 Subject: [PATCH 27/47] chore: lint changes --- packages/as-sha256/.prettierrc | 9 --------- packages/as-sha256/.prettierrc.js | 11 +++++++++++ packages/as-sha256/package.json | 2 +- packages/as-sha256/test/perf/simd.test.ts | 2 +- packages/as-sha256/tsconfig.build.json | 2 +- .../test/perf/hashComputation.test.ts | 8 ++++---- 6 files changed, 18 insertions(+), 16 deletions(-) delete mode 100644 packages/as-sha256/.prettierrc create mode 100644 packages/as-sha256/.prettierrc.js diff --git a/packages/as-sha256/.prettierrc b/packages/as-sha256/.prettierrc deleted file mode 100644 index 3d25a0ef3..000000000 --- a/packages/as-sha256/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -printWidth: 120 -tabWidth: 2 -useTabs: false -semi: true -singleQuote: false -quoteProps: "as-needed" -trailingComma: "es5" -bracketSpacing: false -arrowParens: "always" \ No newline at end of file diff --git a/packages/as-sha256/.prettierrc.js b/packages/as-sha256/.prettierrc.js new file mode 100644 index 000000000..ee8eee2a2 --- /dev/null +++ b/packages/as-sha256/.prettierrc.js @@ -0,0 +1,11 @@ +module.exports = { + printWidth: 120, + tabWidth: 2, + useTabs: false, + semi: true, + singleQuote: false, + quoteProps: "as-needed", + trailingComma: "es5", + bracketSpacing: false, + arrowParens: "always", +}; diff --git a/packages/as-sha256/package.json b/packages/as-sha256/package.json index 3eba9b750..b0a0e3d27 100644 --- a/packages/as-sha256/package.json +++ b/packages/as-sha256/package.json @@ -53,4 +53,4 @@ "assemblyscript": "^0.27.24", "benchmark": "^2.1.4" } -} \ No newline at end of file +} diff --git a/packages/as-sha256/test/perf/simd.test.ts b/packages/as-sha256/test/perf/simd.test.ts index b462be03a..ced41e60d 100644 --- a/packages/as-sha256/test/perf/simd.test.ts +++ b/packages/as-sha256/test/perf/simd.test.ts @@ -30,7 +30,7 @@ describe("digest64 vs batchHash4UintArray64s vs digest64HashObjects vs batchHash for (let j = 0; j < iterations * 4; j++) sha256.digest64(input); }); - // // batchHash4UintArray64s do 4 sha256 in parallel + // batchHash4UintArray64s do 4 sha256 in parallel itBench(`hash ${iterations * 4} times using batchHash4UintArray64s`, () => { for (let j = 0; j < iterations; j++) { sha256.batchHash4UintArray64s([input, input, input, input]); diff --git a/packages/as-sha256/tsconfig.build.json b/packages/as-sha256/tsconfig.build.json index e62040309..1a858adcf 100644 --- a/packages/as-sha256/tsconfig.build.json +++ b/packages/as-sha256/tsconfig.build.json @@ -29,4 +29,4 @@ "incremental": false, "preserveWatchOutput": true } -} \ No newline at end of file +} diff --git a/packages/persistent-merkle-tree/test/perf/hashComputation.test.ts b/packages/persistent-merkle-tree/test/perf/hashComputation.test.ts index ecc4b9292..dee96bdc3 100644 --- a/packages/persistent-merkle-tree/test/perf/hashComputation.test.ts +++ b/packages/persistent-merkle-tree/test/perf/hashComputation.test.ts @@ -1,5 +1,5 @@ import {itBench} from "@dapplion/benchmark"; -import {HashComputation, HashComputationLevel, LeafNode, zeroHash} from "../../src/index.js"; +import { HashComputation, HashComputationLevel, LeafNode, zeroHash } from "../../src/index.js"; /** * HashComputationLevel push then loop is faster than HashComputation[] push then loop @@ -30,7 +30,7 @@ describe("HashComputationLevel", function () { for (const hc of level) { const {src0, src1, dest} = hc; } - }, + } }); itBench({ @@ -43,6 +43,6 @@ describe("HashComputationLevel", function () { for (const hc of level) { const {src0, src1, dest} = hc; } - }, - }); + } + }) }); From 37dfc310c6868e43db6c25bcba29ea64be2767f5 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 01:42:01 +0700 Subject: [PATCH 28/47] chore: lint changes --- packages/as-sha256/{.prettierrc.js => .prettierrc.cjs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/as-sha256/{.prettierrc.js => .prettierrc.cjs} (100%) diff --git a/packages/as-sha256/.prettierrc.js b/packages/as-sha256/.prettierrc.cjs similarity index 100% rename from packages/as-sha256/.prettierrc.js rename to packages/as-sha256/.prettierrc.cjs From e7073cfa489fa3d957c166d07dcfa790f3e61324 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 01:43:26 +0700 Subject: [PATCH 29/47] chore: lint changes --- packages/{persistent-merkle-tree => as-sha256}/.prettierrc | 0 packages/{as-sha256 => persistent-merkle-tree}/.prettierrc.cjs | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/{persistent-merkle-tree => as-sha256}/.prettierrc (100%) rename packages/{as-sha256 => persistent-merkle-tree}/.prettierrc.cjs (100%) diff --git a/packages/persistent-merkle-tree/.prettierrc b/packages/as-sha256/.prettierrc similarity index 100% rename from packages/persistent-merkle-tree/.prettierrc rename to packages/as-sha256/.prettierrc diff --git a/packages/as-sha256/.prettierrc.cjs b/packages/persistent-merkle-tree/.prettierrc.cjs similarity index 100% rename from packages/as-sha256/.prettierrc.cjs rename to packages/persistent-merkle-tree/.prettierrc.cjs From 077b48090b543348334b3dbc8ddff0f380227a81 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 01:53:13 +0700 Subject: [PATCH 30/47] fix: rebase conflict --- packages/as-sha256/test/unit/index.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/as-sha256/test/unit/index.test.ts b/packages/as-sha256/test/unit/index.test.ts index 4e16982fe..351f3018d 100644 --- a/packages/as-sha256/test/unit/index.test.ts +++ b/packages/as-sha256/test/unit/index.test.ts @@ -1,7 +1,6 @@ import {describe, it, expect} from "vitest"; import {createHash, randomBytes} from "crypto"; import {Buffer} from "buffer"; -import {expect} from "chai"; import {AssemblyScriptSha256Hasher, byteArrayToHashObject, hashObjectToByteArray} from "../../src/index.js"; describe("hashObjectToByteArray and byteArrayToHashObject", function () { From abbab61f3d29cc317aea8b63aec5966ccf78ec10 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 11:08:48 +0700 Subject: [PATCH 31/47] fix: rebase conflicts --- packages/as-sha256/test/unit/getSimdTests.ts | 4 ++-- packages/as-sha256/test/unit/index.test.ts | 4 ++-- .../test/perf/hasher.test.ts | 24 +++++++++++++------ .../test/unit/hasher.test.ts | 4 ++-- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/packages/as-sha256/test/unit/getSimdTests.ts b/packages/as-sha256/test/unit/getSimdTests.ts index 736370869..2cbeadbb6 100644 --- a/packages/as-sha256/test/unit/getSimdTests.ts +++ b/packages/as-sha256/test/unit/getSimdTests.ts @@ -2,14 +2,14 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import {expect} from "chai"; +import {describe, beforeAll, expect, it} from "vitest"; import crypto from "crypto"; import {byteArrayToHashObject, hashObjectToByteArray} from "../../src/hashObject.js"; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getSimdTests(sha256: any, useSimd: boolean): void { describe(`as-sha256 SIMD enabled methods ${useSimd ? "with SIMD" : "without SIMD"}`, () => { - before(function () { + beforeAll(function () { sha256.reinitializeInstance(useSimd); expect(sha256.simdEnabled()).to.equal(useSimd); }); diff --git a/packages/as-sha256/test/unit/index.test.ts b/packages/as-sha256/test/unit/index.test.ts index 351f3018d..1351e86f3 100644 --- a/packages/as-sha256/test/unit/index.test.ts +++ b/packages/as-sha256/test/unit/index.test.ts @@ -1,4 +1,4 @@ -import {describe, it, expect} from "vitest"; +import {describe, it, expect, beforeAll} from "vitest"; import {createHash, randomBytes} from "crypto"; import {Buffer} from "buffer"; import {AssemblyScriptSha256Hasher, byteArrayToHashObject, hashObjectToByteArray} from "../../src/index.js"; @@ -27,7 +27,7 @@ describe("hashObjectToByteArray and byteArrayToHashObject", function () { describe("as-sha256 non-SIMD enabled methods", function () { let sha256: AssemblyScriptSha256Hasher; - before(async function () { + beforeAll(async function () { sha256 = await AssemblyScriptSha256Hasher.initialize(); }); diff --git a/packages/persistent-merkle-tree/test/perf/hasher.test.ts b/packages/persistent-merkle-tree/test/perf/hasher.test.ts index a6c95f6bc..e8915a0d8 100644 --- a/packages/persistent-merkle-tree/test/perf/hasher.test.ts +++ b/packages/persistent-merkle-tree/test/perf/hasher.test.ts @@ -1,6 +1,6 @@ import {itBench} from "@dapplion/benchmark"; -import {HashObject, setHasher, uint8ArrayToHashObject} from "../../src/hasher/index.js"; -import {hasher as asShaHasher} from "../../src/hasher/as-sha256.js"; +import {Hasher, HashObject, setHasher, uint8ArrayToHashObject} from "../../src/hasher/index.js"; +import {hasher as asSha256Hasher} from "../../src/hasher/as-sha256.js"; import {hasher as nobleHasher} from "../../src/hasher/noble.js"; import {hasher as hashtreeHasher} from "../../src/hasher/hashtree.js"; import {buildComparisonTrees} from "../utils/tree.js"; @@ -20,8 +20,18 @@ describe("hasher", function () { root2[i] = 2; } + const hashers: Hasher[] = [hashtreeHasher, asSha256Hasher, nobleHasher]; + + beforeAll(async function () { + for (const hasher of hashers) { + if (typeof hasher.initialize === "function") { + await hasher.initialize(); + } + } + }); + const runsFactor = 10; - for (const hasher of [asShaHasher, nobleHasher, hashtreeHasher]) { + for (const hasher of hashers) { describe(hasher.name, () => { itBench({ id: `hash 2 Uint8Array ${iterations} times - ${hasher.name}`, @@ -67,7 +77,7 @@ describe("hasher", function () { describe("hashtree", function () { itBench({ - id: `getHashComputations`, + id: "getHashComputations", beforeEach: () => { const [tree] = buildComparisonTrees(16); return tree; @@ -79,7 +89,7 @@ describe("hashtree", function () { }); itBench({ - id: `executeHashComputations`, + id: "executeHashComputations", beforeEach: () => { const [tree] = buildComparisonTrees(16); return tree; @@ -92,14 +102,14 @@ describe("hashtree", function () { }); itBench({ - id: `get root`, + id: "get root", beforeEach: async () => { const [tree] = buildComparisonTrees(16); await setHasher(hashtreeHasher); return tree; }, fn: (tree) => { - tree.root; + tree.root; }, }); }); diff --git a/packages/persistent-merkle-tree/test/unit/hasher.test.ts b/packages/persistent-merkle-tree/test/unit/hasher.test.ts index 090eec56d..ed092e611 100644 --- a/packages/persistent-merkle-tree/test/unit/hasher.test.ts +++ b/packages/persistent-merkle-tree/test/unit/hasher.test.ts @@ -1,4 +1,4 @@ -import {describe, it, expect} from "vitest"; +import {describe, it, expect, beforeAll} from "vitest"; import {expectEqualHex} from "../utils/expectHex.js"; import {uint8ArrayToHashObject, hashObjectToUint8Array} from "../../src/hasher/util.js"; @@ -19,7 +19,7 @@ import {zeroHash} from "../../src/zeroHash.js"; describe("hashers", function () { const hashers: Hasher[] = [hashtreeHasher, asSha256Hasher, nobleHasher]; - before(async function () { + beforeAll(async function () { for (const hasher of hashers) { if (typeof hasher.initialize === "function") { await hasher.initialize(); From 5b30c9a9c40e72fc311a6c09b9c7963064048f47 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 11:14:56 +0700 Subject: [PATCH 32/47] fix: rebase conflicts --- packages/persistent-merkle-tree/test/perf/hasher.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/persistent-merkle-tree/test/perf/hasher.test.ts b/packages/persistent-merkle-tree/test/perf/hasher.test.ts index e8915a0d8..70668a59b 100644 --- a/packages/persistent-merkle-tree/test/perf/hasher.test.ts +++ b/packages/persistent-merkle-tree/test/perf/hasher.test.ts @@ -22,7 +22,7 @@ describe("hasher", function () { const hashers: Hasher[] = [hashtreeHasher, asSha256Hasher, nobleHasher]; - beforeAll(async function () { + before(async function () { for (const hasher of hashers) { if (typeof hasher.initialize === "function") { await hasher.initialize(); From d4e51f007eb06d3f7f4c7ee47b8166b03b670ad4 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 11:17:13 +0700 Subject: [PATCH 33/47] chore: remove conflicting tsconfig from before rebase --- packages/as-sha256/tsconfig.build.json | 32 -------------------------- 1 file changed, 32 deletions(-) delete mode 100644 packages/as-sha256/tsconfig.build.json diff --git a/packages/as-sha256/tsconfig.build.json b/packages/as-sha256/tsconfig.build.json deleted file mode 100644 index 1a858adcf..000000000 --- a/packages/as-sha256/tsconfig.build.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "include": [ - "src" - ], - "compilerOptions": { - "typeRoots": [ - "../../node_modules/@types", - "./node_modules/@types", - "./types" - ], - "outDir": "lib", - "target": "esnext", - "module": "ESNext", - "moduleResolution": "node", - "pretty": true, - "strict": true, - "sourceMap": true, - "alwaysStrict": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "strictBindCallApply": true, - "strictPropertyInitialization": true, - "noImplicitAny": true, - "noImplicitThis": true, - "noImplicitReturns": true, - "esModuleInterop": true, - "declaration": true, - "declarationMap": true, - "incremental": false, - "preserveWatchOutput": true - } -} From 92a9cd006421e06e671af0275bf02de470c09b5c Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 11:54:01 +0700 Subject: [PATCH 34/47] feat: export base digest and digest64 from as-sha256 for direct import --- packages/as-sha256/src/index.ts | 83 +++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index f6e367ede..fa1c29c42 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -6,6 +6,89 @@ import {byteArrayIntoHashObject, byteArrayToHashObject, hashObjectToByteArray} f import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; +class BaseAssemblyScriptSha256Hasher { + private ctx: WasmSimdContext | WasmContext; + private wasmInputValue!: number; + private wasmOutputValue!: number; + private inputUint8Array!: Uint8Array; + private outputUint8Array32!: Uint8Array; + + constructor() { + this.ctx = newInstance(false); + this.wasmInputValue = this.ctx.input.value; + this.wasmOutputValue = this.ctx.output.value; + this.inputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); + /** output uint8array, length 32, used to easily copy output data */ + this.outputUint8Array32 = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, 32); + } + + /** + * Sha256 for data of any length + */ + digest(data: Uint8Array): Uint8Array { + if (data.length === 64) { + return this.digest64(data); + } + + if (data.length <= this.ctx.INPUT_LENGTH) { + this.inputUint8Array.set(data); + this.ctx.digest(data.length); + return this.allocDigest(); + } + + this.ctx.init(); + this.update(data); + return this.final(); + } + + /** + * Sha256 for 64byte ArrayBuffer + */ + digest64(data: Uint8Array): Uint8Array { + if (data.length === 64) { + this.inputUint8Array.set(data); + this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); + return this.allocDigest(); + } + throw new Error("InvalidLengthForDigest64"); + } + + protected update(data: Uint8Array): void { + const INPUT_LENGTH = this.ctx.INPUT_LENGTH; + if (data.length > INPUT_LENGTH) { + for (let i = 0; i < data.length; i += INPUT_LENGTH) { + const sliced = data.subarray(i, i + INPUT_LENGTH); + this.inputUint8Array.set(sliced); + this.ctx.update(this.wasmInputValue, sliced.length); + } + } else { + this.inputUint8Array.set(data); + this.ctx.update(this.wasmInputValue, data.length); + } + } + + protected final(): Uint8Array { + this.ctx.final(this.wasmOutputValue); + return this.allocDigest(); + } + + /** + * allocate memory and copy result + */ + protected allocDigest(): Uint8Array { + const out = allocUnsafe(32); + out.set(this.outputUint8Array32); + return out; + } +} + +const baseHasher = new BaseAssemblyScriptSha256Hasher(); + +const digest = baseHasher.digest.bind(baseHasher); +const digest64 = baseHasher.digest64.bind(baseHasher); + +export {digest, digest64}; + export class AssemblyScriptSha256Hasher { private ctx!: WasmSimdContext | WasmContext; private hasSimd!: boolean; From 58a8a6b30d4a48cf123cc9ffc7025e15ce7ba47f Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 12:09:03 +0700 Subject: [PATCH 35/47] refactor: deduplicate base digest and digest64 --- packages/as-sha256/src/index.ts | 89 +++++---------------------------- 1 file changed, 13 insertions(+), 76 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index fa1c29c42..3ab649840 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -7,14 +7,14 @@ import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; class BaseAssemblyScriptSha256Hasher { - private ctx: WasmSimdContext | WasmContext; - private wasmInputValue!: number; - private wasmOutputValue!: number; - private inputUint8Array!: Uint8Array; - private outputUint8Array32!: Uint8Array; - - constructor() { - this.ctx = newInstance(false); + protected ctx: WasmSimdContext | WasmContext; + protected wasmInputValue!: number; + protected wasmOutputValue!: number; + protected inputUint8Array!: Uint8Array; + protected outputUint8Array32!: Uint8Array; + + constructor(useSimd: boolean) { + this.ctx = newInstance(useSimd); this.wasmInputValue = this.ctx.input.value; this.wasmOutputValue = this.ctx.output.value; this.inputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); @@ -82,23 +82,19 @@ class BaseAssemblyScriptSha256Hasher { } } -const baseHasher = new BaseAssemblyScriptSha256Hasher(); +const baseHasher = new BaseAssemblyScriptSha256Hasher(false); const digest = baseHasher.digest.bind(baseHasher); const digest64 = baseHasher.digest64.bind(baseHasher); export {digest, digest64}; -export class AssemblyScriptSha256Hasher { - private ctx!: WasmSimdContext | WasmContext; +export class AssemblyScriptSha256Hasher extends BaseAssemblyScriptSha256Hasher { private hasSimd!: boolean; - private wasmInputValue!: number; - private wasmOutputValue!: number; - private inputUint8Array!: Uint8Array; private outputUint8Array!: Uint8Array; - private outputUint8Array32!: Uint8Array; private inputUint32Array!: Uint32Array; - private constructor(useSimd: boolean) { + constructor(useSimd: boolean) { + super(useSimd); this.initializeInstance(useSimd); } @@ -108,6 +104,7 @@ export class AssemblyScriptSha256Hasher { } reinitializeInstance(useSimd: boolean): boolean { + this.ctx = newInstance(useSimd); this.initializeInstance(useSimd); return this.simdEnabled(); } @@ -116,37 +113,6 @@ export class AssemblyScriptSha256Hasher { return Boolean(this.ctx.HAS_SIMD.valueOf()); } - /** - * Sha256 for data of any length - */ - digest(data: Uint8Array): Uint8Array { - if (data.length === 64) { - return this.digest64(data); - } - - if (data.length <= this.ctx.INPUT_LENGTH) { - this.inputUint8Array.set(data); - this.ctx.digest(data.length); - return this.allocDigest(); - } - - this.ctx.init(); - this.update(data); - return this.final(); - } - - /** - * Sha256 for 64byte ArrayBuffer - */ - digest64(data: Uint8Array): Uint8Array { - if (data.length === 64) { - this.inputUint8Array.set(data); - this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); - return this.allocDigest(); - } - throw new Error("InvalidLengthForDigest64"); - } - digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Array { if (bytes1.length !== 32 || bytes2.length !== 32) { throw new Error("InvalidLengthForDigest64"); @@ -412,7 +378,6 @@ export class AssemblyScriptSha256Hasher { } private initializeInstance(useSimd: boolean): void { - this.ctx = newInstance(useSimd); this.hasSimd = this.simdEnabled(); this.wasmInputValue = this.ctx.input.value; this.wasmOutputValue = this.ctx.output.value; @@ -423,34 +388,6 @@ export class AssemblyScriptSha256Hasher { this.inputUint32Array = new Uint32Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); } - private update(data: Uint8Array): void { - const INPUT_LENGTH = this.ctx.INPUT_LENGTH; - if (data.length > INPUT_LENGTH) { - for (let i = 0; i < data.length; i += INPUT_LENGTH) { - const sliced = data.subarray(i, i + INPUT_LENGTH); - this.inputUint8Array.set(sliced); - this.ctx.update(this.wasmInputValue, sliced.length); - } - } else { - this.inputUint8Array.set(data); - this.ctx.update(this.wasmInputValue, data.length); - } - } - - private final(): Uint8Array { - this.ctx.final(this.wasmOutputValue); - return this.allocDigest(); - } - - /** - * allocate memory and copy result - */ - private allocDigest(): Uint8Array { - const out = allocUnsafe(32); - out.set(this.outputUint8Array32); - return out; - } - /** * allocate memory and copy result at offset */ From 2b53660c4f840472372a57eada4d7b8e9cd1fb12 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 12:31:47 +0700 Subject: [PATCH 36/47] feat: export remaining non-simd methods as free functions --- packages/as-sha256/src/index.ts | 149 ++++++++++++++++---------------- 1 file changed, 76 insertions(+), 73 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 3ab649840..7d8d0e9d7 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -11,15 +11,13 @@ class BaseAssemblyScriptSha256Hasher { protected wasmInputValue!: number; protected wasmOutputValue!: number; protected inputUint8Array!: Uint8Array; + protected inputUint32Array!: Uint32Array; + protected outputUint8Array!: Uint8Array; protected outputUint8Array32!: Uint8Array; constructor(useSimd: boolean) { this.ctx = newInstance(useSimd); - this.wasmInputValue = this.ctx.input.value; - this.wasmOutputValue = this.ctx.output.value; - this.inputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); - /** output uint8array, length 32, used to easily copy output data */ - this.outputUint8Array32 = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, 32); + this.initializeInstance(); } /** @@ -53,66 +51,6 @@ class BaseAssemblyScriptSha256Hasher { throw new Error("InvalidLengthForDigest64"); } - protected update(data: Uint8Array): void { - const INPUT_LENGTH = this.ctx.INPUT_LENGTH; - if (data.length > INPUT_LENGTH) { - for (let i = 0; i < data.length; i += INPUT_LENGTH) { - const sliced = data.subarray(i, i + INPUT_LENGTH); - this.inputUint8Array.set(sliced); - this.ctx.update(this.wasmInputValue, sliced.length); - } - } else { - this.inputUint8Array.set(data); - this.ctx.update(this.wasmInputValue, data.length); - } - } - - protected final(): Uint8Array { - this.ctx.final(this.wasmOutputValue); - return this.allocDigest(); - } - - /** - * allocate memory and copy result - */ - protected allocDigest(): Uint8Array { - const out = allocUnsafe(32); - out.set(this.outputUint8Array32); - return out; - } -} - -const baseHasher = new BaseAssemblyScriptSha256Hasher(false); - -const digest = baseHasher.digest.bind(baseHasher); -const digest64 = baseHasher.digest64.bind(baseHasher); - -export {digest, digest64}; - -export class AssemblyScriptSha256Hasher extends BaseAssemblyScriptSha256Hasher { - private hasSimd!: boolean; - private outputUint8Array!: Uint8Array; - private inputUint32Array!: Uint32Array; - constructor(useSimd: boolean) { - super(useSimd); - this.initializeInstance(useSimd); - } - - static async initialize(shouldUseSimd?: boolean): Promise { - const useSimd = shouldUseSimd !== undefined ? shouldUseSimd : await simd(); - return new AssemblyScriptSha256Hasher(useSimd); - } - - reinitializeInstance(useSimd: boolean): boolean { - this.ctx = newInstance(useSimd); - this.initializeInstance(useSimd); - return this.simdEnabled(); - } - - simdEnabled(): boolean { - return Boolean(this.ctx.HAS_SIMD.valueOf()); - } - digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Array { if (bytes1.length !== 32 || bytes2.length !== 32) { throw new Error("InvalidLengthForDigest64"); @@ -171,6 +109,77 @@ export class AssemblyScriptSha256Hasher extends BaseAssemblyScriptSha256Hasher { byteArrayIntoHashObject(this.outputUint8Array, 0, output); } + protected initializeInstance(): void { + this.wasmInputValue = this.ctx.input.value; + this.wasmOutputValue = this.ctx.output.value; + this.inputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); + this.outputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, this.ctx.PARALLEL_FACTOR * 32); + /** output uint8array, length 32, used to easily copy output data */ + this.outputUint8Array32 = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, 32); + this.inputUint32Array = new Uint32Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); + } + + protected update(data: Uint8Array): void { + const INPUT_LENGTH = this.ctx.INPUT_LENGTH; + if (data.length > INPUT_LENGTH) { + for (let i = 0; i < data.length; i += INPUT_LENGTH) { + const sliced = data.subarray(i, i + INPUT_LENGTH); + this.inputUint8Array.set(sliced); + this.ctx.update(this.wasmInputValue, sliced.length); + } + } else { + this.inputUint8Array.set(data); + this.ctx.update(this.wasmInputValue, data.length); + } + } + + protected final(): Uint8Array { + this.ctx.final(this.wasmOutputValue); + return this.allocDigest(); + } + + /** + * allocate memory and copy result + */ + protected allocDigest(): Uint8Array { + const out = allocUnsafe(32); + out.set(this.outputUint8Array32); + return out; + } +} + +const baseHasher = new BaseAssemblyScriptSha256Hasher(false); + +const digest = baseHasher.digest.bind(baseHasher); +const digest64 = baseHasher.digest64.bind(baseHasher); +const digest2Bytes32 = baseHasher.digest2Bytes32.bind(baseHasher); +const digest64HashObjects = baseHasher.digest64HashObjects.bind(baseHasher); +const digest64HashObjectsInto = baseHasher.digest64HashObjectsInto.bind(baseHasher); + +export {digest, digest64, digest2Bytes32, digest64HashObjects, digest64HashObjectsInto}; + +export class AssemblyScriptSha256Hasher extends BaseAssemblyScriptSha256Hasher { + private hasSimd!: boolean; + constructor(useSimd: boolean) { + super(useSimd); + this.initializeInstance(); + } + + static async initialize(shouldUseSimd?: boolean): Promise { + const useSimd = shouldUseSimd !== undefined ? shouldUseSimd : await simd(); + return new AssemblyScriptSha256Hasher(useSimd); + } + + reinitializeInstance(useSimd: boolean): boolean { + this.ctx = newInstance(useSimd); + this.initializeInstance(); + return this.simdEnabled(); + } + + simdEnabled(): boolean { + return Boolean(this.ctx.HAS_SIMD.valueOf()); + } + /** * Hash 4 HashObject inputs in parallel * - Each input (inputs{i}) is 4 bytes which make it 32 bytes @@ -377,15 +386,9 @@ export class AssemblyScriptSha256Hasher extends BaseAssemblyScriptSha256Hasher { } } - private initializeInstance(useSimd: boolean): void { + protected initializeInstance(): void { this.hasSimd = this.simdEnabled(); - this.wasmInputValue = this.ctx.input.value; - this.wasmOutputValue = this.ctx.output.value; - this.inputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); - this.outputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, this.ctx.PARALLEL_FACTOR * 32); - /** output uint8array, length 32, used to easily copy output data */ - this.outputUint8Array32 = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, 32); - this.inputUint32Array = new Uint32Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); + super.initializeInstance(); } /** From ba53bd3e6cdc9edbebdbb132f5f7ca849ec34b72 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Mon, 6 Jan 2025 13:21:18 +0700 Subject: [PATCH 37/47] feat: overwrite baseHasher when AssemblyScriptSha256Hasher is instantiated --- packages/as-sha256/src/index.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 7d8d0e9d7..76bfdd5e7 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -148,13 +148,14 @@ class BaseAssemblyScriptSha256Hasher { } } -const baseHasher = new BaseAssemblyScriptSha256Hasher(false); - -const digest = baseHasher.digest.bind(baseHasher); -const digest64 = baseHasher.digest64.bind(baseHasher); -const digest2Bytes32 = baseHasher.digest2Bytes32.bind(baseHasher); -const digest64HashObjects = baseHasher.digest64HashObjects.bind(baseHasher); -const digest64HashObjectsInto = baseHasher.digest64HashObjectsInto.bind(baseHasher); +// If an instance of AssemblyScriptSha256Hasher is created it will overwrite this instance and the +// exported free functions. These are here for consumers that do not use the batch hashing methods +let baseHasher = new BaseAssemblyScriptSha256Hasher(false); +let digest = baseHasher.digest.bind(baseHasher); +let digest64 = baseHasher.digest64.bind(baseHasher); +let digest2Bytes32 = baseHasher.digest2Bytes32.bind(baseHasher); +let digest64HashObjects = baseHasher.digest64HashObjects.bind(baseHasher); +let digest64HashObjectsInto = baseHasher.digest64HashObjectsInto.bind(baseHasher); export {digest, digest64, digest2Bytes32, digest64HashObjects, digest64HashObjectsInto}; @@ -389,6 +390,13 @@ export class AssemblyScriptSha256Hasher extends BaseAssemblyScriptSha256Hasher { protected initializeInstance(): void { this.hasSimd = this.simdEnabled(); super.initializeInstance(); + // eslint-disable-next-line @typescript-eslint/no-this-alias + baseHasher = this; + digest = this.digest.bind(this); + digest64 = this.digest64.bind(this); + digest2Bytes32 = this.digest2Bytes32.bind(this); + digest64HashObjects = this.digest64HashObjects.bind(this); + digest64HashObjectsInto = this.digest64HashObjectsInto.bind(this); } /** From 2b7b28050cdff98482d40f25ceb2caddc8591a1b Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Tue, 7 Jan 2025 03:26:38 +0700 Subject: [PATCH 38/47] feat: replace use of as-sha256 in noble hasher for digest64HashObjects --- packages/persistent-merkle-tree/src/hasher/noble.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/persistent-merkle-tree/src/hasher/noble.ts b/packages/persistent-merkle-tree/src/hasher/noble.ts index 9d7a643e8..9096dbb41 100644 --- a/packages/persistent-merkle-tree/src/hasher/noble.ts +++ b/packages/persistent-merkle-tree/src/hasher/noble.ts @@ -1,5 +1,5 @@ import {sha256} from "@noble/hashes/sha256"; -import {byteArrayIntoHashObject} from "@chainsafe/as-sha256"; +import {digest64HashObjects, byteArrayIntoHashObject} from "@chainsafe/as-sha256"; import type {Hasher} from "./types.js"; import { BLOCK_SIZE, @@ -55,7 +55,7 @@ export const hasher: Hasher = { } for (const hc of hcArr) { - hasher.digest64HashObjects(hc.src0, hc.src1, hc.dest); + hc.dest.applyHash(digest64HashObjects(hc.src0, hc.src1)); } } }, From 5f15842fadd6122fe44b04e8a85d6c44f31da533 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Tue, 7 Jan 2025 20:20:17 +0700 Subject: [PATCH 39/47] feat: remove async from as-sha256 --- packages/as-sha256/src/index.ts | 676 +++++++++---------- packages/as-sha256/src/sha256.ts | 2 +- packages/as-sha256/src/wasm.ts | 11 +- packages/as-sha256/test/perf/index.test.ts | 34 +- packages/as-sha256/test/perf/simd.test.ts | 15 +- packages/as-sha256/test/unit/getSimdTests.ts | 2 +- packages/as-sha256/test/unit/index.test.ts | 36 +- packages/as-sha256/test/unit/noSimd.test.ts | 3 +- packages/as-sha256/test/unit/simd.test.ts | 3 +- 9 files changed, 356 insertions(+), 426 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 76bfdd5e7..53a22c165 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -1,410 +1,356 @@ -import {simd} from "wasm-feature-detect"; import {allocUnsafe} from "./alloc.js"; -import {newInstance, WasmSimdContext, WasmContext} from "./wasm.js"; +import {newInstance, WasmSimdContext} from "./wasm.js"; import type {HashObject} from "./hashObject.js"; import {byteArrayIntoHashObject, byteArrayToHashObject, hashObjectToByteArray} from "./hashObject.js"; import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; -class BaseAssemblyScriptSha256Hasher { - protected ctx: WasmSimdContext | WasmContext; - protected wasmInputValue!: number; - protected wasmOutputValue!: number; - protected inputUint8Array!: Uint8Array; - protected inputUint32Array!: Uint32Array; - protected outputUint8Array!: Uint8Array; - protected outputUint8Array32!: Uint8Array; - - constructor(useSimd: boolean) { - this.ctx = newInstance(useSimd); - this.initializeInstance(); - } - - /** - * Sha256 for data of any length - */ - digest(data: Uint8Array): Uint8Array { - if (data.length === 64) { - return this.digest64(data); - } - - if (data.length <= this.ctx.INPUT_LENGTH) { - this.inputUint8Array.set(data); - this.ctx.digest(data.length); - return this.allocDigest(); - } - - this.ctx.init(); - this.update(data); - return this.final(); - } +let ctx: WasmSimdContext; +export let simdEnabled: boolean; +let wasmInputValue: number; +let wasmOutputValue: number; +let inputUint8Array: Uint8Array; +let outputUint8Array: Uint8Array; +/** output uint8array, length 32, used to easily copy output data */ +let outputUint8Array32: Uint8Array; +let inputUint32Array: Uint32Array; + +export function reinitializeInstance(useSimd?: boolean): void { + ctx = newInstance(useSimd) as WasmSimdContext; + simdEnabled = Boolean(ctx.HAS_SIMD.valueOf()); + wasmInputValue = ctx.input.value; + wasmOutputValue = ctx.output.value; + inputUint8Array = new Uint8Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); + outputUint8Array = new Uint8Array(ctx.memory.buffer, wasmOutputValue, ctx.PARALLEL_FACTOR * 32); + outputUint8Array32 = new Uint8Array(ctx.memory.buffer, wasmOutputValue, 32); + inputUint32Array = new Uint32Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH); +} - /** - * Sha256 for 64byte ArrayBuffer - */ - digest64(data: Uint8Array): Uint8Array { - if (data.length === 64) { - this.inputUint8Array.set(data); - this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); - return this.allocDigest(); - } - throw new Error("InvalidLengthForDigest64"); - } +reinitializeInstance(); - digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Array { - if (bytes1.length !== 32 || bytes2.length !== 32) { - throw new Error("InvalidLengthForDigest64"); - } - this.inputUint8Array.set(bytes1); - this.inputUint8Array.set(bytes2, 32); - this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); - return this.allocDigest(); +export function digest(data: Uint8Array): Uint8Array { + if (data.length === 64) { + return digest64(data); } - /** - * Digest 2 objects, each has 8 properties from h0 to h7. - * The performance is a little bit better than digest64 due to the use of Uint32Array - * and the memory is a little bit better than digest64 due to no temporary Uint8Array. - */ - digest64HashObjects(obj1: HashObject, obj2: HashObject): HashObject { - const result: HashObject = { - h0: 0, - h1: 0, - h2: 0, - h3: 0, - h4: 0, - h5: 0, - h6: 0, - h7: 0, - }; - this.digest64HashObjectsInto(obj1, obj2, result); - return result; + if (data.length <= ctx.INPUT_LENGTH) { + inputUint8Array.set(data); + ctx.digest(data.length); + return allocDigest(); } - /** - * Same to above but this set result to the output param to save memory. - */ - digest64HashObjectsInto(obj1: HashObject, obj2: HashObject, output: HashObject): void { - // TODO: expect obj1 and obj2 as HashObject - this.inputUint32Array[0] = obj1.h0; - this.inputUint32Array[1] = obj1.h1; - this.inputUint32Array[2] = obj1.h2; - this.inputUint32Array[3] = obj1.h3; - this.inputUint32Array[4] = obj1.h4; - this.inputUint32Array[5] = obj1.h5; - this.inputUint32Array[6] = obj1.h6; - this.inputUint32Array[7] = obj1.h7; - this.inputUint32Array[8] = obj2.h0; - this.inputUint32Array[9] = obj2.h1; - this.inputUint32Array[10] = obj2.h2; - this.inputUint32Array[11] = obj2.h3; - this.inputUint32Array[12] = obj2.h4; - this.inputUint32Array[13] = obj2.h5; - this.inputUint32Array[14] = obj2.h6; - this.inputUint32Array[15] = obj2.h7; - - this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); - - // extracting numbers from Uint32Array causes more memory - byteArrayIntoHashObject(this.outputUint8Array, 0, output); - } + ctx.init(); + update(data); + return final(); +} - protected initializeInstance(): void { - this.wasmInputValue = this.ctx.input.value; - this.wasmOutputValue = this.ctx.output.value; - this.inputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); - this.outputUint8Array = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, this.ctx.PARALLEL_FACTOR * 32); - /** output uint8array, length 32, used to easily copy output data */ - this.outputUint8Array32 = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, 32); - this.inputUint32Array = new Uint32Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); +export function digest64(data: Uint8Array): Uint8Array { + if (data.length === 64) { + inputUint8Array.set(data); + ctx.digest64(wasmInputValue, wasmOutputValue); + return allocDigest(); } + throw new Error("InvalidLengthForDigest64"); +} - protected update(data: Uint8Array): void { - const INPUT_LENGTH = this.ctx.INPUT_LENGTH; - if (data.length > INPUT_LENGTH) { - for (let i = 0; i < data.length; i += INPUT_LENGTH) { - const sliced = data.subarray(i, i + INPUT_LENGTH); - this.inputUint8Array.set(sliced); - this.ctx.update(this.wasmInputValue, sliced.length); - } - } else { - this.inputUint8Array.set(data); - this.ctx.update(this.wasmInputValue, data.length); - } +export function digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Array { + if (bytes1.length === 32 && bytes2.length === 32) { + inputUint8Array.set(bytes1); + inputUint8Array.set(bytes2, 32); + ctx.digest64(wasmInputValue, wasmOutputValue); + return allocDigest(); } + throw new Error("InvalidLengthForDigest64"); +} - protected final(): Uint8Array { - this.ctx.final(this.wasmOutputValue); - return this.allocDigest(); - } +/** + * Digest 2 objects, each has 8 properties from h0 to h7. + * The performance is a little bit better than digest64 due to the use of Uint32Array + * and the memory is a little bit better than digest64 due to no temporary Uint8Array. + * @returns + */ +export function digest64HashObjects(obj1: HashObject, obj2: HashObject): HashObject { + const result: HashObject = { + h0: 0, + h1: 0, + h2: 0, + h3: 0, + h4: 0, + h5: 0, + h6: 0, + h7: 0, + }; + digest64HashObjectsInto(obj1, obj2, result); + return result; +} - /** - * allocate memory and copy result - */ - protected allocDigest(): Uint8Array { - const out = allocUnsafe(32); - out.set(this.outputUint8Array32); - return out; - } +/** + * Same to above but this set result to the output param to save memory. + */ +export function digest64HashObjectsInto(obj1: HashObject, obj2: HashObject, output: HashObject): void { + // TODO: expect obj1 and obj2 as HashObject + inputUint32Array[0] = obj1.h0; + inputUint32Array[1] = obj1.h1; + inputUint32Array[2] = obj1.h2; + inputUint32Array[3] = obj1.h3; + inputUint32Array[4] = obj1.h4; + inputUint32Array[5] = obj1.h5; + inputUint32Array[6] = obj1.h6; + inputUint32Array[7] = obj1.h7; + inputUint32Array[8] = obj2.h0; + inputUint32Array[9] = obj2.h1; + inputUint32Array[10] = obj2.h2; + inputUint32Array[11] = obj2.h3; + inputUint32Array[12] = obj2.h4; + inputUint32Array[13] = obj2.h5; + inputUint32Array[14] = obj2.h6; + inputUint32Array[15] = obj2.h7; + + ctx.digest64(wasmInputValue, wasmOutputValue); + + // extracting numbers from Uint32Array causes more memory + byteArrayIntoHashObject(outputUint8Array, 0, output); } -// If an instance of AssemblyScriptSha256Hasher is created it will overwrite this instance and the -// exported free functions. These are here for consumers that do not use the batch hashing methods -let baseHasher = new BaseAssemblyScriptSha256Hasher(false); -let digest = baseHasher.digest.bind(baseHasher); -let digest64 = baseHasher.digest64.bind(baseHasher); -let digest2Bytes32 = baseHasher.digest2Bytes32.bind(baseHasher); -let digest64HashObjects = baseHasher.digest64HashObjects.bind(baseHasher); -let digest64HashObjectsInto = baseHasher.digest64HashObjectsInto.bind(baseHasher); - -export {digest, digest64, digest2Bytes32, digest64HashObjects, digest64HashObjectsInto}; - -export class AssemblyScriptSha256Hasher extends BaseAssemblyScriptSha256Hasher { - private hasSimd!: boolean; - constructor(useSimd: boolean) { - super(useSimd); - this.initializeInstance(); +/** + * Hash 4 HashObject inputs in parallel + * - Each input (inputs{i}) is 4 bytes which make it 32 bytes + * - Each HashObject input contains 2 HashObjects which is 64 bytes similar to batchHash4UintArray64s + * + * Inputs i0 i1 i2 i3 i4 i5 i6 i7 + * \ / \ / \ / \ / + * Outputs o0 o1 o2 o3 + * // TODO - batch: support equivalent method to hash into + */ +export function batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { + if (inputs.length !== 8) { + throw new Error("Input length must be 8"); } - static async initialize(shouldUseSimd?: boolean): Promise { - const useSimd = shouldUseSimd !== undefined ? shouldUseSimd : await simd(); - return new AssemblyScriptSha256Hasher(useSimd); + if (!simdEnabled) { + const output: HashObject[] = new Array(4); + for (let i = 0; i < 4; i++) { + output[i] = digest64HashObjects(inputs[2 * i], inputs[2 * i + 1]); + } + return output; } - reinitializeInstance(useSimd: boolean): boolean { - this.ctx = newInstance(useSimd); - this.initializeInstance(); - return this.simdEnabled(); - } + // inputUint8Array is 256 bytes + // inputUint32Array is 64 items + // v128 0 + inputUint32Array[0] = inputs[0].h0; + inputUint32Array[1] = inputs[2].h0; + inputUint32Array[2] = inputs[4].h0; + inputUint32Array[3] = inputs[6].h0; + + // v128 1 + inputUint32Array[4] = inputs[0].h1; + inputUint32Array[5] = inputs[2].h1; + inputUint32Array[6] = inputs[4].h1; + inputUint32Array[7] = inputs[6].h1; + + // v128 2 + inputUint32Array[8] = inputs[0].h2; + inputUint32Array[9] = inputs[2].h2; + inputUint32Array[10] = inputs[4].h2; + inputUint32Array[11] = inputs[6].h2; + + // v128 3 + inputUint32Array[12] = inputs[0].h3; + inputUint32Array[13] = inputs[2].h3; + inputUint32Array[14] = inputs[4].h3; + inputUint32Array[15] = inputs[6].h3; + + // v128 4 + inputUint32Array[16] = inputs[0].h4; + inputUint32Array[17] = inputs[2].h4; + inputUint32Array[18] = inputs[4].h4; + inputUint32Array[19] = inputs[6].h4; + + // v128 5 + inputUint32Array[20] = inputs[0].h5; + inputUint32Array[21] = inputs[2].h5; + inputUint32Array[22] = inputs[4].h5; + inputUint32Array[23] = inputs[6].h5; + + // v128 6 + inputUint32Array[24] = inputs[0].h6; + inputUint32Array[25] = inputs[2].h6; + inputUint32Array[26] = inputs[4].h6; + inputUint32Array[27] = inputs[6].h6; + + // v128 7 + inputUint32Array[28] = inputs[0].h7; + inputUint32Array[29] = inputs[2].h7; + inputUint32Array[30] = inputs[4].h7; + inputUint32Array[31] = inputs[6].h7; + + // v128 8 + inputUint32Array[32] = inputs[1].h0; + inputUint32Array[33] = inputs[3].h0; + inputUint32Array[34] = inputs[5].h0; + inputUint32Array[35] = inputs[7].h0; + + // v128 9 + inputUint32Array[36] = inputs[1].h1; + inputUint32Array[37] = inputs[3].h1; + inputUint32Array[38] = inputs[5].h1; + inputUint32Array[39] = inputs[7].h1; + + // v128 10 + inputUint32Array[40] = inputs[1].h2; + inputUint32Array[41] = inputs[3].h2; + inputUint32Array[42] = inputs[5].h2; + inputUint32Array[43] = inputs[7].h2; + + // v128 11 + inputUint32Array[44] = inputs[1].h3; + inputUint32Array[45] = inputs[3].h3; + inputUint32Array[46] = inputs[5].h3; + inputUint32Array[47] = inputs[7].h3; + + // v128 12 + inputUint32Array[48] = inputs[1].h4; + inputUint32Array[49] = inputs[3].h4; + inputUint32Array[50] = inputs[5].h4; + inputUint32Array[51] = inputs[7].h4; + + // v128 13 + inputUint32Array[52] = inputs[1].h5; + inputUint32Array[53] = inputs[3].h5; + inputUint32Array[54] = inputs[5].h5; + inputUint32Array[55] = inputs[7].h5; + + // v128 14 + inputUint32Array[56] = inputs[1].h6; + inputUint32Array[57] = inputs[3].h6; + inputUint32Array[58] = inputs[5].h6; + inputUint32Array[59] = inputs[7].h6; + + // v128 15 + inputUint32Array[60] = inputs[1].h7; + inputUint32Array[61] = inputs[3].h7; + inputUint32Array[62] = inputs[5].h7; + inputUint32Array[63] = inputs[7].h7; + + (ctx as WasmSimdContext).batchHash4HashObjectInputs(wasmOutputValue); + + const output0 = byteArrayToHashObject(outputUint8Array, 0); + const output1 = byteArrayToHashObject(outputUint8Array, 32); + const output2 = byteArrayToHashObject(outputUint8Array, 64); + const output3 = byteArrayToHashObject(outputUint8Array, 96); + + return [output0, output1, output2, output3]; +} - simdEnabled(): boolean { - return Boolean(this.ctx.HAS_SIMD.valueOf()); +/** + * Hash 4 Uint8Array objects in parallel, each 64 length as below + * + * Inputs: i0 i1 i2 i3 i4 i5 i6 i7 + * \ / \ / \ / \ / + * Outputs: o0 o1 o2 o3 + */ +export function batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { + if (inputs.length !== 4) { + throw new Error("Input length must be 4"); } - - /** - * Hash 4 HashObject inputs in parallel - * - Each input (inputs{i}) is 4 bytes which make it 32 bytes - * - Each HashObject input contains 2 HashObjects which is 64 bytes similar to batchHash4UintArray64s - * - * Inputs i0 i1 i2 i3 i4 i5 i6 i7 - * \ / \ / \ / \ / - * Outputs o0 o1 o2 o3 - * // TODO - batch: support equivalent method to hash into - */ - batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { - if (inputs.length !== 8) { - throw new Error("Input length must be 8"); + for (let i = 0; i < 4; i++) { + const input = inputs[i]; + if (input == null) { + throw new Error(`Input ${i} is null or undefined`); } - - if (!this.hasSimd) { - const output: HashObject[] = new Array(4); - for (let i = 0; i < 4; i++) { - output[i] = this.digest64HashObjects(inputs[2 * i], inputs[2 * i + 1]); - } - return output; + if (input.length !== 64) { + throw new Error(`Invalid length ${input.length} at input ${i}`); } - - // inputUint8Array is 256 bytes - // inputUint32Array is 64 items - // v128 0 - this.inputUint32Array[0] = inputs[0].h0; - this.inputUint32Array[1] = inputs[2].h0; - this.inputUint32Array[2] = inputs[4].h0; - this.inputUint32Array[3] = inputs[6].h0; - - // v128 1 - this.inputUint32Array[4] = inputs[0].h1; - this.inputUint32Array[5] = inputs[2].h1; - this.inputUint32Array[6] = inputs[4].h1; - this.inputUint32Array[7] = inputs[6].h1; - - // v128 2 - this.inputUint32Array[8] = inputs[0].h2; - this.inputUint32Array[9] = inputs[2].h2; - this.inputUint32Array[10] = inputs[4].h2; - this.inputUint32Array[11] = inputs[6].h2; - - // v128 3 - this.inputUint32Array[12] = inputs[0].h3; - this.inputUint32Array[13] = inputs[2].h3; - this.inputUint32Array[14] = inputs[4].h3; - this.inputUint32Array[15] = inputs[6].h3; - - // v128 4 - this.inputUint32Array[16] = inputs[0].h4; - this.inputUint32Array[17] = inputs[2].h4; - this.inputUint32Array[18] = inputs[4].h4; - this.inputUint32Array[19] = inputs[6].h4; - - // v128 5 - this.inputUint32Array[20] = inputs[0].h5; - this.inputUint32Array[21] = inputs[2].h5; - this.inputUint32Array[22] = inputs[4].h5; - this.inputUint32Array[23] = inputs[6].h5; - - // v128 6 - this.inputUint32Array[24] = inputs[0].h6; - this.inputUint32Array[25] = inputs[2].h6; - this.inputUint32Array[26] = inputs[4].h6; - this.inputUint32Array[27] = inputs[6].h6; - - // v128 7 - this.inputUint32Array[28] = inputs[0].h7; - this.inputUint32Array[29] = inputs[2].h7; - this.inputUint32Array[30] = inputs[4].h7; - this.inputUint32Array[31] = inputs[6].h7; - - // v128 8 - this.inputUint32Array[32] = inputs[1].h0; - this.inputUint32Array[33] = inputs[3].h0; - this.inputUint32Array[34] = inputs[5].h0; - this.inputUint32Array[35] = inputs[7].h0; - - // v128 9 - this.inputUint32Array[36] = inputs[1].h1; - this.inputUint32Array[37] = inputs[3].h1; - this.inputUint32Array[38] = inputs[5].h1; - this.inputUint32Array[39] = inputs[7].h1; - - // v128 10 - this.inputUint32Array[40] = inputs[1].h2; - this.inputUint32Array[41] = inputs[3].h2; - this.inputUint32Array[42] = inputs[5].h2; - this.inputUint32Array[43] = inputs[7].h2; - - // v128 11 - this.inputUint32Array[44] = inputs[1].h3; - this.inputUint32Array[45] = inputs[3].h3; - this.inputUint32Array[46] = inputs[5].h3; - this.inputUint32Array[47] = inputs[7].h3; - - // v128 12 - this.inputUint32Array[48] = inputs[1].h4; - this.inputUint32Array[49] = inputs[3].h4; - this.inputUint32Array[50] = inputs[5].h4; - this.inputUint32Array[51] = inputs[7].h4; - - // v128 13 - this.inputUint32Array[52] = inputs[1].h5; - this.inputUint32Array[53] = inputs[3].h5; - this.inputUint32Array[54] = inputs[5].h5; - this.inputUint32Array[55] = inputs[7].h5; - - // v128 14 - this.inputUint32Array[56] = inputs[1].h6; - this.inputUint32Array[57] = inputs[3].h6; - this.inputUint32Array[58] = inputs[5].h6; - this.inputUint32Array[59] = inputs[7].h6; - - // v128 15 - this.inputUint32Array[60] = inputs[1].h7; - this.inputUint32Array[61] = inputs[3].h7; - this.inputUint32Array[62] = inputs[5].h7; - this.inputUint32Array[63] = inputs[7].h7; - - (this.ctx as WasmSimdContext).batchHash4HashObjectInputs(this.wasmOutputValue); - - const output0 = byteArrayToHashObject(this.outputUint8Array, 0); - const output1 = byteArrayToHashObject(this.outputUint8Array, 32); - const output2 = byteArrayToHashObject(this.outputUint8Array, 64); - const output3 = byteArrayToHashObject(this.outputUint8Array, 96); - - return [output0, output1, output2, output3]; } - /** - * Hash 4 Uint8Array objects in parallel, each 64 length as below - * - * Inputs: i0 i1 i2 i3 i4 i5 i6 i7 - * \ / \ / \ / \ / - * Outputs: o0 o1 o2 o3 - */ - batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { - if (inputs.length !== 4) { - throw new Error("Input length must be 4"); - } - for (let i = 0; i < 4; i++) { - const input = inputs[i]; - if (input == null) { - throw new Error(`Input ${i} is null or undefined`); - } - if (input.length !== 64) { - throw new Error(`Invalid length ${input.length} at input ${i}`); - } - } + if (!simdEnabled) { + return inputs.map(digest64); + } - if (!this.hasSimd) { - return inputs.map(this.digest64.bind(this)); - } + // set up input buffer for v128 + inputUint8Array.set(inputs[1], 64); + inputUint8Array.set(inputs[0], 0); + inputUint8Array.set(inputs[2], 128); + inputUint8Array.set(inputs[3], 192); - // set up input buffer for v128 - this.inputUint8Array.set(inputs[1], 64); - this.inputUint8Array.set(inputs[0], 0); - this.inputUint8Array.set(inputs[2], 128); - this.inputUint8Array.set(inputs[3], 192); + (ctx as WasmSimdContext).batchHash4UintArray64s(wasmOutputValue); - (this.ctx as WasmSimdContext).batchHash4UintArray64s(this.wasmOutputValue); + const output0 = allocDigest(); + const output1 = allocDigestOffset(32); + const output2 = allocDigestOffset(64); + const output3 = allocDigestOffset(96); - const output0 = this.allocDigest(); - const output1 = this.allocDigestOffset(32); - const output2 = this.allocDigestOffset(64); - const output3 = this.allocDigestOffset(96); + return [output0, output1, output2, output3]; +} - return [output0, output1, output2, output3]; +/** + * Hash an input into preallocated input using batch if possible. + */ +export function hashInto(input: Uint8Array, output: Uint8Array): void { + if (input.length % 64 !== 0) { + throw new Error(`Invalid input length ${input.length}`); + } + if (input.length !== output.length * 2) { + throw new Error(`Invalid output length ${output.length}`); } - /** - * Hash an input into preallocated input using batch if possible. - */ - hashInto(input: Uint8Array, output: Uint8Array): void { - if (input.length % 64 !== 0) { - throw new Error(`Invalid input length ${input.length}`); - } - if (input.length !== output.length * 2) { - throw new Error(`Invalid output length ${output.length}`); + let num64ByteChunksHashed = 0; + let num64ByteChunksRemaining = input.length / 64; + if (simdEnabled) { + // for every 64 x 4 = 256 bytes, do the batch hash if SIMD is present + const num256ByteChunks = Math.floor(input.length / 256); + for (let i = 0; i < num256ByteChunks; i++) { + inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); + (ctx as WasmSimdContext).batchHash4UintArray64s(wasmOutputValue); + output.set(outputUint8Array.subarray(0, 128), i * 128); } + num64ByteChunksHashed = num256ByteChunks * 4; + num64ByteChunksRemaining -= num64ByteChunksHashed; + } - let num64ByteChunksHashed = 0; - let num64ByteChunksRemaining = input.length / 64; - if (this.hasSimd) { - // for every 64 x 4 = 256 bytes, do the batch hash if SIMD is present - const num256ByteChunks = Math.floor(input.length / 256); - for (let i = 0; i < num256ByteChunks; i++) { - this.inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); - (this.ctx as WasmSimdContext).batchHash4UintArray64s(this.wasmOutputValue); - output.set(this.outputUint8Array.subarray(0, 128), i * 128); - } - num64ByteChunksHashed = num256ByteChunks * 4; - num64ByteChunksRemaining -= num64ByteChunksHashed; - } + const inputOffset = num64ByteChunksHashed * 64; + const outputOffset = num64ByteChunksHashed * 32; + for (let i = 0; i < num64ByteChunksRemaining; i++) { + inputUint8Array.set(input.subarray(inputOffset + i * 64, inputOffset + (i + 1) * 64), 0); + ctx.digest64(wasmInputValue, wasmOutputValue); + output.set(outputUint8Array.subarray(0, 32), outputOffset + i * 32); + } +} - const inputOffset = num64ByteChunksHashed * 64; - const outputOffset = num64ByteChunksHashed * 32; - for (let i = 0; i < num64ByteChunksRemaining; i++) { - this.inputUint8Array.set(input.subarray(inputOffset + i * 64, inputOffset + (i + 1) * 64), 0); - this.ctx.digest64(this.wasmInputValue, this.wasmOutputValue); - output.set(this.outputUint8Array.subarray(0, 32), outputOffset + i * 32); +function update(data: Uint8Array): void { + const INPUT_LENGTH = ctx.INPUT_LENGTH; + if (data.length > INPUT_LENGTH) { + for (let i = 0; i < data.length; i += INPUT_LENGTH) { + const sliced = data.subarray(i, i + INPUT_LENGTH); + inputUint8Array.set(sliced); + ctx.update(wasmInputValue, sliced.length); } + } else { + inputUint8Array.set(data); + ctx.update(wasmInputValue, data.length); } +} - protected initializeInstance(): void { - this.hasSimd = this.simdEnabled(); - super.initializeInstance(); - // eslint-disable-next-line @typescript-eslint/no-this-alias - baseHasher = this; - digest = this.digest.bind(this); - digest64 = this.digest64.bind(this); - digest2Bytes32 = this.digest2Bytes32.bind(this); - digest64HashObjects = this.digest64HashObjects.bind(this); - digest64HashObjectsInto = this.digest64HashObjectsInto.bind(this); - } +function final(): Uint8Array { + ctx.final(wasmOutputValue); + return allocDigest(); +} - /** - * allocate memory and copy result at offset - */ - private allocDigestOffset(offset: number): Uint8Array { - const out = allocUnsafe(32); - out.set(this.outputUint8Array.subarray(offset, offset + 32)); - return out; - } +/** + * allocate memory and copy result + */ +function allocDigest(): Uint8Array { + const out = allocUnsafe(32); + out.set(outputUint8Array32); + return out; +} + +/** + * allocate memory and copy result at offset + */ +function allocDigestOffset(offset: number): Uint8Array { + const out = allocUnsafe(32); + out.set(outputUint8Array.subarray(offset, offset + 32)); + return out; } diff --git a/packages/as-sha256/src/sha256.ts b/packages/as-sha256/src/sha256.ts index e1a31b40b..16b38302a 100644 --- a/packages/as-sha256/src/sha256.ts +++ b/packages/as-sha256/src/sha256.ts @@ -11,7 +11,7 @@ export default class SHA256 { private uint8OutputArray: Uint8Array; constructor() { - this.ctx = newInstance(false); + this.ctx = newInstance(); this.wasmInputValue = this.ctx.input.value; this.wasmOutputValue = this.ctx.output.value; this.uint8InputArray = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); diff --git a/packages/as-sha256/src/wasm.ts b/packages/as-sha256/src/wasm.ts index c8838be33..96a77a5e9 100644 --- a/packages/as-sha256/src/wasm.ts +++ b/packages/as-sha256/src/wasm.ts @@ -37,10 +37,9 @@ const importObj = { }, }; -export function newInstance(haveSimd: T): T extends true ? WasmSimdContext : WasmContext { - return (haveSimd - ? new WebAssembly.Instance(new WebAssembly.Module(wasmSimdCode), importObj).exports - : new WebAssembly.Instance(new WebAssembly.Module(wasmCode), importObj).exports) as unknown as T extends true - ? WasmSimdContext - : WasmContext; +export function newInstance(useSimd?: boolean): WasmSimdContext | WasmContext { + const enableSimd = useSimd !== undefined ? useSimd : WebAssembly.validate(wasmSimdCode); + return enableSimd + ? (new WebAssembly.Instance(new WebAssembly.Module(wasmSimdCode), importObj).exports as unknown as WasmSimdContext) + : (new WebAssembly.Instance(new WebAssembly.Module(wasmCode), importObj).exports as unknown as WasmContext); } diff --git a/packages/as-sha256/test/perf/index.test.ts b/packages/as-sha256/test/perf/index.test.ts index f916bdc82..6fa0d4650 100644 --- a/packages/as-sha256/test/perf/index.test.ts +++ b/packages/as-sha256/test/perf/index.test.ts @@ -1,5 +1,11 @@ import {itBench, setBenchOpts} from "@dapplion/benchmark"; -import {AssemblyScriptSha256Hasher, byteArrayToHashObject, hashObjectToByteArray} from "../../src/index.js"; +import { + digest, + digest2Bytes32, + digest64HashObjects, + byteArrayToHashObject, + hashObjectToByteArray, +} from "../../src/index.js"; // Feb 2024 Mac M1 // digestTwoHashObjects vs digest64 vs digest @@ -11,11 +17,6 @@ describe("digestTwoHashObjects vs digest64 vs digest", () => { minMs: 60000, }); - let sha256: AssemblyScriptSha256Hasher; - before(async function () { - sha256 = await AssemblyScriptSha256Hasher.initialize(); - }); - const input = Buffer.from("gajindergajindergajindergajindergajindergajindergajindergajinder", "utf8"); const input1 = "gajindergajindergajindergajinder"; const input2 = "gajindergajindergajindergajinder"; @@ -26,31 +27,26 @@ describe("digestTwoHashObjects vs digest64 vs digest", () => { // total number of time running hash for 200000 balances const iterations = 50023; itBench(`digestTwoHashObjects ${iterations} times`, () => { - for (let j = 0; j < iterations; j++) sha256.digest64HashObjects(obj1, obj2); + for (let j = 0; j < iterations; j++) digest64HashObjects(obj1, obj2); }); itBench(`digest2Bytes32 ${iterations} times`, () => { - for (let j = 0; j < iterations; j++) sha256.digest2Bytes32(buffer1, buffer2); + for (let j = 0; j < iterations; j++) digest2Bytes32(buffer1, buffer2); }); itBench(`digest ${iterations} times`, () => { - for (let j = 0; j < iterations; j++) sha256.digest(input); + for (let j = 0; j < iterations; j++) digest(input); }); }); describe("digest different Buffers", () => { - let sha256: AssemblyScriptSha256Hasher; - before(async function () { - sha256 = await AssemblyScriptSha256Hasher.initialize(); - }); - const randomBuffer = (length: number): Uint8Array => Buffer.from(Array.from({length}, () => Math.round(Math.random() * 255))); for (const length of [32, 64, 128, 256, 512, 1024]) { const buffer = randomBuffer(length); itBench(`input length ${length}`, () => { - sha256.digest(buffer); + digest(buffer); }); } }); @@ -65,17 +61,11 @@ describe("digest different Buffers", () => { */ describe("hash - compare to java", () => { // java statistic for same test: https://gist.github.com/scoroberts/a60d61a2cc3afba1e8813b338ecd1501 - - let sha256: AssemblyScriptSha256Hasher; - before(async function () { - sha256 = await AssemblyScriptSha256Hasher.initialize(); - }); - const iterations = 1000000; const input = Buffer.from("lwkjt23uy45pojsdf;lnwo45y23po5i;lknwe;lknasdflnqw3uo5", "utf8"); itBench(`digest ${iterations} times`, () => { - for (let i = 0; i < iterations; i++) sha256.digest(input); + for (let i = 0; i < iterations; i++) digest(input); }); }); diff --git a/packages/as-sha256/test/perf/simd.test.ts b/packages/as-sha256/test/perf/simd.test.ts index ced41e60d..1c3e06a66 100644 --- a/packages/as-sha256/test/perf/simd.test.ts +++ b/packages/as-sha256/test/perf/simd.test.ts @@ -1,5 +1,5 @@ import {itBench, setBenchOpts} from "@dapplion/benchmark"; -import {AssemblyScriptSha256Hasher} from "../../src/index.js"; +import {batchHash4HashObjectInputs, batchHash4UintArray64s, digest64, digest64HashObjects} from "../../src/index.js"; import {byteArrayToHashObject} from "../../src/hashObject.js"; /** @@ -18,35 +18,30 @@ describe("digest64 vs batchHash4UintArray64s vs digest64HashObjects vs batchHash minMs: 10_000, }); - let sha256: AssemblyScriptSha256Hasher; - before(async function () { - sha256 = await AssemblyScriptSha256Hasher.initialize(); - }); - const input = Buffer.from("gajindergajindergajindergajindergajindergajindergajindergajinder", "utf8"); // total number of time running hash for 200000 balances const iterations = 50023; itBench(`digest64 ${iterations * 4} times`, () => { - for (let j = 0; j < iterations * 4; j++) sha256.digest64(input); + for (let j = 0; j < iterations * 4; j++) digest64(input); }); // batchHash4UintArray64s do 4 sha256 in parallel itBench(`hash ${iterations * 4} times using batchHash4UintArray64s`, () => { for (let j = 0; j < iterations; j++) { - sha256.batchHash4UintArray64s([input, input, input, input]); + batchHash4UintArray64s([input, input, input, input]); } }); const hashObject = byteArrayToHashObject(Buffer.from("gajindergajindergajindergajinder", "utf8"), 0); itBench(`digest64HashObjects ${iterations * 4} times`, () => { - for (let j = 0; j < iterations * 4; j++) sha256.digest64HashObjects(hashObject, hashObject); + for (let j = 0; j < iterations * 4; j++) digest64HashObjects(hashObject, hashObject); }); const hashInputs = Array.from({length: 8}, () => hashObject); // batchHash4HashObjectInputs do 4 sha256 in parallel itBench(`hash ${iterations * 4} times using batchHash4HashObjectInputs`, () => { for (let j = 0; j < iterations; j++) { - sha256.batchHash4HashObjectInputs(hashInputs); + batchHash4HashObjectInputs(hashInputs); } }); }); diff --git a/packages/as-sha256/test/unit/getSimdTests.ts b/packages/as-sha256/test/unit/getSimdTests.ts index 2cbeadbb6..3d4af287e 100644 --- a/packages/as-sha256/test/unit/getSimdTests.ts +++ b/packages/as-sha256/test/unit/getSimdTests.ts @@ -11,7 +11,7 @@ export function getSimdTests(sha256: any, useSimd: boolean): void { describe(`as-sha256 SIMD enabled methods ${useSimd ? "with SIMD" : "without SIMD"}`, () => { beforeAll(function () { sha256.reinitializeInstance(useSimd); - expect(sha256.simdEnabled()).to.equal(useSimd); + expect(sha256.simdEnabled).to.equal(useSimd); }); it("testHash4UintArray64s()", () => { const input1 = "gajindergajindergajindergajinder"; diff --git a/packages/as-sha256/test/unit/index.test.ts b/packages/as-sha256/test/unit/index.test.ts index 1351e86f3..ce1fde950 100644 --- a/packages/as-sha256/test/unit/index.test.ts +++ b/packages/as-sha256/test/unit/index.test.ts @@ -1,7 +1,14 @@ -import {describe, it, expect, beforeAll} from "vitest"; +import {describe, it, expect} from "vitest"; import {createHash, randomBytes} from "crypto"; import {Buffer} from "buffer"; -import {AssemblyScriptSha256Hasher, byteArrayToHashObject, hashObjectToByteArray} from "../../src/index.js"; +import { + byteArrayToHashObject, + digest, + digest2Bytes32, + digest64, + digest64HashObjects, + hashObjectToByteArray, +} from "../../src/index.js"; describe("hashObjectToByteArray and byteArrayToHashObject", function () { const tcs = [ @@ -26,11 +33,6 @@ describe("hashObjectToByteArray and byteArrayToHashObject", function () { }); describe("as-sha256 non-SIMD enabled methods", function () { - let sha256: AssemblyScriptSha256Hasher; - beforeAll(async function () { - sha256 = await AssemblyScriptSha256Hasher.initialize(); - }); - describe("digest()", function () { const digestTestCases = [ { @@ -66,7 +68,7 @@ describe("as-sha256 non-SIMD enabled methods", function () { if (expectedInputLength) { expect(inputBuffer.length).to.be.equal(expectedInputLength, "Invalid input buffer length"); } - const output = sha256.digest(inputBuffer); + const output = digest(inputBuffer); expect(Buffer.from(output).toString("hex")).to.be.equal(expected, "Invalid digest"); }); } @@ -74,22 +76,22 @@ describe("as-sha256 non-SIMD enabled methods", function () { it("digest64()", function () { const input = Buffer.alloc(64, "lodestar"); - const output = Buffer.from(sha256.digest64(input)).toString("hex"); + const output = Buffer.from(digest64(input)).toString("hex"); const expected = createHash("sha256").update(input).digest("hex"); expect(output).to.equal(expected); }); it("digest() and digest64() output matches", function () { const input = Buffer.from("harkamalharkamalharkamalharkamalharkamalharkamalharkamalharkamal", "utf8"); - const output = Buffer.from(sha256.digest(input)).toString("hex"); - const output64 = Buffer.from(sha256.digest64(input)).toString("hex"); + const output = Buffer.from(digest(input)).toString("hex"); + const output64 = Buffer.from(digest64(input)).toString("hex"); expect(output).to.be.equal(output64); }); it("digest2Bytes32()", function () { const input1 = randomBytes(32); const input2 = randomBytes(32); - const output = Buffer.from(sha256.digest2Bytes32(input1, input2)).toString("hex"); + const output = Buffer.from(digest2Bytes32(input1, input2)).toString("hex"); const expectedOutput = createHash("sha256") .update(Buffer.of(...input1, ...input2)) .digest("hex"); @@ -99,9 +101,9 @@ describe("as-sha256 non-SIMD enabled methods", function () { it("digest2Bytes32() matches digest64()", function () { const input1 = Buffer.alloc(32, "*"); const input2 = Buffer.alloc(32, "*"); - const digestBytes32 = sha256.digest2Bytes32(input1, input2); + const digestBytes32 = digest2Bytes32(input1, input2); expect(digestBytes32).to.be.deep.equal( - sha256.digest64(Buffer.of(...input1, ...input2)), + digest64(Buffer.of(...input1, ...input2)), "incorrect digest2Bytes32 result" ); }); @@ -112,7 +114,7 @@ describe("as-sha256 non-SIMD enabled methods", function () { const input2 = randomBytes(32); const obj2 = byteArrayToHashObject(input2, 0); - const outputObj = sha256.digest64HashObjects(obj1, obj2); + const outputObj = digest64HashObjects(obj1, obj2); const outputArray = new Uint8Array(32); hashObjectToByteArray(outputObj, outputArray, 0); const output = Buffer.from(outputArray).toString("hex"); @@ -127,11 +129,11 @@ describe("as-sha256 non-SIMD enabled methods", function () { it("digest64HashObject() and digest2Bytes32() output matches", function () { const input1 = Buffer.from("gajindergajindergajindergajinder", "utf8"); const input2 = Buffer.from("gajindergajindergajindergajinder", "utf8"); - const output = sha256.digest2Bytes32(input1, input2); + const output = digest2Bytes32(input1, input2); const inputObj1 = byteArrayToHashObject(input1, 0); const inputObj2 = byteArrayToHashObject(input2, 0); - const outputObj = sha256.digest64HashObjects(inputObj1, inputObj2); + const outputObj = digest64HashObjects(inputObj1, inputObj2); const outputByteArray = new Uint8Array(32); hashObjectToByteArray(outputObj, outputByteArray, 0); diff --git a/packages/as-sha256/test/unit/noSimd.test.ts b/packages/as-sha256/test/unit/noSimd.test.ts index 04aaa75cb..1d524567c 100644 --- a/packages/as-sha256/test/unit/noSimd.test.ts +++ b/packages/as-sha256/test/unit/noSimd.test.ts @@ -1,6 +1,5 @@ -import {AssemblyScriptSha256Hasher} from "../../src/index.js"; +import * as sha256 from "../../src/index.js"; import {getSimdTests} from "./getSimdTests.js"; const useSimd = false; -const sha256 = await AssemblyScriptSha256Hasher.initialize(useSimd); getSimdTests(sha256, useSimd); diff --git a/packages/as-sha256/test/unit/simd.test.ts b/packages/as-sha256/test/unit/simd.test.ts index 6e4d2600e..cc5eb7116 100644 --- a/packages/as-sha256/test/unit/simd.test.ts +++ b/packages/as-sha256/test/unit/simd.test.ts @@ -1,6 +1,5 @@ -import {AssemblyScriptSha256Hasher} from "../../src/index.js"; +import * as sha256 from "../../src/index.js"; import {getSimdTests} from "./getSimdTests.js"; const useSimd = true; -const sha256 = await AssemblyScriptSha256Hasher.initialize(useSimd); getSimdTests(sha256, useSimd); From e557f18b8f2cdac6c4c41978cd3e1279889c1483 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Tue, 7 Jan 2025 20:27:15 +0700 Subject: [PATCH 40/47] chore: remove wasm-feature-detect --- packages/as-sha256/package.json | 5 +---- yarn.lock | 5 ----- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/as-sha256/package.json b/packages/as-sha256/package.json index b0a0e3d27..484e7fba5 100644 --- a/packages/as-sha256/package.json +++ b/packages/as-sha256/package.json @@ -45,12 +45,9 @@ "benchmark:local": "yarn benchmark --local", "test:ci": "yarn test:as-ci" }, - "dependencies": { - "wasm-feature-detect": "^1.8.0" - }, "devDependencies": { "@chainsafe/babel-plugin-inline-binary-import": "^1.0.3", "assemblyscript": "^0.27.24", "benchmark": "^2.1.4" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 2d5079bad..8ceb785d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13888,11 +13888,6 @@ wait-port@^1.1.0: commander "^9.3.0" debug "^4.3.4" -wasm-feature-detect@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz#4e9f55b0a64d801f372fbb0324ed11ad3abd0c78" - integrity sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ== - watchpack-chokidar2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" From 1142c080aede57533e1564556001e8c17668ac30 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Tue, 7 Jan 2025 20:27:36 +0700 Subject: [PATCH 41/47] feat: remove async init from persistent-merkle-tree --- .../src/hasher/as-sha256.ts | 54 ++++++------------- .../src/hasher/index.ts | 5 +- .../src/hasher/types.ts | 2 - .../test/perf/hasher.test.ts | 8 --- .../test/unit/hasher.test.ts | 10 +--- 5 files changed, 19 insertions(+), 60 deletions(-) diff --git a/packages/persistent-merkle-tree/src/hasher/as-sha256.ts b/packages/persistent-merkle-tree/src/hasher/as-sha256.ts index 8a6a857bb..2eb26d1b1 100644 --- a/packages/persistent-merkle-tree/src/hasher/as-sha256.ts +++ b/packages/persistent-merkle-tree/src/hasher/as-sha256.ts @@ -1,10 +1,15 @@ -import {HashObject, AssemblyScriptSha256Hasher} from "@chainsafe/as-sha256"; +import { + digest2Bytes32, + digest64HashObjectsInto, + digest64HashObjects, + batchHash4HashObjectInputs, + hashInto, +} from "@chainsafe/as-sha256"; import type {Hasher} from "./types.js"; import {Node} from "../node.js"; import type {HashComputationLevel} from "../hashComputation.js"; import {BLOCK_SIZE, doDigestNLevel, doMerkleizeBlockArray, doMerkleizeBlocksBytes} from "./util.js"; -let sha256: undefined | AssemblyScriptSha256Hasher; /** * hashInto() function of as-sha256 loop through every 256 bytes * This is the same to hashInto() function of as-sha256 https://github.com/ChainSafe/ssz/blob/cf3e1f038c8bf7cba1bb27c38540e50b0391d0e6/packages/as-sha256/src/index.ts#L270 @@ -13,43 +18,18 @@ const buffer = new Uint8Array(4 * BLOCK_SIZE); export const hasher: Hasher = { name: "as-sha256", - async initialize() { - sha256 = await AssemblyScriptSha256Hasher.initialize(); - }, - digest64(a32Bytes: Uint8Array, b32Bytes: Uint8Array): Uint8Array { - if (!sha256) { - throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); - } - return sha256.digest2Bytes32(a32Bytes, b32Bytes); - }, - digest64HashObjects(left: HashObject, right: HashObject, parent: HashObject): void { - if (!sha256) { - throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); - } - return sha256.digest64HashObjectsInto(left, right, parent); - }, + digest64: digest2Bytes32, + digest64HashObjects: digest64HashObjectsInto, merkleizeBlocksBytes(blocksBytes: Uint8Array, padFor: number, output: Uint8Array, offset: number): void { - if (!sha256) { - throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); - } - return doMerkleizeBlocksBytes(blocksBytes, padFor, output, offset, sha256.hashInto.bind(sha256)); + return doMerkleizeBlocksBytes(blocksBytes, padFor, output, offset, hashInto); }, merkleizeBlockArray(blocks, blockLimit, padFor, output, offset) { - if (!sha256) { - throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); - } - return doMerkleizeBlockArray(blocks, blockLimit, padFor, output, offset, sha256.hashInto.bind(sha256), buffer); + return doMerkleizeBlockArray(blocks, blockLimit, padFor, output, offset, hashInto, buffer); }, digestNLevel(data: Uint8Array, nLevel: number): Uint8Array { - if (!sha256) { - throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); - } - return doDigestNLevel(data, nLevel, sha256.hashInto.bind(sha256)); + return doDigestNLevel(data, nLevel, hashInto); }, executeHashComputations: (hashComputations: HashComputationLevel[]) => { - if (!sha256) { - throw new Error("Must initialize AssemblyScriptSha256Hasher before use"); - } for (let level = hashComputations.length - 1; level >= 0; level--) { const hcArr = hashComputations[level]; if (!hcArr) { @@ -116,7 +96,7 @@ export const hasher: Hasher = { dest3 !== null ) { // TODO - batch: find a way not allocate here - const [o0, o1, o2, o3] = sha256.batchHash4HashObjectInputs([ + const [o0, o1, o2, o3] = batchHash4HashObjectInputs([ src0_0, src1_0, src0_1, @@ -157,16 +137,16 @@ export const hasher: Hasher = { // remaining if (src0_0 !== null && src1_0 !== null && dest0 !== null) { - dest0.applyHash(sha256.digest64HashObjects(src0_0, src1_0)); + dest0.applyHash(digest64HashObjects(src0_0, src1_0)); } if (src0_1 !== null && src1_1 !== null && dest1 !== null) { - dest1.applyHash(sha256.digest64HashObjects(src0_1, src1_1)); + dest1.applyHash(digest64HashObjects(src0_1, src1_1)); } if (src0_2 !== null && src1_2 !== null && dest2 !== null) { - dest2.applyHash(sha256.digest64HashObjects(src0_2, src1_2)); + dest2.applyHash(digest64HashObjects(src0_2, src1_2)); } if (src0_3 !== null && src1_3 !== null && dest3 !== null) { - dest3.applyHash(sha256.digest64HashObjects(src0_3, src1_3)); + dest3.applyHash(digest64HashObjects(src0_3, src1_3)); } } }, diff --git a/packages/persistent-merkle-tree/src/hasher/index.ts b/packages/persistent-merkle-tree/src/hasher/index.ts index b69d7f8a2..0aaadb9d4 100644 --- a/packages/persistent-merkle-tree/src/hasher/index.ts +++ b/packages/persistent-merkle-tree/src/hasher/index.ts @@ -15,10 +15,7 @@ export let hasher: Hasher = nobleHasher; * * WARNING: This function is intended for power users and must be executed before any other SSZ code is imported */ -export async function setHasher(newHasher: Hasher): Promise { - if (typeof newHasher.initialize === "function") { - await newHasher.initialize(); - } +export function setHasher(newHasher: Hasher): void { hasher = newHasher; } diff --git a/packages/persistent-merkle-tree/src/hasher/types.ts b/packages/persistent-merkle-tree/src/hasher/types.ts index e0a3d2d4c..37327fa48 100644 --- a/packages/persistent-merkle-tree/src/hasher/types.ts +++ b/packages/persistent-merkle-tree/src/hasher/types.ts @@ -6,8 +6,6 @@ export type {HashObject}; export type Hasher = { // name of the hashing library name: string; - // as-sha256 has an async initialization. must run this to detect correct bindings - initialize?: () => Promise; /** * Hash two 32-byte Uint8Arrays */ diff --git a/packages/persistent-merkle-tree/test/perf/hasher.test.ts b/packages/persistent-merkle-tree/test/perf/hasher.test.ts index 70668a59b..62c2faa55 100644 --- a/packages/persistent-merkle-tree/test/perf/hasher.test.ts +++ b/packages/persistent-merkle-tree/test/perf/hasher.test.ts @@ -22,14 +22,6 @@ describe("hasher", function () { const hashers: Hasher[] = [hashtreeHasher, asSha256Hasher, nobleHasher]; - before(async function () { - for (const hasher of hashers) { - if (typeof hasher.initialize === "function") { - await hasher.initialize(); - } - } - }); - const runsFactor = 10; for (const hasher of hashers) { describe(hasher.name, () => { diff --git a/packages/persistent-merkle-tree/test/unit/hasher.test.ts b/packages/persistent-merkle-tree/test/unit/hasher.test.ts index ed092e611..4ddf66ba9 100644 --- a/packages/persistent-merkle-tree/test/unit/hasher.test.ts +++ b/packages/persistent-merkle-tree/test/unit/hasher.test.ts @@ -1,4 +1,4 @@ -import {describe, it, expect, beforeAll} from "vitest"; +import {describe, it, expect} from "vitest"; import {expectEqualHex} from "../utils/expectHex.js"; import {uint8ArrayToHashObject, hashObjectToUint8Array} from "../../src/hasher/util.js"; @@ -19,14 +19,6 @@ import {zeroHash} from "../../src/zeroHash.js"; describe("hashers", function () { const hashers: Hasher[] = [hashtreeHasher, asSha256Hasher, nobleHasher]; - beforeAll(async function () { - for (const hasher of hashers) { - if (typeof hasher.initialize === "function") { - await hasher.initialize(); - } - } - }); - describe("digest64 vs digest64HashObjects methods should be the same", () => { for (const hasher of hashers) { it(`${hasher.name} hasher`, () => { From 098a8a42e390b56ad4dfdb47eab008514a07aa47 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Tue, 7 Jan 2025 20:31:32 +0700 Subject: [PATCH 42/47] refactor: lint changes --- packages/as-sha256/src/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 53a22c165..073312529 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -233,7 +233,7 @@ export function batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { inputUint32Array[62] = inputs[5].h7; inputUint32Array[63] = inputs[7].h7; - (ctx as WasmSimdContext).batchHash4HashObjectInputs(wasmOutputValue); + ctx.batchHash4HashObjectInputs(wasmOutputValue); const output0 = byteArrayToHashObject(outputUint8Array, 0); const output1 = byteArrayToHashObject(outputUint8Array, 32); @@ -274,7 +274,7 @@ export function batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { inputUint8Array.set(inputs[2], 128); inputUint8Array.set(inputs[3], 192); - (ctx as WasmSimdContext).batchHash4UintArray64s(wasmOutputValue); + ctx.batchHash4UintArray64s(wasmOutputValue); const output0 = allocDigest(); const output1 = allocDigestOffset(32); @@ -302,7 +302,7 @@ export function hashInto(input: Uint8Array, output: Uint8Array): void { const num256ByteChunks = Math.floor(input.length / 256); for (let i = 0; i < num256ByteChunks; i++) { inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); - (ctx as WasmSimdContext).batchHash4UintArray64s(wasmOutputValue); + ctx.batchHash4UintArray64s(wasmOutputValue); output.set(outputUint8Array.subarray(0, 128), i * 128); } num64ByteChunksHashed = num256ByteChunks * 4; From c09534b55bfb6bdcd24f9e53f638aab0e2b886c4 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Tue, 7 Jan 2025 20:33:44 +0700 Subject: [PATCH 43/47] fix: remove await --- packages/persistent-merkle-tree/test/perf/hasher.test.ts | 2 +- setHasher.mjs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/persistent-merkle-tree/test/perf/hasher.test.ts b/packages/persistent-merkle-tree/test/perf/hasher.test.ts index 62c2faa55..85f0f99ba 100644 --- a/packages/persistent-merkle-tree/test/perf/hasher.test.ts +++ b/packages/persistent-merkle-tree/test/perf/hasher.test.ts @@ -97,7 +97,7 @@ describe("hashtree", function () { id: "get root", beforeEach: async () => { const [tree] = buildComparisonTrees(16); - await setHasher(hashtreeHasher); + setHasher(hashtreeHasher); return tree; }, fn: (tree) => { diff --git a/setHasher.mjs b/setHasher.mjs index c146a3e9e..24b27a27d 100644 --- a/setHasher.mjs +++ b/setHasher.mjs @@ -2,6 +2,6 @@ // Used to run benchmarks with with visibility into hashtree performance, useful for Lodestar import {setHasher} from "@chainsafe/persistent-merkle-tree/lib/hasher/index.js"; import {hasher} from "@chainsafe/persistent-merkle-tree/lib/hasher/hashtree.js"; -await setHasher(hasher); +setHasher(hasher); export {}; From e3362ac6b43a2559d79f6c9f6a54e822057652d7 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 9 Jan 2025 22:00:36 +0700 Subject: [PATCH 44/47] feat: move non-simd aware code to AssemblyScript for hashInto and batchHash4UintArray64s --- packages/as-sha256/assembly/index.simd.ts | 14 +- packages/as-sha256/assembly/index.ts | 22 +- packages/as-sha256/build/optimized.wasm | Bin 4198 -> 4268 bytes packages/as-sha256/build/optimized.wat | 453 ++++---- packages/as-sha256/build/untouched.wasm | Bin 6638 -> 6721 bytes packages/as-sha256/build/untouched.wat | 1219 +++++++++++---------- packages/as-sha256/src/index.ts | 33 +- packages/as-sha256/src/wasm.ts | 2 +- packages/as-sha256/src/wasmCode.ts | 2 +- 9 files changed, 894 insertions(+), 851 deletions(-) diff --git a/packages/as-sha256/assembly/index.simd.ts b/packages/as-sha256/assembly/index.simd.ts index a529d32ed..421e6ef0a 100644 --- a/packages/as-sha256/assembly/index.simd.ts +++ b/packages/as-sha256/assembly/index.simd.ts @@ -12,22 +12,12 @@ import { store32, load32be, wPtr, - inputPtr + inputPtr, } from "./common"; export const HAS_SIMD = true; -export { - INPUT_LENGTH, - PARALLEL_FACTOR, - input, - output, - init, - update, - final, - digest, - digest64 -}; +export {INPUT_LENGTH, PARALLEL_FACTOR, input, output, init, update, final, digest, digest64}; /** * Hash 4 inputs of exactly 64 bytes each diff --git a/packages/as-sha256/assembly/index.ts b/packages/as-sha256/assembly/index.ts index f24a0fd4e..7ecacf41e 100644 --- a/packages/as-sha256/assembly/index.ts +++ b/packages/as-sha256/assembly/index.ts @@ -1,13 +1,13 @@ +import {INPUT_LENGTH, PARALLEL_FACTOR, input, output, init, update, final, digest, digest64, inputPtr} from "./common"; + export const HAS_SIMD = false; -export { - INPUT_LENGTH, - PARALLEL_FACTOR, - input, - output, - init, - update, - final, - digest, - digest64 -} from "./common"; +export {INPUT_LENGTH, PARALLEL_FACTOR, input, output, init, update, final, digest, digest64}; + +export function batchHash4UintArray64s(outPtr: usize): void { + for (let i = 0; i < 4; i++) { + const inOffset = changetype(i * 64); + const outOffset = changetype(i * 32); + digest64(inputPtr + inOffset, outPtr + outOffset); + } +} diff --git a/packages/as-sha256/build/optimized.wasm b/packages/as-sha256/build/optimized.wasm index 5010d73c2975b8333e3cf6920ce4e5edc3e9192d..731df0a04ac07a40775a5df53276059313b82df8 100644 GIT binary patch delta 1461 zcmb7EO>7%Q6rP#=@z1R7wc|K(>?GrTQ`B%lpeTwEA|62@5vGmOlxu2epx)p#&Tgax zkTwV*aVUbYfPe!MQpEufmz1>B;cej18Fdq=tS-H4+ zWqqS{;o{Tl%LXm1sx{SWU1)7QrJh*7v}O>iv%Rwy8Z-8dy-)*TcD6eq;r8CnwRX5k ziq?yr?e@#0WMAvNv>AkCY$iQG3-hF4cQ?B?b`Kay)3QTL+0#n-_(S@UNhjim?6=Jc z4ioW-U7?flPxf4)D%g2O)N4Iu`o65jh1AqDrh4<&Pk(t;TI#R6x9=FzR^R^l-50OO zl)888o3|{PRyTkA;O7IGQC}Xvb4q1aef-HAzgdziB0YS7-!UkSz?4qBld2bSt86r( ztlSl|DF~F~&r(axvZB63hMX&Rcz!~L4vK}oc2w?`hRCqLN{y~!k)EaHxS4K5BdLOzRamM>a-3psN{S#hA)<;vX{g)#M6ajK*;O9@E-_TI#7KobY~Pbx0r8 zMD#Rxd~mpUX?TcZr>Vuavf`05LPMve#OYrd^yL`0I0%bsnDP)mtg9Qjhi9{rkh$Iq`L?V(%L=uVeTKQR2z6cGs#Mg-WK6}2!h-B*h9RA>>p?)vm t*JVSi*K!gobhB~_resYWrV-YmE~oJ?72yob$XO*22@tYz{D+M|J z9a;;{h25b6ExWhV8#3S7y?B0exWx*&7kfLKudtGHzW35rG-SdXfyIYe+39cfFT8q* zGY={Ol=C<1m4mP06B}ldXPo!vW_+BHOp8!VwYi2x9!M_PA{W?5?l||CW+lImGyTRu z+hM3?lLy?{6FL3PFQ5PXx^ncL+t+Vd%GKZf{==8ADNq0T#kcR~)Rcbj=Epx>Qh9y# z;PPEizW(&Hw|~v4Kr@B(SN<&vAWkm3%^C)(N=r4XgEcKy?T%zvOTKrPJ2efVss-Tt zT8!g2*qEUCFf>Fhwhg2crZabPmOSn)KrMN}YsC|#vaKddwIQtlXqgeKINb*A>`Bo6 zUPSN4UKE-&EDx|k^EetrA*oTv0ui|(7E)q;FTx`6N^L%nV4^fg{>UJTLUjl$s)}V* z!D&@Sf%Q;LV@U}tsuC7d5$kv;R0X9^`x^-xaIlb7?&r4M;}EWJF?%ha5-tlo#m%rVSG&_`v0OQ*&`Qp_AI=>+oFz2l5Y z%Ngl!70mvWw=_zNn^bb2e!MS=i+qXpRN5LE{KV*nl3~tFjVl}jYyz$U9s$pQfWVXi zf$p`KnwPnJ$lVdA)BFT)+h-wItNSmTDh7Sa{3&3-#~* A7XSbN diff --git a/packages/as-sha256/build/optimized.wat b/packages/as-sha256/build/optimized.wat index e157cd2f0..2cb2d3f91 100644 --- a/packages/as-sha256/build/optimized.wat +++ b/packages/as-sha256/build/optimized.wat @@ -1,13 +1,12 @@ (module (type $0 (func (param i32 i32))) - (type $1 (func (param i32) (result i32))) - (type $2 (func (param i32))) + (type $1 (func (param i32))) + (type $2 (func (param i32) (result i32))) (type $3 (func (param i32 i32) (result i32))) (type $4 (func)) (type $5 (func (param i32 i32 i32 i32))) (type $6 (func (param i32 i32 i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (global $assembly/index/HAS_SIMD i32 (i32.const 0)) (global $assembly/common/PARALLEL_FACTOR i32 (i32.const 4)) (global $assembly/common/INPUT_LENGTH i32 (i32.const 512)) (global $assembly/common/kPtr (mut i32) (i32.const 0)) @@ -44,6 +43,7 @@ (global $assembly/common/outputPtr (mut i32) (i32.const 0)) (global $assembly/common/mLength (mut i32) (i32.const 0)) (global $assembly/common/bytesHashed (mut i32) (i32.const 0)) + (global $assembly/index/HAS_SIMD i32 (i32.const 0)) (memory $0 1) (data $0 (i32.const 1036) "\1c\01") (data $0.1 (i32.const 1048) "\01\00\00\00\00\01\00\00\98/\8aB\91D7q\cf\fb\c0\b5\a5\db\b5\e9[\c2V9\f1\11\f1Y\a4\82?\92\d5^\1c\ab\98\aa\07\d8\01[\83\12\be\851$\c3}\0cUt]\ber\fe\b1\de\80\a7\06\dc\9bt\f1\9b\c1\c1i\9b\e4\86G\be\ef\c6\9d\c1\0f\cc\a1\0c$o,\e9-\aa\84tJ\dc\a9\b0\\\da\88\f9vRQ>\98m\c61\a8\c8\'\03\b0\c7\7fY\bf\f3\0b\e0\c6G\91\a7\d5Qc\ca\06g))\14\85\n\b7\'8!\1b.\fcm,M\13\r8STs\ne\bb\njv.\c9\c2\81\85,r\92\a1\e8\bf\a2Kf\1a\a8p\8bK\c2\a3Ql\c7\19\e8\92\d1$\06\99\d6\855\0e\f4p\a0j\10\16\c1\a4\19\08l7\1eLwH\'\b5\bc\b04\b3\0c\1c9J\aa\d8NO\ca\9c[\f3o.h\ee\82\8ftoc\a5x\14x\c8\84\08\02\c7\8c\fa\ff\be\90\eblP\a4\f7\a3\f9\be\f2xq\c6") @@ -64,6 +64,7 @@ (data $8 (i32.const 1948) "<") (data $8.1 (i32.const 1960) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (export "HAS_SIMD" (global $assembly/index/HAS_SIMD)) + (export "batchHash4UintArray64s" (func $assembly/index/batchHash4UintArray64s)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) @@ -1163,6 +1164,232 @@ i32.add global.set $assembly/common/H7 ) + (func $assembly/common/hashPreCompW (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h + i32.const 0 + global.set $assembly/common/i + loop $for-loop|0 + global.get $assembly/common/i + i32.const 64 + i32.lt_u + if + local.get $0 + global.get $assembly/common/i + i32.const 2 + i32.shl + i32.add + i32.load + global.get $assembly/common/h + global.get $assembly/common/e + local.tee $1 + i32.const 6 + i32.rotr + local.get $1 + i32.const 11 + i32.rotr + i32.xor + local.get $1 + i32.const 25 + i32.rotr + i32.xor + i32.add + global.get $assembly/common/e + local.tee $1 + global.get $assembly/common/f + i32.and + global.get $assembly/common/g + local.get $1 + i32.const -1 + i32.xor + i32.and + i32.xor + i32.add + i32.add + global.set $assembly/common/t1 + global.get $assembly/common/a + local.tee $1 + i32.const 2 + i32.rotr + local.get $1 + i32.const 13 + i32.rotr + i32.xor + local.get $1 + i32.const 22 + i32.rotr + i32.xor + global.get $assembly/common/b + local.tee $2 + global.get $assembly/common/c + local.tee $1 + i32.and + local.get $2 + global.get $assembly/common/a + local.tee $2 + i32.and + local.get $1 + local.get $2 + i32.and + i32.xor + i32.xor + i32.add + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 + i32.add + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 + i32.add + global.set $assembly/common/a + global.get $assembly/common/i + i32.const 1 + i32.add + global.set $assembly/common/i + br $for-loop|0 + end + end + global.get $assembly/common/H0 + global.get $assembly/common/a + i32.add + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b + i32.add + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c + i32.add + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d + i32.add + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e + i32.add + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f + i32.add + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g + i32.add + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h + i32.add + global.set $assembly/common/H7 + ) + (func $~lib/polyfills/bswap (param $0 i32) (result i32) + local.get $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + ) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) + call $assembly/common/init + global.get $assembly/common/wPtr + local.get $0 + call $assembly/common/hashBlocks + global.get $assembly/common/w64Ptr + call $assembly/common/hashPreCompW + local.get $1 + global.get $assembly/common/H0 + call $~lib/polyfills/bswap + i32.store + local.get $1 + global.get $assembly/common/H1 + call $~lib/polyfills/bswap + i32.store offset=4 + local.get $1 + global.get $assembly/common/H2 + call $~lib/polyfills/bswap + i32.store offset=8 + local.get $1 + global.get $assembly/common/H3 + call $~lib/polyfills/bswap + i32.store offset=12 + local.get $1 + global.get $assembly/common/H4 + call $~lib/polyfills/bswap + i32.store offset=16 + local.get $1 + global.get $assembly/common/H5 + call $~lib/polyfills/bswap + i32.store offset=20 + local.get $1 + global.get $assembly/common/H6 + call $~lib/polyfills/bswap + i32.store offset=24 + local.get $1 + global.get $assembly/common/H7 + call $~lib/polyfills/bswap + i32.store offset=28 + ) + (func $assembly/index/batchHash4UintArray64s (param $0 i32) + (local $1 i32) + loop $for-loop|0 + local.get $1 + i32.const 4 + i32.lt_s + if + global.get $assembly/common/inputPtr + local.get $1 + i32.const 6 + i32.shl + i32.add + local.get $0 + local.get $1 + i32.const 5 + i32.shl + i32.add + call $assembly/common/digest64 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + ) (func $assembly/common/update (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -1260,19 +1487,6 @@ global.set $assembly/common/mLength end ) - (func $~lib/polyfills/bswap (param $0 i32) (result i32) - local.get $0 - i32.const -16711936 - i32.and - i32.const 8 - i32.rotl - local.get $0 - i32.const 16711935 - i32.and - i32.const 8 - i32.rotr - i32.or - ) (func $assembly/common/final (param $0 i32) (local $1 i32) (local $2 i32) @@ -1372,48 +1586,48 @@ global.get $assembly/common/bytesHashed i32.const 536870912 i32.div_s - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=56 global.get $assembly/common/mPtr global.get $assembly/common/bytesHashed i32.const 3 i32.shl - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=60 global.get $assembly/common/wPtr global.get $assembly/common/mPtr call $assembly/common/hashBlocks local.get $0 global.get $assembly/common/H0 - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store local.get $0 global.get $assembly/common/H1 - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=4 local.get $0 global.get $assembly/common/H2 - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=8 local.get $0 global.get $assembly/common/H3 - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=12 local.get $0 global.get $assembly/common/H4 - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=16 local.get $0 global.get $assembly/common/H5 - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=20 local.get $0 global.get $assembly/common/H6 - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=24 local.get $0 global.get $assembly/common/H7 - call $~lib/polyfills/bswap + call $~lib/polyfills/bswap i32.store offset=28 ) (func $assembly/common/digest (param $0 i32) @@ -1424,193 +1638,6 @@ global.get $assembly/common/outputPtr call $assembly/common/final ) - (func $assembly/common/hashPreCompW (param $0 i32) - (local $1 i32) - (local $2 i32) - global.get $assembly/common/H0 - global.set $assembly/common/a - global.get $assembly/common/H1 - global.set $assembly/common/b - global.get $assembly/common/H2 - global.set $assembly/common/c - global.get $assembly/common/H3 - global.set $assembly/common/d - global.get $assembly/common/H4 - global.set $assembly/common/e - global.get $assembly/common/H5 - global.set $assembly/common/f - global.get $assembly/common/H6 - global.set $assembly/common/g - global.get $assembly/common/H7 - global.set $assembly/common/h - i32.const 0 - global.set $assembly/common/i - loop $for-loop|0 - global.get $assembly/common/i - i32.const 64 - i32.lt_u - if - local.get $0 - global.get $assembly/common/i - i32.const 2 - i32.shl - i32.add - i32.load - global.get $assembly/common/h - global.get $assembly/common/e - local.tee $1 - i32.const 6 - i32.rotr - local.get $1 - i32.const 11 - i32.rotr - i32.xor - local.get $1 - i32.const 25 - i32.rotr - i32.xor - i32.add - global.get $assembly/common/e - local.tee $1 - global.get $assembly/common/f - i32.and - global.get $assembly/common/g - local.get $1 - i32.const -1 - i32.xor - i32.and - i32.xor - i32.add - i32.add - global.set $assembly/common/t1 - global.get $assembly/common/a - local.tee $1 - i32.const 2 - i32.rotr - local.get $1 - i32.const 13 - i32.rotr - i32.xor - local.get $1 - i32.const 22 - i32.rotr - i32.xor - global.get $assembly/common/b - local.tee $2 - global.get $assembly/common/c - local.tee $1 - i32.and - local.get $2 - global.get $assembly/common/a - local.tee $2 - i32.and - local.get $1 - local.get $2 - i32.and - i32.xor - i32.xor - i32.add - global.set $assembly/common/t2 - global.get $assembly/common/g - global.set $assembly/common/h - global.get $assembly/common/f - global.set $assembly/common/g - global.get $assembly/common/e - global.set $assembly/common/f - global.get $assembly/common/d - global.get $assembly/common/t1 - i32.add - global.set $assembly/common/e - global.get $assembly/common/c - global.set $assembly/common/d - global.get $assembly/common/b - global.set $assembly/common/c - global.get $assembly/common/a - global.set $assembly/common/b - global.get $assembly/common/t1 - global.get $assembly/common/t2 - i32.add - global.set $assembly/common/a - global.get $assembly/common/i - i32.const 1 - i32.add - global.set $assembly/common/i - br $for-loop|0 - end - end - global.get $assembly/common/H0 - global.get $assembly/common/a - i32.add - global.set $assembly/common/H0 - global.get $assembly/common/H1 - global.get $assembly/common/b - i32.add - global.set $assembly/common/H1 - global.get $assembly/common/H2 - global.get $assembly/common/c - i32.add - global.set $assembly/common/H2 - global.get $assembly/common/H3 - global.get $assembly/common/d - i32.add - global.set $assembly/common/H3 - global.get $assembly/common/H4 - global.get $assembly/common/e - i32.add - global.set $assembly/common/H4 - global.get $assembly/common/H5 - global.get $assembly/common/f - i32.add - global.set $assembly/common/H5 - global.get $assembly/common/H6 - global.get $assembly/common/g - i32.add - global.set $assembly/common/H6 - global.get $assembly/common/H7 - global.get $assembly/common/h - i32.add - global.set $assembly/common/H7 - ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) - call $assembly/common/init - global.get $assembly/common/wPtr - local.get $0 - call $assembly/common/hashBlocks - global.get $assembly/common/w64Ptr - call $assembly/common/hashPreCompW - local.get $1 - global.get $assembly/common/H0 - call $~lib/polyfills/bswap - i32.store - local.get $1 - global.get $assembly/common/H1 - call $~lib/polyfills/bswap - i32.store offset=4 - local.get $1 - global.get $assembly/common/H2 - call $~lib/polyfills/bswap - i32.store offset=8 - local.get $1 - global.get $assembly/common/H3 - call $~lib/polyfills/bswap - i32.store offset=12 - local.get $1 - global.get $assembly/common/H4 - call $~lib/polyfills/bswap - i32.store offset=16 - local.get $1 - global.get $assembly/common/H5 - call $~lib/polyfills/bswap - i32.store offset=20 - local.get $1 - global.get $assembly/common/H6 - call $~lib/polyfills/bswap - i32.store offset=24 - local.get $1 - global.get $assembly/common/H7 - call $~lib/polyfills/bswap - i32.store offset=28 - ) (func $~start i32.const 1348 i32.load diff --git a/packages/as-sha256/build/untouched.wasm b/packages/as-sha256/build/untouched.wasm index 82cec8ce245d31f28eb007b9a29e506c99448647..3bc1a4c3580fd5c173762a155627c0799632eb94 100644 GIT binary patch delta 1688 zcmbtUU1%It6u$S)&;HE*%>K@9Hk;g=bN46NZDVUp{Xvq8rcE_XOPeA-)o5#*X_D4v z3yD5VL_{qGErVdC*cU<2H-myzFygBZ{yhjH{(+S~h=^|%>Y3SO3Ha#3-gD-D=X~e8 z_netO?*44-wf$^#_m$~dStnGdMAw;a(DRg1L!*S6f6~z_mu`B*@`(C7Vnr^~M08pm zJ8|sbp@+3y#V6-GPo0^bUpX^&d||nxE?k&j8y{OC!-<2lM~=^(n3 znwgoJIk8_oG!#sDf6F9^A!tz3gNb}DLx2Zwk_5cXZ>_Jxw|M|qI*MFdoGetPPZ4u7W)*}RnO{D=8S5y5IvHRqp zB5IS^LIQx4_^{4^E#h+xYO<~f=;$|~A)DxH=nuoN9IztTaqH7}?|D|n)t$FLdfAYcy8PAa->u1ndT-;^+f*ji)i+=G(U2)c zWDEao>lcGIJc!7&|3tDMMM+1S1V`Bi^+`6#iAaJYQq1F2FmU|q$!l##QCB(%YFWzO zirysK;e8lhVIC$BVPnGS)Lqo^-$+$){V=r$*WXjMfgKdv1w#rbG7oZoE8Q2%i2=xq zK`8jMY3DIR2qYfjf)6Ryahr@Jh~9$Ax~P=culcYT#~CRxE5DeFe^mr zV2cK1{7=%Q`^r#|Maatn;5wrv&z4Z<#IAv9*Rk8!V?|I-#BTUM=POzi?H#l+wADgIi=%x2 zt%dgSLd8qi4Uyv+o(&}P+&IJA4OsHZ6a`2kTI6|N2+?8>byP%@Acbg|JG>O4;i7XXRS9J1aM`6%S`cIK04%VPBoC zt`kvGnkWNKkm%zjUJlW|9$Hbl=m(rDQRNlhAEMPBI-m^v5(Lx6`2ZgbQQkuZPTNp8 eZNP;;mvc0nEq^&zj5Tq#M_|NmZ+u>8>Hh+MKRl!W delta 1754 zcmbVMOK4nW6#oDJKIZYyl0)ZC$C9N^8kYUt^|_ z>f#1P5vh-IaiLUKf}lIIvRzpBf>vB8QWOOXE=0tg1wHr9OiZ^9%sJe?bW-%UkRC5m&qk_{N(ZFLyuZ4 zvwZmIlP6BD960>gi6zU)A2r9!%F2P2lLyTsCypGmENAt?rOSP*?OwdxkAyjU^}=eO zY4`G_)2I4pSkrlK^}?xhY}P%!diKnEpUou)!oIz%QNE?I`B z(_gi^TUGId%cr)UO&+mQQwQutFDr2>ydl5M0V;0_XFzzAN=s5PMJS{z4?o!)8@u+pMSjYf|ll=4?la&(HV2~_B-EQ z(OL7!)?4?u&Y5@Ld-+F4=MB>x`gi5e4sQivkllrt*JGrrS&LXR-m<+Y7J;cO)>KXe zz?HyScq4ngQ#0JxwG5Zicth`7Y~(&p?h_)Q0H!<&cqzAMx@Hn^cSXBU1Fx`VG z6RZRDMs`;z>T3oR%-q)kHHl=q6FlBIeLQ;qAzmL?Wd3yZ1^ zO=$Iqw0rB&ifGi49>=O4!-}qASy!-xbzhgUs7qMTMf7w5>p1Rfn$PwqF^QfZo+@+# z%;T7^^YRy$dw(E_Uoix)|)N0bj8fv4I^Qq8lR3y)+{>kbT{u38oCBloPUAz@uEzL|0DuD1Q$^PERl|=HE;Twg8@Xf-W zL$BMs8DN*xX8%%jG}xe89VN^rR~GOn-g=lZNexDI3uV)5I&q)ja(QlP zyU(HP{-LW%Qrc9MHVsKg`HpcH|ZzNd#!zf;XrLi zYO6m`#bx80Cv?#9CcU;QKpwp4WS~G%GPV{CS0zl5wG2fl#n$q+wPJ*-Vw$XDP=RWA zwoGc~O?am;VbK!8zlqbh!+LSz85*?8f`m*w$n0<_T;+_d@<`)X9^@b&TfJ>-!8odj ov=mi>0u*CwY1>*huBu?Ps%yoGQnac%j6p5-sz+X1)#|+cFRXP%CjbBd diff --git a/packages/as-sha256/build/untouched.wat b/packages/as-sha256/build/untouched.wat index 27a7b2e3e..393da547b 100644 --- a/packages/as-sha256/build/untouched.wat +++ b/packages/as-sha256/build/untouched.wat @@ -8,7 +8,6 @@ (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (global $assembly/index/HAS_SIMD i32 (i32.const 0)) (global $assembly/utils/const/K i32 (i32.const 320)) (global $assembly/utils/const/W64 i32 (i32.const 656)) (global $assembly/common/PARALLEL_FACTOR i32 (i32.const 4)) @@ -54,6 +53,7 @@ (global $assembly/common/outputPtr (mut i32) (i32.const 0)) (global $assembly/common/mLength (mut i32) (i32.const 0)) (global $assembly/common/bytesHashed (mut i32) (i32.const 0)) + (global $assembly/index/HAS_SIMD i32 (i32.const 0)) (global $~lib/memory/__heap_base i32 (i32.const 1012)) (memory $0 1) (data $0 (i32.const 12) "\1c\01\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\98/\8aB\91D7q\cf\fb\c0\b5\a5\db\b5\e9[\c2V9\f1\11\f1Y\a4\82?\92\d5^\1c\ab\98\aa\07\d8\01[\83\12\be\851$\c3}\0cUt]\ber\fe\b1\de\80\a7\06\dc\9bt\f1\9b\c1\c1i\9b\e4\86G\be\ef\c6\9d\c1\0f\cc\a1\0c$o,\e9-\aa\84tJ\dc\a9\b0\\\da\88\f9vRQ>\98m\c61\a8\c8\'\03\b0\c7\7fY\bf\f3\0b\e0\c6G\91\a7\d5Qc\ca\06g))\14\85\n\b7\'8!\1b.\fcm,M\13\r8STs\ne\bb\njv.\c9\c2\81\85,r\92\a1\e8\bf\a2Kf\1a\a8p\8bK\c2\a3Ql\c7\19\e8\92\d1$\06\99\d6\855\0e\f4p\a0j\10\16\c1\a4\19\08l7\1eLwH\'\b5\bc\b04\b3\0c\1c9J\aa\d8NO\ca\9c[\f3o.h\ee\82\8ftoc\a5x\14x\c8\84\08\02\c7\8c\fa\ff\be\90\eblP\a4\f7\a3\f9\be\f2xq\c6\00\00\00\00\00\00\00\00\00\00\00\00") @@ -69,6 +69,7 @@ (table $0 1 1 funcref) (elem $0 (i32.const 1)) (export "HAS_SIMD" (global $assembly/index/HAS_SIMD)) + (export "batchHash4UintArray64s" (func $assembly/index/batchHash4UintArray64s)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) @@ -2221,150 +2222,189 @@ i32.add global.set $assembly/common/H7 ) - (func $assembly/common/update (param $0 i32) (param $1 i32) + (func $assembly/common/hashPreCompW (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $assembly/common/H0 + global.set $assembly/common/a + global.get $assembly/common/H1 + global.set $assembly/common/b + global.get $assembly/common/H2 + global.set $assembly/common/c + global.get $assembly/common/H3 + global.set $assembly/common/d + global.get $assembly/common/H4 + global.set $assembly/common/e + global.get $assembly/common/H5 + global.set $assembly/common/f + global.get $assembly/common/H6 + global.set $assembly/common/g + global.get $assembly/common/H7 + global.set $assembly/common/h i32.const 0 - local.set $2 - global.get $assembly/common/bytesHashed - local.get $1 - i32.add - global.set $assembly/common/bytesHashed - global.get $assembly/common/mLength - if + global.set $assembly/common/i + loop $for-loop|0 + global.get $assembly/common/i i32.const 64 - global.get $assembly/common/mLength - i32.sub - local.get $1 - i32.le_s + i32.lt_u if - global.get $assembly/common/mPtr - global.get $assembly/common/mLength - i32.add - local.get $0 - i32.const 64 - global.get $assembly/common/mLength - i32.sub - memory.copy - global.get $assembly/common/mLength - i32.const 64 - global.get $assembly/common/mLength - i32.sub + global.get $assembly/common/h + block $assembly/common/EP1|inlined.1 (result i32) + global.get $assembly/common/e + local.set $1 + local.get $1 + i32.const 6 + i32.rotr + local.get $1 + i32.const 11 + i32.rotr + i32.xor + local.get $1 + i32.const 25 + i32.rotr + i32.xor + br $assembly/common/EP1|inlined.1 + end i32.add - global.set $assembly/common/mLength - local.get $2 - i32.const 64 - global.get $assembly/common/mLength - i32.sub + block $assembly/common/CH|inlined.1 (result i32) + global.get $assembly/common/e + local.set $2 + global.get $assembly/common/f + local.set $3 + global.get $assembly/common/g + local.set $4 + local.get $2 + local.get $3 + i32.and + local.get $2 + i32.const -1 + i32.xor + local.get $4 + i32.and + i32.xor + br $assembly/common/CH|inlined.1 + end i32.add - local.set $2 - local.get $1 - i32.const 64 - global.get $assembly/common/mLength - i32.sub - i32.sub - local.set $1 - global.get $assembly/common/wPtr - global.get $assembly/common/mPtr - call $assembly/common/hashBlocks - i32.const 0 - global.set $assembly/common/mLength - else - global.get $assembly/common/mPtr - global.get $assembly/common/mLength + block $assembly/common/load32|inlined.6 (result i32) + local.get $0 + local.set $5 + global.get $assembly/common/i + local.set $6 + local.get $5 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load + br $assembly/common/load32|inlined.6 + end i32.add - local.get $0 - local.get $1 - memory.copy - global.get $assembly/common/mLength - local.get $1 + global.set $assembly/common/t1 + block $assembly/common/EP0|inlined.1 (result i32) + global.get $assembly/common/a + local.set $7 + local.get $7 + i32.const 2 + i32.rotr + local.get $7 + i32.const 13 + i32.rotr + i32.xor + local.get $7 + i32.const 22 + i32.rotr + i32.xor + br $assembly/common/EP0|inlined.1 + end + block $assembly/common/MAJ|inlined.1 (result i32) + global.get $assembly/common/a + local.set $8 + global.get $assembly/common/b + local.set $9 + global.get $assembly/common/c + local.set $10 + local.get $8 + local.get $9 + i32.and + local.get $8 + local.get $10 + i32.and + i32.xor + local.get $9 + local.get $10 + i32.and + i32.xor + br $assembly/common/MAJ|inlined.1 + end i32.add - global.set $assembly/common/mLength - local.get $2 - local.get $1 + global.set $assembly/common/t2 + global.get $assembly/common/g + global.set $assembly/common/h + global.get $assembly/common/f + global.set $assembly/common/g + global.get $assembly/common/e + global.set $assembly/common/f + global.get $assembly/common/d + global.get $assembly/common/t1 i32.add - local.set $2 - local.get $1 - local.get $1 - i32.sub - local.set $1 - return - end - end - i32.const 0 - local.set $3 - loop $for-loop|0 - local.get $3 - local.get $1 - i32.const 64 - i32.div_s - i32.lt_s - if - global.get $assembly/common/wPtr - local.get $0 - local.get $2 + global.set $assembly/common/e + global.get $assembly/common/c + global.set $assembly/common/d + global.get $assembly/common/b + global.set $assembly/common/c + global.get $assembly/common/a + global.set $assembly/common/b + global.get $assembly/common/t1 + global.get $assembly/common/t2 i32.add - call $assembly/common/hashBlocks - local.get $3 + global.set $assembly/common/a + global.get $assembly/common/i i32.const 1 i32.add - local.set $3 - local.get $2 - i32.const 64 - i32.add - local.set $2 + global.set $assembly/common/i br $for-loop|0 end end - local.get $1 - i32.const 63 - i32.and - if - global.get $assembly/common/mPtr - global.get $assembly/common/mLength - i32.add - local.get $0 - local.get $2 - i32.add - local.get $1 - i32.const 63 - i32.and - memory.copy - global.get $assembly/common/mLength - local.get $1 - i32.const 63 - i32.and - i32.add - global.set $assembly/common/mLength - end - ) - (func $~lib/polyfills/bswap (param $0 i32) (result i32) - i32.const 1 - drop - i32.const 4 - i32.const 1 - i32.eq - drop - i32.const 4 - i32.const 2 - i32.eq - drop - i32.const 4 - i32.const 4 - i32.eq - drop - local.get $0 - i32.const -16711936 - i32.and - i32.const 8 - i32.rotl - local.get $0 - i32.const 16711935 - i32.and - i32.const 8 - i32.rotr - i32.or - return + global.get $assembly/common/H0 + global.get $assembly/common/a + i32.add + global.set $assembly/common/H0 + global.get $assembly/common/H1 + global.get $assembly/common/b + i32.add + global.set $assembly/common/H1 + global.get $assembly/common/H2 + global.get $assembly/common/c + i32.add + global.set $assembly/common/H2 + global.get $assembly/common/H3 + global.get $assembly/common/d + i32.add + global.set $assembly/common/H3 + global.get $assembly/common/H4 + global.get $assembly/common/e + i32.add + global.set $assembly/common/H4 + global.get $assembly/common/H5 + global.get $assembly/common/f + i32.add + global.set $assembly/common/H5 + global.get $assembly/common/H6 + global.get $assembly/common/g + i32.add + global.set $assembly/common/H6 + global.get $assembly/common/H7 + global.get $assembly/common/h + i32.add + global.set $assembly/common/H7 ) (func $~lib/polyfills/bswap (param $0 i32) (result i32) i32.const 1 @@ -2394,8 +2434,7 @@ i32.or return ) - (func $assembly/common/final (param $0 i32) - (local $1 i32) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2420,607 +2459,603 @@ (local $23 i32) (local $24 i32) (local $25 i32) - (local $26 i32) - (local $27 i32) - (local $28 i32) - (local $29 i32) - (local $30 i32) - (local $31 i32) - (local $32 i32) - (local $33 i32) - (local $34 i32) - (local $35 i32) - (local $36 i32) - (local $37 i32) - (local $38 i32) - global.get $assembly/common/bytesHashed - i32.const 63 - i32.and - i32.const 63 - i32.lt_s - if - global.get $assembly/common/mPtr - local.set $1 - global.get $assembly/common/mLength - local.set $2 - i32.const 128 - local.set $3 - local.get $1 - local.get $2 - i32.add - local.get $3 - i32.store8 - global.get $assembly/common/mLength - i32.const 1 - i32.add - global.set $assembly/common/mLength - end - global.get $assembly/common/bytesHashed - i32.const 63 - i32.and - i32.const 56 - i32.ge_s - if - global.get $assembly/common/mPtr - global.get $assembly/common/mLength - i32.add - local.set $4 - i32.const 0 - local.set $5 - i32.const 64 - global.get $assembly/common/mLength - i32.sub - local.set $6 - local.get $4 - local.get $6 - i32.add - local.set $7 - loop $while-continue|0 - local.get $4 - local.get $7 - i32.lt_u - if - local.get $4 - local.get $5 - i32.store8 - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $while-continue|0 - end - end - global.get $assembly/common/wPtr - global.get $assembly/common/mPtr - call $assembly/common/hashBlocks - i32.const 0 - global.set $assembly/common/mLength - end - global.get $assembly/common/bytesHashed - i32.const 63 - i32.and - i32.const 63 - i32.ge_s - if - global.get $assembly/common/mPtr - local.set $8 - global.get $assembly/common/mLength - local.set $9 - i32.const 128 - local.set $10 - local.get $8 - local.get $9 - i32.add - local.get $10 - i32.store8 - global.get $assembly/common/mLength - i32.const 1 - i32.add - global.set $assembly/common/mLength - end - global.get $assembly/common/mPtr - global.get $assembly/common/mLength - i32.add - local.set $11 - i32.const 0 - local.set $12 - i32.const 64 - global.get $assembly/common/mLength - i32.sub - i32.const 8 - i32.sub - local.set $13 - local.get $11 - local.get $13 - i32.add - local.set $14 - loop $while-continue|1 - local.get $11 - local.get $14 - i32.lt_u - if - local.get $11 - local.get $12 - i32.store8 - local.get $11 - i32.const 1 - i32.add - local.set $11 - br $while-continue|1 - end - end - global.get $assembly/common/mPtr - i32.const 64 - i32.add - i32.const 8 - i32.sub - global.get $assembly/common/bytesHashed - i32.const 536870912 - i32.div_s - call $~lib/polyfills/bswap - i32.store - global.get $assembly/common/mPtr - i32.const 64 - i32.add - i32.const 4 - i32.sub - global.get $assembly/common/bytesHashed - i32.const 3 - i32.shl - call $~lib/polyfills/bswap - i32.store + call $assembly/common/init global.get $assembly/common/wPtr - global.get $assembly/common/mPtr - call $assembly/common/hashBlocks local.get $0 - local.set $15 + call $assembly/common/hashBlocks + global.get $assembly/common/w64Ptr + call $assembly/common/hashPreCompW + local.get $1 + local.set $2 i32.const 0 - local.set $16 + local.set $3 global.get $assembly/common/H0 call $~lib/polyfills/bswap - local.set $17 - local.get $15 - local.get $16 + local.set $4 + local.get $2 + local.get $3 i32.const 2 i32.shl i32.add - local.get $17 + local.get $4 i32.store - local.get $0 - local.set $18 + local.get $1 + local.set $5 i32.const 1 - local.set $19 + local.set $6 global.get $assembly/common/H1 call $~lib/polyfills/bswap - local.set $20 - local.get $18 - local.get $19 + local.set $7 + local.get $5 + local.get $6 i32.const 2 i32.shl i32.add - local.get $20 + local.get $7 i32.store - local.get $0 - local.set $21 + local.get $1 + local.set $8 i32.const 2 - local.set $22 + local.set $9 global.get $assembly/common/H2 call $~lib/polyfills/bswap - local.set $23 - local.get $21 - local.get $22 + local.set $10 + local.get $8 + local.get $9 i32.const 2 i32.shl i32.add - local.get $23 + local.get $10 i32.store - local.get $0 - local.set $24 + local.get $1 + local.set $11 i32.const 3 - local.set $25 + local.set $12 global.get $assembly/common/H3 call $~lib/polyfills/bswap - local.set $26 - local.get $24 - local.get $25 + local.set $13 + local.get $11 + local.get $12 i32.const 2 i32.shl i32.add - local.get $26 + local.get $13 i32.store - local.get $0 - local.set $27 + local.get $1 + local.set $14 i32.const 4 - local.set $28 + local.set $15 global.get $assembly/common/H4 call $~lib/polyfills/bswap - local.set $29 - local.get $27 - local.get $28 + local.set $16 + local.get $14 + local.get $15 i32.const 2 i32.shl i32.add - local.get $29 + local.get $16 i32.store - local.get $0 - local.set $30 + local.get $1 + local.set $17 i32.const 5 - local.set $31 + local.set $18 global.get $assembly/common/H5 call $~lib/polyfills/bswap - local.set $32 - local.get $30 - local.get $31 + local.set $19 + local.get $17 + local.get $18 i32.const 2 i32.shl i32.add - local.get $32 + local.get $19 i32.store - local.get $0 - local.set $33 + local.get $1 + local.set $20 i32.const 6 - local.set $34 + local.set $21 global.get $assembly/common/H6 call $~lib/polyfills/bswap - local.set $35 - local.get $33 - local.get $34 + local.set $22 + local.get $20 + local.get $21 i32.const 2 i32.shl i32.add - local.get $35 + local.get $22 i32.store - local.get $0 - local.set $36 + local.get $1 + local.set $23 i32.const 7 - local.set $37 + local.set $24 global.get $assembly/common/H7 call $~lib/polyfills/bswap - local.set $38 - local.get $36 - local.get $37 + local.set $25 + local.get $23 + local.get $24 i32.const 2 i32.shl i32.add - local.get $38 + local.get $25 i32.store ) - (func $assembly/common/digest (param $0 i32) - call $assembly/common/init - global.get $assembly/common/inputPtr - local.get $0 - call $assembly/common/update - global.get $assembly/common/outputPtr - call $assembly/common/final - ) - (func $assembly/common/hashPreCompW (param $0 i32) + (func $assembly/index/batchHash4UintArray64s (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - global.get $assembly/common/H0 - global.set $assembly/common/a - global.get $assembly/common/H1 - global.set $assembly/common/b - global.get $assembly/common/H2 - global.set $assembly/common/c - global.get $assembly/common/H3 - global.set $assembly/common/d - global.get $assembly/common/H4 - global.set $assembly/common/e - global.get $assembly/common/H5 - global.set $assembly/common/f - global.get $assembly/common/H6 - global.set $assembly/common/g - global.get $assembly/common/H7 - global.set $assembly/common/h i32.const 0 - global.set $assembly/common/i + local.set $1 loop $for-loop|0 - global.get $assembly/common/i + local.get $1 + i32.const 4 + i32.lt_s + if + local.get $1 + i32.const 64 + i32.mul + local.set $2 + local.get $1 + i32.const 32 + i32.mul + local.set $3 + global.get $assembly/common/inputPtr + local.get $2 + i32.add + local.get $0 + local.get $3 + i32.add + call $assembly/common/digest64 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + ) + (func $assembly/common/update (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + local.set $2 + global.get $assembly/common/bytesHashed + local.get $1 + i32.add + global.set $assembly/common/bytesHashed + global.get $assembly/common/mLength + if i32.const 64 - i32.lt_u + global.get $assembly/common/mLength + i32.sub + local.get $1 + i32.le_s if - global.get $assembly/common/h - block $assembly/common/EP1|inlined.1 (result i32) - global.get $assembly/common/e - local.set $1 - local.get $1 - i32.const 6 - i32.rotr - local.get $1 - i32.const 11 - i32.rotr - i32.xor - local.get $1 - i32.const 25 - i32.rotr - i32.xor - br $assembly/common/EP1|inlined.1 - end + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add - block $assembly/common/CH|inlined.1 (result i32) - global.get $assembly/common/e - local.set $2 - global.get $assembly/common/f - local.set $3 - global.get $assembly/common/g - local.set $4 - local.get $2 - local.get $3 - i32.and - local.get $2 - i32.const -1 - i32.xor - local.get $4 - i32.and - i32.xor - br $assembly/common/CH|inlined.1 - end + local.get $0 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + memory.copy + global.get $assembly/common/mLength + i32.const 64 + global.get $assembly/common/mLength + i32.sub i32.add - block $assembly/common/load32|inlined.6 (result i32) - local.get $0 - local.set $5 - global.get $assembly/common/i - local.set $6 - local.get $5 - local.get $6 - i32.const 2 - i32.shl - i32.add - i32.load - br $assembly/common/load32|inlined.6 - end + global.set $assembly/common/mLength + local.get $2 + i32.const 64 + global.get $assembly/common/mLength + i32.sub i32.add - global.set $assembly/common/t1 - block $assembly/common/EP0|inlined.1 (result i32) - global.get $assembly/common/a - local.set $7 - local.get $7 - i32.const 2 - i32.rotr - local.get $7 - i32.const 13 - i32.rotr - i32.xor - local.get $7 - i32.const 22 - i32.rotr - i32.xor - br $assembly/common/EP0|inlined.1 - end - block $assembly/common/MAJ|inlined.1 (result i32) - global.get $assembly/common/a - local.set $8 - global.get $assembly/common/b - local.set $9 - global.get $assembly/common/c - local.set $10 - local.get $8 - local.get $9 - i32.and - local.get $8 - local.get $10 - i32.and - i32.xor - local.get $9 - local.get $10 - i32.and - i32.xor - br $assembly/common/MAJ|inlined.1 - end + local.set $2 + local.get $1 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.sub + local.set $1 + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + i32.const 0 + global.set $assembly/common/mLength + else + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add - global.set $assembly/common/t2 - global.get $assembly/common/g - global.set $assembly/common/h - global.get $assembly/common/f - global.set $assembly/common/g - global.get $assembly/common/e - global.set $assembly/common/f - global.get $assembly/common/d - global.get $assembly/common/t1 + local.get $0 + local.get $1 + memory.copy + global.get $assembly/common/mLength + local.get $1 i32.add - global.set $assembly/common/e - global.get $assembly/common/c - global.set $assembly/common/d - global.get $assembly/common/b - global.set $assembly/common/c - global.get $assembly/common/a - global.set $assembly/common/b - global.get $assembly/common/t1 - global.get $assembly/common/t2 + global.set $assembly/common/mLength + local.get $2 + local.get $1 i32.add - global.set $assembly/common/a - global.get $assembly/common/i + local.set $2 + local.get $1 + local.get $1 + i32.sub + local.set $1 + return + end + end + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.const 64 + i32.div_s + i32.lt_s + if + global.get $assembly/common/wPtr + local.get $0 + local.get $2 + i32.add + call $assembly/common/hashBlocks + local.get $3 i32.const 1 i32.add - global.set $assembly/common/i + local.set $3 + local.get $2 + i32.const 64 + i32.add + local.set $2 br $for-loop|0 end end - global.get $assembly/common/H0 - global.get $assembly/common/a - i32.add - global.set $assembly/common/H0 - global.get $assembly/common/H1 - global.get $assembly/common/b - i32.add - global.set $assembly/common/H1 - global.get $assembly/common/H2 - global.get $assembly/common/c - i32.add - global.set $assembly/common/H2 - global.get $assembly/common/H3 - global.get $assembly/common/d - i32.add - global.set $assembly/common/H3 - global.get $assembly/common/H4 - global.get $assembly/common/e + local.get $1 + i32.const 63 + i32.and + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.get $0 + local.get $2 + i32.add + local.get $1 + i32.const 63 + i32.and + memory.copy + global.get $assembly/common/mLength + local.get $1 + i32.const 63 + i32.and + i32.add + global.set $assembly/common/mLength + end + ) + (func $~lib/polyfills/bswap (param $0 i32) (result i32) + i32.const 1 + drop + i32.const 4 + i32.const 1 + i32.eq + drop + i32.const 4 + i32.const 2 + i32.eq + drop + i32.const 4 + i32.const 4 + i32.eq + drop + local.get $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + return + ) + (func $assembly/common/final (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 63 + i32.lt_s + if + global.get $assembly/common/mPtr + local.set $1 + global.get $assembly/common/mLength + local.set $2 + i32.const 128 + local.set $3 + local.get $1 + local.get $2 + i32.add + local.get $3 + i32.store8 + global.get $assembly/common/mLength + i32.const 1 + i32.add + global.set $assembly/common/mLength + end + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 56 + i32.ge_s + if + global.get $assembly/common/mPtr + global.get $assembly/common/mLength + i32.add + local.set $4 + i32.const 0 + local.set $5 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + local.set $6 + local.get $4 + local.get $6 + i32.add + local.set $7 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.lt_u + if + local.get $4 + local.get $5 + i32.store8 + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|0 + end + end + global.get $assembly/common/wPtr + global.get $assembly/common/mPtr + call $assembly/common/hashBlocks + i32.const 0 + global.set $assembly/common/mLength + end + global.get $assembly/common/bytesHashed + i32.const 63 + i32.and + i32.const 63 + i32.ge_s + if + global.get $assembly/common/mPtr + local.set $8 + global.get $assembly/common/mLength + local.set $9 + i32.const 128 + local.set $10 + local.get $8 + local.get $9 + i32.add + local.get $10 + i32.store8 + global.get $assembly/common/mLength + i32.const 1 + i32.add + global.set $assembly/common/mLength + end + global.get $assembly/common/mPtr + global.get $assembly/common/mLength i32.add - global.set $assembly/common/H4 - global.get $assembly/common/H5 - global.get $assembly/common/f + local.set $11 + i32.const 0 + local.set $12 + i32.const 64 + global.get $assembly/common/mLength + i32.sub + i32.const 8 + i32.sub + local.set $13 + local.get $11 + local.get $13 i32.add - global.set $assembly/common/H5 - global.get $assembly/common/H6 - global.get $assembly/common/g + local.set $14 + loop $while-continue|1 + local.get $11 + local.get $14 + i32.lt_u + if + local.get $11 + local.get $12 + i32.store8 + local.get $11 + i32.const 1 + i32.add + local.set $11 + br $while-continue|1 + end + end + global.get $assembly/common/mPtr + i32.const 64 i32.add - global.set $assembly/common/H6 - global.get $assembly/common/H7 - global.get $assembly/common/h + i32.const 8 + i32.sub + global.get $assembly/common/bytesHashed + i32.const 536870912 + i32.div_s + call $~lib/polyfills/bswap + i32.store + global.get $assembly/common/mPtr + i32.const 64 i32.add - global.set $assembly/common/H7 - ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) - (local $15 i32) - (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (local $24 i32) - (local $25 i32) - call $assembly/common/init + i32.const 4 + i32.sub + global.get $assembly/common/bytesHashed + i32.const 3 + i32.shl + call $~lib/polyfills/bswap + i32.store global.get $assembly/common/wPtr - local.get $0 + global.get $assembly/common/mPtr call $assembly/common/hashBlocks - global.get $assembly/common/w64Ptr - call $assembly/common/hashPreCompW - local.get $1 - local.set $2 + local.get $0 + local.set $15 i32.const 0 - local.set $3 + local.set $16 global.get $assembly/common/H0 call $~lib/polyfills/bswap - local.set $4 - local.get $2 - local.get $3 + local.set $17 + local.get $15 + local.get $16 i32.const 2 i32.shl i32.add - local.get $4 + local.get $17 i32.store - local.get $1 - local.set $5 + local.get $0 + local.set $18 i32.const 1 - local.set $6 + local.set $19 global.get $assembly/common/H1 call $~lib/polyfills/bswap - local.set $7 - local.get $5 - local.get $6 + local.set $20 + local.get $18 + local.get $19 i32.const 2 i32.shl i32.add - local.get $7 + local.get $20 i32.store - local.get $1 - local.set $8 + local.get $0 + local.set $21 i32.const 2 - local.set $9 + local.set $22 global.get $assembly/common/H2 call $~lib/polyfills/bswap - local.set $10 - local.get $8 - local.get $9 + local.set $23 + local.get $21 + local.get $22 i32.const 2 i32.shl i32.add - local.get $10 + local.get $23 i32.store - local.get $1 - local.set $11 + local.get $0 + local.set $24 i32.const 3 - local.set $12 + local.set $25 global.get $assembly/common/H3 call $~lib/polyfills/bswap - local.set $13 - local.get $11 - local.get $12 + local.set $26 + local.get $24 + local.get $25 i32.const 2 i32.shl i32.add - local.get $13 + local.get $26 i32.store - local.get $1 - local.set $14 + local.get $0 + local.set $27 i32.const 4 - local.set $15 + local.set $28 global.get $assembly/common/H4 call $~lib/polyfills/bswap - local.set $16 - local.get $14 - local.get $15 + local.set $29 + local.get $27 + local.get $28 i32.const 2 i32.shl i32.add - local.get $16 + local.get $29 i32.store - local.get $1 - local.set $17 + local.get $0 + local.set $30 i32.const 5 - local.set $18 + local.set $31 global.get $assembly/common/H5 call $~lib/polyfills/bswap - local.set $19 - local.get $17 - local.get $18 + local.set $32 + local.get $30 + local.get $31 i32.const 2 i32.shl i32.add - local.get $19 + local.get $32 i32.store - local.get $1 - local.set $20 + local.get $0 + local.set $33 i32.const 6 - local.set $21 + local.set $34 global.get $assembly/common/H6 call $~lib/polyfills/bswap - local.set $22 - local.get $20 - local.get $21 + local.set $35 + local.get $33 + local.get $34 i32.const 2 i32.shl i32.add - local.get $22 + local.get $35 i32.store - local.get $1 - local.set $23 + local.get $0 + local.set $36 i32.const 7 - local.set $24 + local.set $37 global.get $assembly/common/H7 call $~lib/polyfills/bswap - local.set $25 - local.get $23 - local.get $24 + local.set $38 + local.get $36 + local.get $37 i32.const 2 i32.shl i32.add - local.get $25 + local.get $38 i32.store ) + (func $assembly/common/digest (param $0 i32) + call $assembly/common/init + global.get $assembly/common/inputPtr + local.get $0 + call $assembly/common/update + global.get $assembly/common/outputPtr + call $assembly/common/final + ) (func $~start call $start:assembly/index ) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 073312529..93ba017ea 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -264,13 +264,9 @@ export function batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { } } - if (!simdEnabled) { - return inputs.map(digest64); - } - // set up input buffer for v128 - inputUint8Array.set(inputs[1], 64); inputUint8Array.set(inputs[0], 0); + inputUint8Array.set(inputs[1], 64); inputUint8Array.set(inputs[2], 128); inputUint8Array.set(inputs[3], 192); @@ -294,24 +290,19 @@ export function hashInto(input: Uint8Array, output: Uint8Array): void { if (input.length !== output.length * 2) { throw new Error(`Invalid output length ${output.length}`); } - - let num64ByteChunksHashed = 0; - let num64ByteChunksRemaining = input.length / 64; - if (simdEnabled) { - // for every 64 x 4 = 256 bytes, do the batch hash if SIMD is present - const num256ByteChunks = Math.floor(input.length / 256); - for (let i = 0; i < num256ByteChunks; i++) { - inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); - ctx.batchHash4UintArray64s(wasmOutputValue); - output.set(outputUint8Array.subarray(0, 128), i * 128); - } - num64ByteChunksHashed = num256ByteChunks * 4; - num64ByteChunksRemaining -= num64ByteChunksHashed; + // for every 64 x 4 = 256 bytes, do the batch hash + const endBatch = Math.floor(input.length / 256); + for (let i = 0; i < endBatch; i++) { + inputUint8Array.set(input.subarray(i * 256, (i + 1) * 256), 0); + ctx.batchHash4UintArray64s(wasmOutputValue); + output.set(outputUint8Array.subarray(0, 128), i * 128); } - const inputOffset = num64ByteChunksHashed * 64; - const outputOffset = num64ByteChunksHashed * 32; - for (let i = 0; i < num64ByteChunksRemaining; i++) { + const numHashed = endBatch * 4; + const remainingHash = Math.floor((input.length % 256) / 64); + const inputOffset = numHashed * 64; + const outputOffset = numHashed * 32; + for (let i = 0; i < remainingHash; i++) { inputUint8Array.set(input.subarray(inputOffset + i * 64, inputOffset + (i + 1) * 64), 0); ctx.digest64(wasmInputValue, wasmOutputValue); output.set(outputUint8Array.subarray(0, 32), outputOffset + i * 32); diff --git a/packages/as-sha256/src/wasm.ts b/packages/as-sha256/src/wasm.ts index 96a77a5e9..77b795154 100644 --- a/packages/as-sha256/src/wasm.ts +++ b/packages/as-sha256/src/wasm.ts @@ -21,10 +21,10 @@ export interface WasmContext { digest(length: number): void; digest64(inPtr: number, outPtr: number): void; + batchHash4UintArray64s(outPtr: number): void; } export interface WasmSimdContext extends WasmContext { - batchHash4UintArray64s(outPtr: number): void; batchHash4HashObjectInputs(outPtr: number): void; } diff --git a/packages/as-sha256/src/wasmCode.ts b/packages/as-sha256/src/wasmCode.ts index 2ac79ff2a..5ff40a410 100644 --- a/packages/as-sha256/src/wasmCode.ts +++ b/packages/as-sha256/src/wasmCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,1,127,0,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,20,19,0,0,0,0,0,6,1,3,3,1,4,0,0,1,2,2,2,0,4,5,3,1,0,1,6,187,1,37,127,0,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,7,115,11,8,72,65,83,95,83,73,77,68,3,0,12,73,78,80,85,84,95,76,69,78,71,84,72,3,2,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,1,5,105,110,112,117,116,3,31,6,111,117,116,112,117,116,3,33,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,13,5,102,105,110,97,108,0,15,6,100,105,103,101,115,116,0,16,8,100,105,103,101,115,116,54,52,0,18,6,109,101,109,111,114,121,2,0,8,1,19,12,1,18,10,209,22,19,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,24,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,24,11,35,24,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,25,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,26,32,2,40,2,0,65,124,113,65,4,106,106,36,26,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,5,65,133,221,158,219,123,36,6,65,242,230,187,227,3,36,7,65,186,234,191,170,122,36,8,65,255,164,185,136,5,36,9,65,140,209,149,216,121,36,10,65,171,179,143,252,1,36,11,65,153,154,131,223,5,36,12,65,0,36,35,65,0,36,36,11,227,3,1,1,127,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,35,12,36,20,65,0,36,21,3,64,35,21,65,16,73,4,64,32,0,35,21,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,21,65,1,106,36,21,12,1,11,11,65,16,36,21,3,64,35,21,65,192,0,73,4,64,32,0,35,21,65,2,116,106,32,0,35,21,65,16,107,65,2,116,106,40,2,0,32,0,35,21,65,7,107,65,2,116,106,40,2,0,32,0,35,21,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,21,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,21,65,1,106,36,21,12,1,11,11,65,0,36,21,3,64,35,21,65,192,0,73,4,64,32,0,35,21,65,2,116,34,1,106,40,2,0,32,1,35,3,106,40,2,0,35,20,35,17,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,17,34,1,35,18,113,35,19,32,1,65,127,115,113,115,106,106,106,36,22,35,13,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,14,34,1,35,15,34,2,113,32,1,35,13,34,1,113,32,1,32,2,113,115,115,106,36,23,35,19,36,20,35,18,36,19,35,17,36,18,35,16,35,22,106,36,17,35,15,36,16,35,14,36,15,35,13,36,14,35,22,35,23,106,36,13,35,21,65,1,106,36,21,12,1,11,11,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,35,12,35,20,106,36,12,11,174,1,1,2,127,35,36,32,1,106,36,36,35,35,4,64,65,192,0,35,35,107,34,2,32,1,76,4,64,35,28,35,35,106,32,0,32,2,252,10,0,0,35,35,32,2,106,36,35,65,192,0,35,35,107,33,2,32,1,65,192,0,35,35,107,107,33,1,35,30,35,28,16,12,65,0,36,35,5,35,28,35,35,106,32,0,32,1,252,10,0,0,35,35,32,1,106,36,35,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,30,32,0,32,2,106,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,28,35,35,106,32,0,32,2,106,32,1,252,10,0,0,35,35,32,1,106,36,35,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,146,2,1,2,127,35,36,65,63,113,65,63,73,4,64,35,28,35,35,106,65,128,1,58,0,0,35,35,65,1,106,36,35,11,35,36,65,63,113,65,56,79,4,64,35,28,35,35,106,34,1,65,192,0,35,35,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,30,35,28,16,12,65,0,36,35,11,35,36,65,63,113,65,63,79,4,64,35,28,35,35,106,65,128,1,58,0,0,35,35,65,1,106,36,35,11,35,28,35,35,106,34,1,65,56,35,35,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,28,35,36,65,128,128,128,128,2,109,16,14,54,2,56,35,28,35,36,65,3,116,16,14,54,2,60,35,30,35,28,16,12,32,0,35,5,16,14,54,2,0,32,0,35,6,16,14,54,2,4,32,0,35,7,16,14,54,2,8,32,0,35,8,16,14,54,2,12,32,0,35,9,16,14,54,2,16,32,0,35,10,16,14,54,2,20,32,0,35,11,16,14,54,2,24,32,0,35,12,16,14,54,2,28,11,14,0,16,11,35,32,32,0,16,13,35,34,16,15,11,253,1,1,2,127,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,35,12,36,20,65,0,36,21,3,64,35,21,65,192,0,73,4,64,32,0,35,21,65,2,116,106,40,2,0,35,20,35,17,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,17,34,1,35,18,113,35,19,32,1,65,127,115,113,115,106,106,36,22,35,13,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,14,34,2,35,15,34,1,113,32,2,35,13,34,2,113,32,1,32,2,113,115,115,106,36,23,35,19,36,20,35,18,36,19,35,17,36,18,35,16,35,22,106,36,17,35,15,36,16,35,14,36,15,35,13,36,14,35,22,35,23,106,36,13,35,21,65,1,106,36,21,12,1,11,11,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,35,12,35,20,106,36,12,11,86,0,16,11,35,30,32,0,16,12,35,4,16,17,32,1,35,5,16,14,54,2,0,32,1,35,6,16,14,54,2,4,32,1,35,7,16,14,54,2,8,32,1,35,8,16,14,54,2,12,32,1,35,9,16,14,54,2,16,32,1,35,10,16,14,54,2,20,32,1,35,11,16,14,54,2,24,32,1,35,12,16,14,54,2,28,11,82,0,65,196,10,40,2,0,36,3,65,148,13,40,2,0,36,4,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,25,65,192,0,16,10,36,27,35,27,36,28,65,128,8,16,10,36,29,35,29,36,30,65,128,4,16,10,36,31,35,31,36,32,65,32,16,10,36,33,35,33,36,34,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); +export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,0,96,1,127,1,127,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,21,20,0,0,0,0,0,6,2,3,3,2,4,0,1,2,0,1,0,1,1,4,5,3,1,0,1,6,187,1,37,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,0,11,7,140,1,12,8,72,65,83,95,83,73,77,68,3,36,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,16,12,73,78,80,85,84,95,76,69,78,71,84,72,3,1,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,0,5,105,110,112,117,116,3,30,6,111,117,116,112,117,116,3,32,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,17,5,102,105,110,97,108,0,18,6,100,105,103,101,115,116,0,19,8,100,105,103,101,115,116,54,52,0,15,6,109,101,109,111,114,121,2,0,8,1,20,12,1,18,10,252,22,20,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,23,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,23,11,35,23,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,24,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,25,32,2,40,2,0,65,124,113,65,4,106,106,36,25,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,4,65,133,221,158,219,123,36,5,65,242,230,187,227,3,36,6,65,186,234,191,170,122,36,7,65,255,164,185,136,5,36,8,65,140,209,149,216,121,36,9,65,171,179,143,252,1,36,10,65,153,154,131,223,5,36,11,65,0,36,34,65,0,36,35,11,227,3,1,1,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,16,73,4,64,32,0,35,20,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,16,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,32,0,35,20,65,16,107,65,2,116,106,40,2,0,32,0,35,20,65,7,107,65,2,116,106,40,2,0,32,0,35,20,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,20,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,34,1,106,40,2,0,32,1,35,2,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,1,35,14,34,2,113,32,1,35,12,34,1,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,253,1,1,2,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,2,35,14,34,1,113,32,2,35,12,34,2,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,86,0,16,11,35,29,32,0,16,12,35,3,16,13,32,1,35,4,16,14,54,2,0,32,1,35,5,16,14,54,2,4,32,1,35,6,16,14,54,2,8,32,1,35,7,16,14,54,2,12,32,1,35,8,16,14,54,2,16,32,1,35,9,16,14,54,2,20,32,1,35,10,16,14,54,2,24,32,1,35,11,16,14,54,2,28,11,42,1,1,127,3,64,32,1,65,4,72,4,64,35,31,32,1,65,6,116,106,32,0,32,1,65,5,116,106,16,15,32,1,65,1,106,33,1,12,1,11,11,11,174,1,1,2,127,35,35,32,1,106,36,35,35,34,4,64,65,192,0,35,34,107,34,2,32,1,76,4,64,35,27,35,34,106,32,0,32,2,252,10,0,0,35,34,32,2,106,36,34,65,192,0,35,34,107,33,2,32,1,65,192,0,35,34,107,107,33,1,35,29,35,27,16,12,65,0,36,34,5,35,27,35,34,106,32,0,32,1,252,10,0,0,35,34,32,1,106,36,34,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,29,32,0,32,2,106,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,27,35,34,106,32,0,32,2,106,32,1,252,10,0,0,35,34,32,1,106,36,34,11,11,146,2,1,2,127,35,35,65,63,113,65,63,73,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,35,65,63,113,65,56,79,4,64,35,27,35,34,106,34,1,65,192,0,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,29,35,27,16,12,65,0,36,34,11,35,35,65,63,113,65,63,79,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,27,35,34,106,34,1,65,56,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,27,35,35,65,128,128,128,128,2,109,16,14,54,2,56,35,27,35,35,65,3,116,16,14,54,2,60,35,29,35,27,16,12,32,0,35,4,16,14,54,2,0,32,0,35,5,16,14,54,2,4,32,0,35,6,16,14,54,2,8,32,0,35,7,16,14,54,2,12,32,0,35,8,16,14,54,2,16,32,0,35,9,16,14,54,2,20,32,0,35,10,16,14,54,2,24,32,0,35,11,16,14,54,2,28,11,14,0,16,11,35,31,32,0,16,17,35,33,16,18,11,82,0,65,196,10,40,2,0,36,2,65,148,13,40,2,0,36,3,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,24,65,192,0,16,10,36,26,35,26,36,27,65,128,8,16,10,36,28,35,28,36,29,65,128,4,16,10,36,30,35,30,36,31,65,32,16,10,36,32,35,32,36,33,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); From acc93a9313ab44f9a1540a169887194cfbad76e8 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 9 Jan 2025 22:03:35 +0700 Subject: [PATCH 45/47] refactor: move batchHash4UintArray64s up --- packages/as-sha256/src/index.ts | 74 ++++++++++++++++----------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 93ba017ea..346d803de 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -112,6 +112,43 @@ export function digest64HashObjectsInto(obj1: HashObject, obj2: HashObject, outp byteArrayIntoHashObject(outputUint8Array, 0, output); } +/** + * Hash 4 Uint8Array objects in parallel, each 64 length as below + * + * Inputs: i0 i1 i2 i3 i4 i5 i6 i7 + * \ / \ / \ / \ / + * Outputs: o0 o1 o2 o3 + */ +export function batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { + if (inputs.length !== 4) { + throw new Error("Input length must be 4"); + } + for (let i = 0; i < 4; i++) { + const input = inputs[i]; + if (input == null) { + throw new Error(`Input ${i} is null or undefined`); + } + if (input.length !== 64) { + throw new Error(`Invalid length ${input.length} at input ${i}`); + } + } + + // set up input buffer for v128 + inputUint8Array.set(inputs[0], 0); + inputUint8Array.set(inputs[1], 64); + inputUint8Array.set(inputs[2], 128); + inputUint8Array.set(inputs[3], 192); + + ctx.batchHash4UintArray64s(wasmOutputValue); + + const output0 = allocDigest(); + const output1 = allocDigestOffset(32); + const output2 = allocDigestOffset(64); + const output3 = allocDigestOffset(96); + + return [output0, output1, output2, output3]; +} + /** * Hash 4 HashObject inputs in parallel * - Each input (inputs{i}) is 4 bytes which make it 32 bytes @@ -243,43 +280,6 @@ export function batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { return [output0, output1, output2, output3]; } -/** - * Hash 4 Uint8Array objects in parallel, each 64 length as below - * - * Inputs: i0 i1 i2 i3 i4 i5 i6 i7 - * \ / \ / \ / \ / - * Outputs: o0 o1 o2 o3 - */ -export function batchHash4UintArray64s(inputs: Uint8Array[]): Uint8Array[] { - if (inputs.length !== 4) { - throw new Error("Input length must be 4"); - } - for (let i = 0; i < 4; i++) { - const input = inputs[i]; - if (input == null) { - throw new Error(`Input ${i} is null or undefined`); - } - if (input.length !== 64) { - throw new Error(`Invalid length ${input.length} at input ${i}`); - } - } - - // set up input buffer for v128 - inputUint8Array.set(inputs[0], 0); - inputUint8Array.set(inputs[1], 64); - inputUint8Array.set(inputs[2], 128); - inputUint8Array.set(inputs[3], 192); - - ctx.batchHash4UintArray64s(wasmOutputValue); - - const output0 = allocDigest(); - const output1 = allocDigestOffset(32); - const output2 = allocDigestOffset(64); - const output3 = allocDigestOffset(96); - - return [output0, output1, output2, output3]; -} - /** * Hash an input into preallocated input using batch if possible. */ From 61d64108e8e8bebf628689b618ed219d6dc44c7d Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 9 Jan 2025 23:43:06 +0700 Subject: [PATCH 46/47] feat: move batchHash4HashObjectInputs non-simd implementation to AS --- packages/as-sha256/assembly/common.ts | 18 +- packages/as-sha256/assembly/index.ts | 16 +- packages/as-sha256/build/optimized.simd.wasm | Bin 16812 -> 16834 bytes packages/as-sha256/build/optimized.simd.wat | 28 +- packages/as-sha256/build/optimized.wasm | Bin 4268 -> 4345 bytes packages/as-sha256/build/optimized.wat | 94 +++--- packages/as-sha256/build/untouched.simd.wasm | Bin 27421 -> 27434 bytes packages/as-sha256/build/untouched.simd.wat | 261 ++++++++-------- packages/as-sha256/build/untouched.wasm | Bin 6721 -> 6823 bytes packages/as-sha256/build/untouched.wat | 298 +++++++++++-------- packages/as-sha256/src/index.ts | 22 +- packages/as-sha256/src/wasm.ts | 9 +- packages/as-sha256/src/wasmCode.ts | 2 +- packages/as-sha256/src/wasmSimdCode.ts | 2 +- 14 files changed, 420 insertions(+), 330 deletions(-) diff --git a/packages/as-sha256/assembly/common.ts b/packages/as-sha256/assembly/common.ts index 7512d2808..37491dcb5 100644 --- a/packages/as-sha256/assembly/common.ts +++ b/packages/as-sha256/assembly/common.ts @@ -119,8 +119,10 @@ function SIG1(x: u32): u32 { * Update intermediate hash values * @param wPtr pointer to expanded message block memory * @param mPtr pointer to message block memory, pass 0 if wPtr is precomputed for e.g. in digest64 + * @param step increment for how many bytes to step through when loading data. allows for sparse + * input to accommodate non-simd batchHash4HashObjectInputs without an extra copy */ -function hashBlocks(wPtr: usize, mPtr: usize): void { +function hashBlocks(wPtr: usize, mPtr: usize, step: i32): void { a = H0; b = H1; c = H2; @@ -133,7 +135,7 @@ function hashBlocks(wPtr: usize, mPtr: usize): void { // Load message blocks into first 16 expanded message blocks for (i = 0; i < 16; i++) { store32(wPtr, i, - load32be(mPtr, i) + load32be(mPtr, i * step) ); } // Expand message blocks 17-64 @@ -229,7 +231,7 @@ export function update(dataPtr: usize, dataLength: i32): void { mLength += 64 - mLength; dataPos += 64 - mLength; dataLength -= 64 - mLength; - hashBlocks(wPtr, mPtr); + hashBlocks(wPtr, mPtr, 1); mLength = 0; } else { // we can't fully fill the buffer but we exhaust the whole data buffer @@ -242,7 +244,7 @@ export function update(dataPtr: usize, dataLength: i32): void { } // If input has remaining 64-byte chunks, hash those for (let i = 0; i < dataLength / 64; i++, dataPos += 64) { - hashBlocks(wPtr, dataPtr + dataPos); + hashBlocks(wPtr, dataPtr + dataPos, 1); } // If any additional bytes remain, copy into message blocks buffer if (dataLength & 63) { @@ -260,7 +262,7 @@ export function final(outPtr: usize): void { } if ((bytesHashed & 63) >= 56) { fill(mPtr + mLength, 0, 64 - mLength); - hashBlocks(wPtr, mPtr); + hashBlocks(wPtr, mPtr, 1); mLength = 0; } if ((bytesHashed & 63) >= 63) { @@ -273,7 +275,7 @@ export function final(outPtr: usize): void { store(mPtr + 64 - 4, bswap(bytesHashed << 3)); // length -- low bits // hash round for padding - hashBlocks(wPtr, mPtr); + hashBlocks(wPtr, mPtr, 1); store32(outPtr, 0, bswap(H0)); store32(outPtr, 1, bswap(H1)); @@ -291,9 +293,9 @@ export function digest(length: i32): void { final(outputPtr); } -export function digest64(inPtr: usize, outPtr: usize): void { +export function digest64(inPtr: usize, outPtr: usize, step: i32): void { init(); - hashBlocks(wPtr,inPtr); + hashBlocks(wPtr, inPtr, step); hashPreCompW(w64Ptr); store32(outPtr, 0, bswap(H0)); store32(outPtr, 1, bswap(H1)); diff --git a/packages/as-sha256/assembly/index.ts b/packages/as-sha256/assembly/index.ts index 7ecacf41e..ea5969be5 100644 --- a/packages/as-sha256/assembly/index.ts +++ b/packages/as-sha256/assembly/index.ts @@ -4,10 +4,24 @@ export const HAS_SIMD = false; export {INPUT_LENGTH, PARALLEL_FACTOR, input, output, init, update, final, digest, digest64}; +/** + * Batch hash 4 inputs on non-simd systems. Proxies input data through standard digest64 + */ export function batchHash4UintArray64s(outPtr: usize): void { for (let i = 0; i < 4; i++) { const inOffset = changetype(i * 64); const outOffset = changetype(i * 32); - digest64(inputPtr + inOffset, outPtr + outOffset); + digest64(inputPtr + inOffset, outPtr + outOffset, 1); + } +} + +/** + * Batch hash 4 inputs on non-simd systems. Proxies input data through standard digest64 + */ +export function batchHash4HashObjectInputs(outPtr: usize): void { + for (let i = 0; i < 4; i++) { + const inOffset = changetype(i * 4); + const outOffset = changetype(i * 32); + digest64(inputPtr + inOffset, outPtr + outOffset, 4); } } diff --git a/packages/as-sha256/build/optimized.simd.wasm b/packages/as-sha256/build/optimized.simd.wasm index c1fb86d93269475d8b5860f5569796cce445ca7b..e41db8ebce8ea28de095ab17a56e4bcb77cb3852 100644 GIT binary patch delta 212 zcmZ3}%y_7oQJo>NIG2%ufq_w*BY~;Do*{v;p0OUp0+NhCE(1dXbA5gNL`4||HfA|l zph^Y?c19*9CPpSkMkW>(Mh0eP7FHm^%(^jFo|$po=33^9MvN~f`nkwj zI5L$eF*`D6W$7|7C@?B8gJ?&I5)jjo5iIH`P*McqZr*Ixz{t31vWbN|lOyBgY6~L} qwbsInaoXf37EvIMon;=7+Puaxl94NdK|oB|RDnT(X)~|&d^P~*C@l~G delta 242 zcmW-YKT5<<7{q73?)57_<;XSa8iM3!6&pEJV;MD~J$qg*90EgjBZsN6A2&Gzk2U((C zjBlgS`Sqkmq@C691!9T_g%o25RfAv(6Dh%XW(IFx8=Ugk|MHQ1@{Rs<%}hzx+1uPr z4$Uw{wp~cQCRNH*3azRwpv5+em3qE%z7|P6X{-O}-IK3wm>;-@yzAcc9;favKXXU@ UvH$F!a`6Poa<-GgXZz3bKU=;wIRF3v diff --git a/packages/as-sha256/build/optimized.simd.wat b/packages/as-sha256/build/optimized.simd.wat index 1cad265d1..090e8e440 100644 --- a/packages/as-sha256/build/optimized.simd.wat +++ b/packages/as-sha256/build/optimized.simd.wat @@ -4,8 +4,9 @@ (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32))) (type $4 (func)) - (type $5 (func (param i32 i32 i32 i32))) - (type $6 (func (param i32 i32 i64))) + (type $5 (func (param i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $assembly/simd/H0V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (global $assembly/simd/H1V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) @@ -5635,8 +5636,8 @@ i32.const 0 global.set $assembly/common/bytesHashed ) - (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) - (local $2 i32) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) global.get $assembly/common/H0 global.set $assembly/common/a global.get $assembly/common/H1 @@ -5664,22 +5665,26 @@ global.get $assembly/common/i i32.const 2 i32.shl - local.tee $2 i32.add local.get $1 + global.get $assembly/common/i local.get $2 + i32.mul + i32.const 2 + i32.shl + local.tee $3 i32.const 3 i32.add i32.add i32.load8_u local.get $1 - local.get $2 + local.get $3 i32.add i32.load8_u i32.const 24 i32.shl local.get $1 - local.get $2 + local.get $3 i32.const 1 i32.add i32.add @@ -5688,7 +5693,7 @@ i32.shl i32.or local.get $1 - local.get $2 + local.get $3 i32.const 2 i32.add i32.add @@ -5954,6 +5959,7 @@ local.set $1 global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -5982,6 +5988,7 @@ local.get $0 local.get $2 i32.add + i32.const 1 call $assembly/common/hashBlocks local.get $3 i32.const 1 @@ -6064,6 +6071,7 @@ end global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -6122,6 +6130,7 @@ i32.store offset=60 global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks local.get $0 global.get $assembly/common/H0 @@ -6311,10 +6320,11 @@ i32.add global.set $assembly/common/H7 ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (param $2 i32) call $assembly/common/init global.get $assembly/common/wPtr local.get $0 + local.get $2 call $assembly/common/hashBlocks global.get $assembly/common/w64Ptr call $assembly/common/hashPreCompW diff --git a/packages/as-sha256/build/optimized.wasm b/packages/as-sha256/build/optimized.wasm index 731df0a04ac07a40775a5df53276059313b82df8..e44cfe69fd18f4fca9a7234a7a05d3c4a498b469 100644 GIT binary patch delta 378 zcmXAjzfQtX6vofFw=LLPV)-K|k#K971QTNjn@R5^EV5u?oG6Gw!yiNI;8fjRND~ux z7ZVp{@CAGY6JNpj1a9`?aL)JpzMSNIFV?SB2G^e;0AMxQC1D6%Tn&a@8pd|9RViw; zkdH3_5=2pmN|8`RKve1C;*a)L~tl3?{Sr4S^(X7?{zY3i;(LeyYlM{4AQS?H-yf#o=J* z1PMHjc8-&Aj5}0N&)Wmw$f;DZ8AuekN`)EBrCt6c9*KSmCbLT%IEn7{c0mUY0)=Mg z*$NdwVtk7d?1%`Aj@f~fTh_pb=$)NOlQyPOLZhQ*Y|G3>Uq+`^Lky|IsZg4VW0yJQ XvLeKRDyy37F`;Ks0~uRZQ+MnF;qNU$=CiU8#p7}%JYnVDD^7?~It z85kK^CdM9N?qTGatiq@=IhE1TK#(;pGcPfRL5M9SGd;Dqgh7}C!Z0&o;AhKC&CM^W zWMbf86yaeM;`$>dviTb0RaVBwlh?3Y=qNE|DKIK9IWlKu=`t{Ym>}9wq693;2o`k| zC@BJQH;Zx1Wa0>85a3ppRbZIBlgnR6i;=OO*+GHPk;Q|>L0KNiU@OT|0Gi{-T9PHe z52P8h6d8FKxw*O5O_t|&pPa#MG+|GIp3f7)DyXa|AT;?0Psrv< H-Uem>u)#bp diff --git a/packages/as-sha256/build/optimized.wat b/packages/as-sha256/build/optimized.wat index 2cb2d3f91..329953b64 100644 --- a/packages/as-sha256/build/optimized.wat +++ b/packages/as-sha256/build/optimized.wat @@ -2,10 +2,11 @@ (type $0 (func (param i32 i32))) (type $1 (func (param i32))) (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func)) - (type $5 (func (param i32 i32 i32 i32))) - (type $6 (func (param i32 i32 i64))) + (type $3 (func (param i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func)) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $assembly/common/PARALLEL_FACTOR i32 (i32.const 4)) (global $assembly/common/INPUT_LENGTH i32 (i32.const 512)) @@ -65,6 +66,7 @@ (data $8.1 (i32.const 1960) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (export "HAS_SIMD" (global $assembly/index/HAS_SIMD)) (export "batchHash4UintArray64s" (func $assembly/index/batchHash4UintArray64s)) + (export "batchHash4HashObjectInputs" (func $assembly/index/batchHash4HashObjectInputs)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) @@ -883,8 +885,8 @@ i32.const 0 global.set $assembly/common/bytesHashed ) - (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) - (local $2 i32) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) global.get $assembly/common/H0 global.set $assembly/common/a global.get $assembly/common/H1 @@ -912,22 +914,26 @@ global.get $assembly/common/i i32.const 2 i32.shl - local.tee $2 i32.add local.get $1 + global.get $assembly/common/i local.get $2 + i32.mul + i32.const 2 + i32.shl + local.tee $3 i32.const 3 i32.add i32.add i32.load8_u local.get $1 - local.get $2 + local.get $3 i32.add i32.load8_u i32.const 24 i32.shl local.get $1 - local.get $2 + local.get $3 i32.const 1 i32.add i32.add @@ -936,7 +942,7 @@ i32.shl i32.or local.get $1 - local.get $2 + local.get $3 i32.const 2 i32.add i32.add @@ -1324,10 +1330,11 @@ i32.rotr i32.or ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (param $2 i32) call $assembly/common/init global.get $assembly/common/wPtr local.get $0 + local.get $2 call $assembly/common/hashBlocks global.get $assembly/common/w64Ptr call $assembly/common/hashPreCompW @@ -1365,30 +1372,16 @@ i32.store offset=28 ) (func $assembly/index/batchHash4UintArray64s (param $0 i32) - (local $1 i32) - loop $for-loop|0 - local.get $1 - i32.const 4 - i32.lt_s - if - global.get $assembly/common/inputPtr - local.get $1 - i32.const 6 - i32.shl - i32.add - local.get $0 - local.get $1 - i32.const 5 - i32.shl - i32.add - call $assembly/common/digest64 - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $for-loop|0 - end - end + local.get $0 + i32.const 1 + i32.const 6 + call $byn$mgfn-shared$assembly/index/batchHash4UintArray64s + ) + (func $assembly/index/batchHash4HashObjectInputs (param $0 i32) + local.get $0 + i32.const 4 + i32.const 2 + call $byn$mgfn-shared$assembly/index/batchHash4UintArray64s ) (func $assembly/common/update (param $0 i32) (param $1 i32) (local $2 i32) @@ -1428,6 +1421,7 @@ local.set $1 global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -1456,6 +1450,7 @@ local.get $0 local.get $2 i32.add + i32.const 1 call $assembly/common/hashBlocks local.get $3 i32.const 1 @@ -1538,6 +1533,7 @@ end global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -1596,6 +1592,7 @@ i32.store offset=60 global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks local.get $0 global.get $assembly/common/H0 @@ -1674,4 +1671,31 @@ global.get $assembly/common/output global.set $assembly/common/outputPtr ) + (func $byn$mgfn-shared$assembly/index/batchHash4UintArray64s (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + loop $for-loop|0 + local.get $3 + i32.const 4 + i32.lt_s + if + global.get $assembly/common/inputPtr + local.get $3 + local.get $2 + i32.shl + i32.add + local.get $0 + local.get $3 + i32.const 5 + i32.shl + i32.add + local.get $1 + call $assembly/common/digest64 + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + ) ) diff --git a/packages/as-sha256/build/untouched.simd.wasm b/packages/as-sha256/build/untouched.simd.wasm index b4892723dd0722acbbf0559a8c87dd85cd5a46b6..08159466b8a5a466d2201f795c974cebc754ceeb 100644 GIT binary patch delta 908 zcmYk)Id2m|6bJB`*Wu={?G;5Rx3d2X#U& zT%*S1@t8v~ct!*iM-1^`U5JcGo4;~s>SN0ZW*JZt2_)y)AD>!Jv8#a6NFhD%iA&F* z=NTuUEHcQ>PY~l%UW$C=kmqg!_|xxC+u;H?yQo60EvTUPj2ci81r(zxJr#9FC6r8I z!l5)7aZJ4$@u*EGb3%MT6_ioAN(e5?Rax@`s-cS7l~Nsb6Q6J>a=FdAacn(K;tm>| z;t!~a2AWqX0WDzxi_rj zYr_$GSew2)JeB9uABT^Xk<;GMesnuI8pyZPpGU8wmxJTad^@{1?yK;PlJ(Hv(vKjZ z{B6DI-&MQO0WyMIea+t?4~{)W0ldEA-ydnrNQ&$0tcmC}+5eN6Y0@Z4=^LzRB$2Y3 zo@vH7l+`y`bI63qTF%WlZ(Q;4vJx0TO%L7pBOHKi;(WQ}?;=_!#E3Cba7vI`FR#hhdO<(#v&AkPJnDHV`MVN)>q z*RIH#nNkTwlr~Cblucy8A;<0dW#ia>T*N1+aEUjiDk`XMN+z^}Eo`q6*a=P^wfq`t zCcNN~;2t$oU9678E%Xhl>zmZjM+DT-n4xa`IWYV0dqjNUCJ4=Q{q5eGp#_cBIcVMD zo`=*%+o%PH6mQoyrKa7_Qb%8k_!dL-q{@}{@^PO8A)M% zku`!4!d4?|jT%KUeTg-WC}LLQYfTu3lKL`h3JD~A%c(V|jY}ClVD^wk#;Uj0tO-$0 u@3ZES<)2_Riu_s&CQLSoWX(PW}bZ354kY diff --git a/packages/as-sha256/build/untouched.simd.wat b/packages/as-sha256/build/untouched.simd.wat index 3a787f1d3..aaf90e75b 100644 --- a/packages/as-sha256/build/untouched.simd.wat +++ b/packages/as-sha256/build/untouched.simd.wat @@ -3,8 +3,8 @@ (type $1 (func (param i32 i32))) (type $2 (func)) (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32))) - (type $5 (func (param i32 i32 i32))) + (type $4 (func (param i32 i32 i32))) + (type $5 (func (param i32))) (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (param i32 i64 i32))) @@ -10742,8 +10742,7 @@ i32.const 0 global.set $assembly/common/bytesHashed ) - (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) - (local $2 i32) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -10782,6 +10781,7 @@ (local $38 i32) (local $39 i32) (local $40 i32) + (local $41 i32) global.get $assembly/common/H0 global.set $assembly/common/a global.get $assembly/common/H1 @@ -10806,27 +10806,29 @@ i32.lt_u if local.get $0 - local.set $13 - global.get $assembly/common/i local.set $14 + global.get $assembly/common/i + local.set $15 block $assembly/common/load32be|inlined.5 (result i32) local.get $1 - local.set $2 - global.get $assembly/common/i local.set $3 - local.get $3 + global.get $assembly/common/i + local.get $2 + i32.mul + local.set $4 + local.get $4 i32.const 2 i32.shl - local.set $4 + local.set $5 block $assembly/common/load8|inlined.20 (result i32) - local.get $2 - local.set $5 - local.get $4 - i32.const 0 - i32.add + local.get $3 local.set $6 local.get $5 + i32.const 0 + i32.add + local.set $7 local.get $6 + local.get $7 i32.add i32.load8_u br $assembly/common/load8|inlined.20 @@ -10836,14 +10838,14 @@ i32.const 24 i32.shl block $assembly/common/load8|inlined.21 (result i32) - local.get $2 - local.set $7 - local.get $4 + local.get $3 + local.set $8 + local.get $5 i32.const 1 i32.add - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.add i32.load8_u br $assembly/common/load8|inlined.21 @@ -10854,14 +10856,14 @@ i32.shl i32.or block $assembly/common/load8|inlined.22 (result i32) - local.get $2 - local.set $9 - local.get $4 + local.get $3 + local.set $10 + local.get $5 i32.const 2 i32.add - local.set $10 - local.get $9 + local.set $11 local.get $10 + local.get $11 i32.add i32.load8_u br $assembly/common/load8|inlined.22 @@ -10872,14 +10874,14 @@ i32.shl i32.or block $assembly/common/load8|inlined.23 (result i32) - local.get $2 - local.set $11 - local.get $4 + local.get $3 + local.set $12 + local.get $5 i32.const 3 i32.add - local.set $12 - local.get $11 + local.set $13 local.get $12 + local.get $13 i32.add i32.load8_u br $assembly/common/load8|inlined.23 @@ -10891,13 +10893,13 @@ i32.or br $assembly/common/load32be|inlined.5 end - local.set $15 - local.get $13 + local.set $16 local.get $14 + local.get $15 i32.const 2 i32.shl i32.add - local.get $15 + local.get $16 i32.store global.get $assembly/common/i i32.const 1 @@ -10914,34 +10916,34 @@ i32.lt_u if local.get $0 - local.set $26 - global.get $assembly/common/i local.set $27 + global.get $assembly/common/i + local.set $28 block $assembly/common/SIG1|inlined.0 (result i32) block $assembly/common/load32|inlined.0 (result i32) local.get $0 - local.set $16 + local.set $17 global.get $assembly/common/i i32.const 2 i32.sub - local.set $17 - local.get $16 + local.set $18 local.get $17 + local.get $18 i32.const 2 i32.shl i32.add i32.load br $assembly/common/load32|inlined.0 end - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 17 i32.rotr - local.get $18 + local.get $19 i32.const 19 i32.rotr i32.xor - local.get $18 + local.get $19 i32.const 10 i32.shr_u i32.xor @@ -10949,13 +10951,13 @@ end block $assembly/common/load32|inlined.1 (result i32) local.get $0 - local.set $19 + local.set $20 global.get $assembly/common/i i32.const 7 i32.sub - local.set $20 - local.get $19 + local.set $21 local.get $20 + local.get $21 i32.const 2 i32.shl i32.add @@ -10966,28 +10968,28 @@ block $assembly/common/SIG0|inlined.0 (result i32) block $assembly/common/load32|inlined.2 (result i32) local.get $0 - local.set $21 + local.set $22 global.get $assembly/common/i i32.const 15 i32.sub - local.set $22 - local.get $21 + local.set $23 local.get $22 + local.get $23 i32.const 2 i32.shl i32.add i32.load br $assembly/common/load32|inlined.2 end - local.set $23 - local.get $23 + local.set $24 + local.get $24 i32.const 7 i32.rotr - local.get $23 + local.get $24 i32.const 18 i32.rotr i32.xor - local.get $23 + local.get $24 i32.const 3 i32.shr_u i32.xor @@ -10996,13 +10998,13 @@ i32.add block $assembly/common/load32|inlined.3 (result i32) local.get $0 - local.set $24 + local.set $25 global.get $assembly/common/i i32.const 16 i32.sub - local.set $25 - local.get $24 + local.set $26 local.get $25 + local.get $26 i32.const 2 i32.shl i32.add @@ -11010,13 +11012,13 @@ br $assembly/common/load32|inlined.3 end i32.add - local.set $28 - local.get $26 + local.set $29 local.get $27 + local.get $28 i32.const 2 i32.shl i32.add - local.get $28 + local.get $29 i32.store global.get $assembly/common/i i32.const 1 @@ -11035,15 +11037,15 @@ global.get $assembly/common/h block $assembly/common/EP1|inlined.0 (result i32) global.get $assembly/common/e - local.set $29 - local.get $29 + local.set $30 + local.get $30 i32.const 6 i32.rotr - local.get $29 + local.get $30 i32.const 11 i32.rotr i32.xor - local.get $29 + local.get $30 i32.const 25 i32.rotr i32.xor @@ -11052,18 +11054,18 @@ i32.add block $assembly/common/CH|inlined.0 (result i32) global.get $assembly/common/e - local.set $30 - global.get $assembly/common/f local.set $31 - global.get $assembly/common/g + global.get $assembly/common/f local.set $32 - local.get $30 + global.get $assembly/common/g + local.set $33 local.get $31 + local.get $32 i32.and - local.get $30 + local.get $31 i32.const -1 i32.xor - local.get $32 + local.get $33 i32.and i32.xor br $assembly/common/CH|inlined.0 @@ -11071,11 +11073,11 @@ i32.add block $assembly/common/load32|inlined.4 (result i32) global.get $assembly/common/kPtr - local.set $33 - global.get $assembly/common/i local.set $34 - local.get $33 + global.get $assembly/common/i + local.set $35 local.get $34 + local.get $35 i32.const 2 i32.shl i32.add @@ -11085,11 +11087,11 @@ i32.add block $assembly/common/load32|inlined.5 (result i32) local.get $0 - local.set $35 - global.get $assembly/common/i local.set $36 - local.get $35 + global.get $assembly/common/i + local.set $37 local.get $36 + local.get $37 i32.const 2 i32.shl i32.add @@ -11100,15 +11102,15 @@ global.set $assembly/common/t1 block $assembly/common/EP0|inlined.0 (result i32) global.get $assembly/common/a - local.set $37 - local.get $37 + local.set $38 + local.get $38 i32.const 2 i32.rotr - local.get $37 + local.get $38 i32.const 13 i32.rotr i32.xor - local.get $37 + local.get $38 i32.const 22 i32.rotr i32.xor @@ -11116,20 +11118,20 @@ end block $assembly/common/MAJ|inlined.0 (result i32) global.get $assembly/common/a - local.set $38 - global.get $assembly/common/b local.set $39 - global.get $assembly/common/c + global.get $assembly/common/b local.set $40 - local.get $38 + global.get $assembly/common/c + local.set $41 local.get $39 - i32.and - local.get $38 local.get $40 i32.and - i32.xor local.get $39 + local.get $41 + i32.and + i32.xor local.get $40 + local.get $41 i32.and i32.xor br $assembly/common/MAJ|inlined.0 @@ -11241,6 +11243,7 @@ local.set $1 global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -11279,6 +11282,7 @@ local.get $0 local.get $2 i32.add + i32.const 1 call $assembly/common/hashBlocks local.get $3 i32.const 1 @@ -11439,6 +11443,7 @@ end global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -11518,6 +11523,7 @@ i32.store global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks local.get $0 local.set $15 @@ -11824,8 +11830,7 @@ i32.add global.set $assembly/common/H7 ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) - (local $2 i32) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -11849,123 +11854,125 @@ (local $23 i32) (local $24 i32) (local $25 i32) + (local $26 i32) call $assembly/common/init global.get $assembly/common/wPtr local.get $0 + local.get $2 call $assembly/common/hashBlocks global.get $assembly/common/w64Ptr call $assembly/common/hashPreCompW local.get $1 - local.set $2 - i32.const 0 local.set $3 + i32.const 0 + local.set $4 global.get $assembly/common/H0 call $~lib/polyfills/bswap - local.set $4 - local.get $2 + local.set $5 local.get $3 + local.get $4 i32.const 2 i32.shl i32.add - local.get $4 + local.get $5 i32.store local.get $1 - local.set $5 - i32.const 1 local.set $6 + i32.const 1 + local.set $7 global.get $assembly/common/H1 call $~lib/polyfills/bswap - local.set $7 - local.get $5 + local.set $8 local.get $6 + local.get $7 i32.const 2 i32.shl i32.add - local.get $7 + local.get $8 i32.store local.get $1 - local.set $8 - i32.const 2 local.set $9 + i32.const 2 + local.set $10 global.get $assembly/common/H2 call $~lib/polyfills/bswap - local.set $10 - local.get $8 + local.set $11 local.get $9 + local.get $10 i32.const 2 i32.shl i32.add - local.get $10 + local.get $11 i32.store local.get $1 - local.set $11 - i32.const 3 local.set $12 + i32.const 3 + local.set $13 global.get $assembly/common/H3 call $~lib/polyfills/bswap - local.set $13 - local.get $11 + local.set $14 local.get $12 + local.get $13 i32.const 2 i32.shl i32.add - local.get $13 + local.get $14 i32.store local.get $1 - local.set $14 - i32.const 4 local.set $15 + i32.const 4 + local.set $16 global.get $assembly/common/H4 call $~lib/polyfills/bswap - local.set $16 - local.get $14 + local.set $17 local.get $15 + local.get $16 i32.const 2 i32.shl i32.add - local.get $16 + local.get $17 i32.store local.get $1 - local.set $17 - i32.const 5 local.set $18 + i32.const 5 + local.set $19 global.get $assembly/common/H5 call $~lib/polyfills/bswap - local.set $19 - local.get $17 + local.set $20 local.get $18 + local.get $19 i32.const 2 i32.shl i32.add - local.get $19 + local.get $20 i32.store local.get $1 - local.set $20 - i32.const 6 local.set $21 + i32.const 6 + local.set $22 global.get $assembly/common/H6 call $~lib/polyfills/bswap - local.set $22 - local.get $20 + local.set $23 local.get $21 + local.get $22 i32.const 2 i32.shl i32.add - local.get $22 + local.get $23 i32.store local.get $1 - local.set $23 - i32.const 7 local.set $24 + i32.const 7 + local.set $25 global.get $assembly/common/H7 call $~lib/polyfills/bswap - local.set $25 - local.get $23 + local.set $26 local.get $24 + local.get $25 i32.const 2 i32.shl i32.add - local.get $25 + local.get $26 i32.store ) (func $~start diff --git a/packages/as-sha256/build/untouched.wasm b/packages/as-sha256/build/untouched.wasm index 3bc1a4c3580fd5c173762a155627c0799632eb94..42769d2c1ac590ad143979ad8ce3533fd3ac57fb 100644 GIT binary patch delta 1076 zcmY+DOK;Oa5XX1cc3#e76W3{yHtkF{P1BarR)Pv{U5NudAcVw;1N6bui4bWF3MWg5 zGXnX{8F57Y0`LjA@eR0hMFPRtDrvZk<@wG3KjYo;mrEZmzis9r5(hGhAbQv7Zf|c1 z5C9+q$E@Us4UU~;(v%}?TT1Cz!m%t6mi6g5fb|hd@k{8oTStfC@#E`<8?rK)1o3 z73yKn$O(rMx9gdDC+(M_RjsJ6tF(rz*dK9N8;!A#Yw=?B?st-H-sCUCBqA(2N1f>KxNtvMK4e=cY7oBo%a?sf&3mq|}|# zqOqu?3rx#c+{IFg%Tru2HYx2gu3`mMN~=>^GY)yW7#rWu1NkOHbzO?@`F6kM5e!f~5m}!C0Y6Q$0>X?EAl*4ZW^5PwVv! F`!8DOw=4hv delta 1017 zcmYk4ON$dh5XZZF9!X{53?_Xbv+5&uov%wM-^6OCnDs*5?x_D2!eP} z=0kY$Aba$pU%{hC@f&y*w5HK)E;U2_`v0%0?)q@!>*2djNu()H@AH(s@5ToQ`;0Tr zIb#$Hf<6{^tUO~<4znyF1h*NtIkW9g=bT$_d5}HlarT+(+Q@ly_VmFMw(FjrJ$^Ww zv%Rb$nsUG7a;CY@0`7UQhx?a@;=XVHaQGlg366j!mFPYo{-7YTY$0&kTUiSOtBJ{_b>n&{=KN3*~ZIZ|_cAyQN zD@lSIum9vS3uk*&k%di(_%rPOyzpI*){bH>MMx@RmCCnVKAXEoXlVV!|Yad zdU+vFdHPcDb}D1l2PS*Um3`U}+6&FlQUy6c8-&@91neV07n@T@b97aaXd&MdGkIZ2 zi&|hwm56#!gp#4&lKR@hKzT&V`3|H8mzTJrZ48x9SV9FtL*YXIW&`hGy7S)7Rn*;e7SkRec%6<-Hq;K zAET4(S2X5tvU~Ms+4uUZ^&K))vHrpmZI9Kiw&v2L`YO&Y8o!;98p++u7tI~}FS@^{ Ae*gdg diff --git a/packages/as-sha256/build/untouched.wat b/packages/as-sha256/build/untouched.wat index 393da547b..f2cffa629 100644 --- a/packages/as-sha256/build/untouched.wat +++ b/packages/as-sha256/build/untouched.wat @@ -2,8 +2,8 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32))) (type $2 (func)) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) @@ -70,6 +70,7 @@ (elem $0 (i32.const 1)) (export "HAS_SIMD" (global $assembly/index/HAS_SIMD)) (export "batchHash4UintArray64s" (func $assembly/index/batchHash4UintArray64s)) + (export "batchHash4HashObjectInputs" (func $assembly/index/batchHash4HashObjectInputs)) (export "INPUT_LENGTH" (global $assembly/common/INPUT_LENGTH)) (export "PARALLEL_FACTOR" (global $assembly/common/PARALLEL_FACTOR)) (export "input" (global $assembly/common/input)) @@ -1768,8 +1769,7 @@ i32.const 0 global.set $assembly/common/bytesHashed ) - (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) - (local $2 i32) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1808,6 +1808,7 @@ (local $38 i32) (local $39 i32) (local $40 i32) + (local $41 i32) global.get $assembly/common/H0 global.set $assembly/common/a global.get $assembly/common/H1 @@ -1832,27 +1833,29 @@ i32.lt_u if local.get $0 - local.set $13 - global.get $assembly/common/i local.set $14 + global.get $assembly/common/i + local.set $15 block $assembly/common/load32be|inlined.0 (result i32) local.get $1 - local.set $2 - global.get $assembly/common/i local.set $3 - local.get $3 + global.get $assembly/common/i + local.get $2 + i32.mul + local.set $4 + local.get $4 i32.const 2 i32.shl - local.set $4 + local.set $5 block $assembly/common/load8|inlined.0 (result i32) - local.get $2 - local.set $5 - local.get $4 - i32.const 0 - i32.add + local.get $3 local.set $6 local.get $5 + i32.const 0 + i32.add + local.set $7 local.get $6 + local.get $7 i32.add i32.load8_u br $assembly/common/load8|inlined.0 @@ -1862,14 +1865,14 @@ i32.const 24 i32.shl block $assembly/common/load8|inlined.1 (result i32) - local.get $2 - local.set $7 - local.get $4 + local.get $3 + local.set $8 + local.get $5 i32.const 1 i32.add - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.add i32.load8_u br $assembly/common/load8|inlined.1 @@ -1880,14 +1883,14 @@ i32.shl i32.or block $assembly/common/load8|inlined.2 (result i32) - local.get $2 - local.set $9 - local.get $4 + local.get $3 + local.set $10 + local.get $5 i32.const 2 i32.add - local.set $10 - local.get $9 + local.set $11 local.get $10 + local.get $11 i32.add i32.load8_u br $assembly/common/load8|inlined.2 @@ -1898,14 +1901,14 @@ i32.shl i32.or block $assembly/common/load8|inlined.3 (result i32) - local.get $2 - local.set $11 - local.get $4 + local.get $3 + local.set $12 + local.get $5 i32.const 3 i32.add - local.set $12 - local.get $11 + local.set $13 local.get $12 + local.get $13 i32.add i32.load8_u br $assembly/common/load8|inlined.3 @@ -1917,13 +1920,13 @@ i32.or br $assembly/common/load32be|inlined.0 end - local.set $15 - local.get $13 + local.set $16 local.get $14 + local.get $15 i32.const 2 i32.shl i32.add - local.get $15 + local.get $16 i32.store global.get $assembly/common/i i32.const 1 @@ -1940,34 +1943,34 @@ i32.lt_u if local.get $0 - local.set $26 - global.get $assembly/common/i local.set $27 + global.get $assembly/common/i + local.set $28 block $assembly/common/SIG1|inlined.0 (result i32) block $assembly/common/load32|inlined.0 (result i32) local.get $0 - local.set $16 + local.set $17 global.get $assembly/common/i i32.const 2 i32.sub - local.set $17 - local.get $16 + local.set $18 local.get $17 + local.get $18 i32.const 2 i32.shl i32.add i32.load br $assembly/common/load32|inlined.0 end - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 17 i32.rotr - local.get $18 + local.get $19 i32.const 19 i32.rotr i32.xor - local.get $18 + local.get $19 i32.const 10 i32.shr_u i32.xor @@ -1975,13 +1978,13 @@ end block $assembly/common/load32|inlined.1 (result i32) local.get $0 - local.set $19 + local.set $20 global.get $assembly/common/i i32.const 7 i32.sub - local.set $20 - local.get $19 + local.set $21 local.get $20 + local.get $21 i32.const 2 i32.shl i32.add @@ -1992,28 +1995,28 @@ block $assembly/common/SIG0|inlined.0 (result i32) block $assembly/common/load32|inlined.2 (result i32) local.get $0 - local.set $21 + local.set $22 global.get $assembly/common/i i32.const 15 i32.sub - local.set $22 - local.get $21 + local.set $23 local.get $22 + local.get $23 i32.const 2 i32.shl i32.add i32.load br $assembly/common/load32|inlined.2 end - local.set $23 - local.get $23 + local.set $24 + local.get $24 i32.const 7 i32.rotr - local.get $23 + local.get $24 i32.const 18 i32.rotr i32.xor - local.get $23 + local.get $24 i32.const 3 i32.shr_u i32.xor @@ -2022,13 +2025,13 @@ i32.add block $assembly/common/load32|inlined.3 (result i32) local.get $0 - local.set $24 + local.set $25 global.get $assembly/common/i i32.const 16 i32.sub - local.set $25 - local.get $24 + local.set $26 local.get $25 + local.get $26 i32.const 2 i32.shl i32.add @@ -2036,13 +2039,13 @@ br $assembly/common/load32|inlined.3 end i32.add - local.set $28 - local.get $26 + local.set $29 local.get $27 + local.get $28 i32.const 2 i32.shl i32.add - local.get $28 + local.get $29 i32.store global.get $assembly/common/i i32.const 1 @@ -2061,15 +2064,15 @@ global.get $assembly/common/h block $assembly/common/EP1|inlined.0 (result i32) global.get $assembly/common/e - local.set $29 - local.get $29 + local.set $30 + local.get $30 i32.const 6 i32.rotr - local.get $29 + local.get $30 i32.const 11 i32.rotr i32.xor - local.get $29 + local.get $30 i32.const 25 i32.rotr i32.xor @@ -2078,18 +2081,18 @@ i32.add block $assembly/common/CH|inlined.0 (result i32) global.get $assembly/common/e - local.set $30 - global.get $assembly/common/f local.set $31 - global.get $assembly/common/g + global.get $assembly/common/f local.set $32 - local.get $30 + global.get $assembly/common/g + local.set $33 local.get $31 + local.get $32 i32.and - local.get $30 + local.get $31 i32.const -1 i32.xor - local.get $32 + local.get $33 i32.and i32.xor br $assembly/common/CH|inlined.0 @@ -2097,11 +2100,11 @@ i32.add block $assembly/common/load32|inlined.4 (result i32) global.get $assembly/common/kPtr - local.set $33 - global.get $assembly/common/i local.set $34 - local.get $33 + global.get $assembly/common/i + local.set $35 local.get $34 + local.get $35 i32.const 2 i32.shl i32.add @@ -2111,11 +2114,11 @@ i32.add block $assembly/common/load32|inlined.5 (result i32) local.get $0 - local.set $35 - global.get $assembly/common/i local.set $36 - local.get $35 + global.get $assembly/common/i + local.set $37 local.get $36 + local.get $37 i32.const 2 i32.shl i32.add @@ -2126,15 +2129,15 @@ global.set $assembly/common/t1 block $assembly/common/EP0|inlined.0 (result i32) global.get $assembly/common/a - local.set $37 - local.get $37 + local.set $38 + local.get $38 i32.const 2 i32.rotr - local.get $37 + local.get $38 i32.const 13 i32.rotr i32.xor - local.get $37 + local.get $38 i32.const 22 i32.rotr i32.xor @@ -2142,20 +2145,20 @@ end block $assembly/common/MAJ|inlined.0 (result i32) global.get $assembly/common/a - local.set $38 - global.get $assembly/common/b local.set $39 - global.get $assembly/common/c + global.get $assembly/common/b local.set $40 - local.get $38 + global.get $assembly/common/c + local.set $41 local.get $39 - i32.and - local.get $38 local.get $40 i32.and - i32.xor local.get $39 + local.get $41 + i32.and + i32.xor local.get $40 + local.get $41 i32.and i32.xor br $assembly/common/MAJ|inlined.0 @@ -2434,8 +2437,7 @@ i32.or return ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) - (local $2 i32) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2459,123 +2461,125 @@ (local $23 i32) (local $24 i32) (local $25 i32) + (local $26 i32) call $assembly/common/init global.get $assembly/common/wPtr local.get $0 + local.get $2 call $assembly/common/hashBlocks global.get $assembly/common/w64Ptr call $assembly/common/hashPreCompW local.get $1 - local.set $2 - i32.const 0 local.set $3 + i32.const 0 + local.set $4 global.get $assembly/common/H0 call $~lib/polyfills/bswap - local.set $4 - local.get $2 + local.set $5 local.get $3 + local.get $4 i32.const 2 i32.shl i32.add - local.get $4 + local.get $5 i32.store local.get $1 - local.set $5 - i32.const 1 local.set $6 + i32.const 1 + local.set $7 global.get $assembly/common/H1 call $~lib/polyfills/bswap - local.set $7 - local.get $5 + local.set $8 local.get $6 + local.get $7 i32.const 2 i32.shl i32.add - local.get $7 + local.get $8 i32.store local.get $1 - local.set $8 - i32.const 2 local.set $9 + i32.const 2 + local.set $10 global.get $assembly/common/H2 call $~lib/polyfills/bswap - local.set $10 - local.get $8 + local.set $11 local.get $9 + local.get $10 i32.const 2 i32.shl i32.add - local.get $10 + local.get $11 i32.store local.get $1 - local.set $11 - i32.const 3 local.set $12 + i32.const 3 + local.set $13 global.get $assembly/common/H3 call $~lib/polyfills/bswap - local.set $13 - local.get $11 + local.set $14 local.get $12 + local.get $13 i32.const 2 i32.shl i32.add - local.get $13 + local.get $14 i32.store local.get $1 - local.set $14 - i32.const 4 local.set $15 + i32.const 4 + local.set $16 global.get $assembly/common/H4 call $~lib/polyfills/bswap - local.set $16 - local.get $14 + local.set $17 local.get $15 + local.get $16 i32.const 2 i32.shl i32.add - local.get $16 + local.get $17 i32.store local.get $1 - local.set $17 - i32.const 5 local.set $18 + i32.const 5 + local.set $19 global.get $assembly/common/H5 call $~lib/polyfills/bswap - local.set $19 - local.get $17 + local.set $20 local.get $18 + local.get $19 i32.const 2 i32.shl i32.add - local.get $19 + local.get $20 i32.store local.get $1 - local.set $20 - i32.const 6 local.set $21 + i32.const 6 + local.set $22 global.get $assembly/common/H6 call $~lib/polyfills/bswap - local.set $22 - local.get $20 + local.set $23 local.get $21 + local.get $22 i32.const 2 i32.shl i32.add - local.get $22 + local.get $23 i32.store local.get $1 - local.set $23 - i32.const 7 local.set $24 + i32.const 7 + local.set $25 global.get $assembly/common/H7 call $~lib/polyfills/bswap - local.set $25 - local.get $23 + local.set $26 local.get $24 + local.get $25 i32.const 2 i32.shl i32.add - local.get $25 + local.get $26 i32.store ) (func $assembly/index/batchHash4UintArray64s (param $0 i32) @@ -2603,6 +2607,42 @@ local.get $0 local.get $3 i32.add + i32.const 1 + call $assembly/common/digest64 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + ) + (func $assembly/index/batchHash4HashObjectInputs (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 4 + i32.lt_s + if + local.get $1 + i32.const 4 + i32.mul + local.set $2 + local.get $1 + i32.const 32 + i32.mul + local.set $3 + global.get $assembly/common/inputPtr + local.get $2 + i32.add + local.get $0 + local.get $3 + i32.add + i32.const 4 call $assembly/common/digest64 local.get $1 i32.const 1 @@ -2657,6 +2697,7 @@ local.set $1 global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -2695,6 +2736,7 @@ local.get $0 local.get $2 i32.add + i32.const 1 call $assembly/common/hashBlocks local.get $3 i32.const 1 @@ -2855,6 +2897,7 @@ end global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -2934,6 +2977,7 @@ i32.store global.get $assembly/common/wPtr global.get $assembly/common/mPtr + i32.const 1 call $assembly/common/hashBlocks local.get $0 local.set $15 diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index 346d803de..d4b14a74f 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -1,11 +1,11 @@ import {allocUnsafe} from "./alloc.js"; -import {newInstance, WasmSimdContext} from "./wasm.js"; +import {newInstance, WasmContext} from "./wasm.js"; import type {HashObject} from "./hashObject.js"; import {byteArrayIntoHashObject, byteArrayToHashObject, hashObjectToByteArray} from "./hashObject.js"; import SHA256 from "./sha256.js"; export {HashObject, byteArrayToHashObject, hashObjectToByteArray, byteArrayIntoHashObject, SHA256}; -let ctx: WasmSimdContext; +let ctx: WasmContext; export let simdEnabled: boolean; let wasmInputValue: number; let wasmOutputValue: number; @@ -16,7 +16,7 @@ let outputUint8Array32: Uint8Array; let inputUint32Array: Uint32Array; export function reinitializeInstance(useSimd?: boolean): void { - ctx = newInstance(useSimd) as WasmSimdContext; + ctx = newInstance(useSimd); simdEnabled = Boolean(ctx.HAS_SIMD.valueOf()); wasmInputValue = ctx.input.value; wasmOutputValue = ctx.output.value; @@ -47,7 +47,7 @@ export function digest(data: Uint8Array): Uint8Array { export function digest64(data: Uint8Array): Uint8Array { if (data.length === 64) { inputUint8Array.set(data); - ctx.digest64(wasmInputValue, wasmOutputValue); + ctx.digest64(wasmInputValue, wasmOutputValue, 1); return allocDigest(); } throw new Error("InvalidLengthForDigest64"); @@ -57,7 +57,7 @@ export function digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Arr if (bytes1.length === 32 && bytes2.length === 32) { inputUint8Array.set(bytes1); inputUint8Array.set(bytes2, 32); - ctx.digest64(wasmInputValue, wasmOutputValue); + ctx.digest64(wasmInputValue, wasmOutputValue, 1); return allocDigest(); } throw new Error("InvalidLengthForDigest64"); @@ -106,7 +106,7 @@ export function digest64HashObjectsInto(obj1: HashObject, obj2: HashObject, outp inputUint32Array[14] = obj2.h6; inputUint32Array[15] = obj2.h7; - ctx.digest64(wasmInputValue, wasmOutputValue); + ctx.digest64(wasmInputValue, wasmOutputValue, 1); // extracting numbers from Uint32Array causes more memory byteArrayIntoHashObject(outputUint8Array, 0, output); @@ -164,14 +164,6 @@ export function batchHash4HashObjectInputs(inputs: HashObject[]): HashObject[] { throw new Error("Input length must be 8"); } - if (!simdEnabled) { - const output: HashObject[] = new Array(4); - for (let i = 0; i < 4; i++) { - output[i] = digest64HashObjects(inputs[2 * i], inputs[2 * i + 1]); - } - return output; - } - // inputUint8Array is 256 bytes // inputUint32Array is 64 items // v128 0 @@ -304,7 +296,7 @@ export function hashInto(input: Uint8Array, output: Uint8Array): void { const outputOffset = numHashed * 32; for (let i = 0; i < remainingHash; i++) { inputUint8Array.set(input.subarray(inputOffset + i * 64, inputOffset + (i + 1) * 64), 0); - ctx.digest64(wasmInputValue, wasmOutputValue); + ctx.digest64(wasmInputValue, wasmOutputValue, 1); output.set(outputUint8Array.subarray(0, 32), outputOffset + i * 32); } } diff --git a/packages/as-sha256/src/wasm.ts b/packages/as-sha256/src/wasm.ts index 77b795154..a1e99c60e 100644 --- a/packages/as-sha256/src/wasm.ts +++ b/packages/as-sha256/src/wasm.ts @@ -20,11 +20,8 @@ export interface WasmContext { final(outPtr: number): void; digest(length: number): void; - digest64(inPtr: number, outPtr: number): void; + digest64(inPtr: number, outPtr: number, step: number): void; batchHash4UintArray64s(outPtr: number): void; -} - -export interface WasmSimdContext extends WasmContext { batchHash4HashObjectInputs(outPtr: number): void; } @@ -37,9 +34,9 @@ const importObj = { }, }; -export function newInstance(useSimd?: boolean): WasmSimdContext | WasmContext { +export function newInstance(useSimd?: boolean): WasmContext { const enableSimd = useSimd !== undefined ? useSimd : WebAssembly.validate(wasmSimdCode); return enableSimd - ? (new WebAssembly.Instance(new WebAssembly.Module(wasmSimdCode), importObj).exports as unknown as WasmSimdContext) + ? (new WebAssembly.Instance(new WebAssembly.Module(wasmSimdCode), importObj).exports as unknown as WasmContext) : (new WebAssembly.Instance(new WebAssembly.Module(wasmCode), importObj).exports as unknown as WasmContext); } diff --git a/packages/as-sha256/src/wasmCode.ts b/packages/as-sha256/src/wasmCode.ts index 5ff40a410..232cb7df7 100644 --- a/packages/as-sha256/src/wasmCode.ts +++ b/packages/as-sha256/src/wasmCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,0,96,1,127,1,127,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,21,20,0,0,0,0,0,6,2,3,3,2,4,0,1,2,0,1,0,1,1,4,5,3,1,0,1,6,187,1,37,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,0,11,7,140,1,12,8,72,65,83,95,83,73,77,68,3,36,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,16,12,73,78,80,85,84,95,76,69,78,71,84,72,3,1,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,0,5,105,110,112,117,116,3,30,6,111,117,116,112,117,116,3,32,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,17,5,102,105,110,97,108,0,18,6,100,105,103,101,115,116,0,19,8,100,105,103,101,115,116,54,52,0,15,6,109,101,109,111,114,121,2,0,8,1,20,12,1,18,10,252,22,20,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,23,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,23,11,35,23,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,24,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,25,32,2,40,2,0,65,124,113,65,4,106,106,36,25,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,4,65,133,221,158,219,123,36,5,65,242,230,187,227,3,36,6,65,186,234,191,170,122,36,7,65,255,164,185,136,5,36,8,65,140,209,149,216,121,36,9,65,171,179,143,252,1,36,10,65,153,154,131,223,5,36,11,65,0,36,34,65,0,36,35,11,227,3,1,1,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,16,73,4,64,32,0,35,20,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,16,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,32,0,35,20,65,16,107,65,2,116,106,40,2,0,32,0,35,20,65,7,107,65,2,116,106,40,2,0,32,0,35,20,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,20,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,34,1,106,40,2,0,32,1,35,2,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,1,35,14,34,2,113,32,1,35,12,34,1,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,253,1,1,2,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,2,35,14,34,1,113,32,2,35,12,34,2,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,86,0,16,11,35,29,32,0,16,12,35,3,16,13,32,1,35,4,16,14,54,2,0,32,1,35,5,16,14,54,2,4,32,1,35,6,16,14,54,2,8,32,1,35,7,16,14,54,2,12,32,1,35,8,16,14,54,2,16,32,1,35,9,16,14,54,2,20,32,1,35,10,16,14,54,2,24,32,1,35,11,16,14,54,2,28,11,42,1,1,127,3,64,32,1,65,4,72,4,64,35,31,32,1,65,6,116,106,32,0,32,1,65,5,116,106,16,15,32,1,65,1,106,33,1,12,1,11,11,11,174,1,1,2,127,35,35,32,1,106,36,35,35,34,4,64,65,192,0,35,34,107,34,2,32,1,76,4,64,35,27,35,34,106,32,0,32,2,252,10,0,0,35,34,32,2,106,36,34,65,192,0,35,34,107,33,2,32,1,65,192,0,35,34,107,107,33,1,35,29,35,27,16,12,65,0,36,34,5,35,27,35,34,106,32,0,32,1,252,10,0,0,35,34,32,1,106,36,34,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,29,32,0,32,2,106,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,27,35,34,106,32,0,32,2,106,32,1,252,10,0,0,35,34,32,1,106,36,34,11,11,146,2,1,2,127,35,35,65,63,113,65,63,73,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,35,65,63,113,65,56,79,4,64,35,27,35,34,106,34,1,65,192,0,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,29,35,27,16,12,65,0,36,34,11,35,35,65,63,113,65,63,79,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,27,35,34,106,34,1,65,56,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,27,35,35,65,128,128,128,128,2,109,16,14,54,2,56,35,27,35,35,65,3,116,16,14,54,2,60,35,29,35,27,16,12,32,0,35,4,16,14,54,2,0,32,0,35,5,16,14,54,2,4,32,0,35,6,16,14,54,2,8,32,0,35,7,16,14,54,2,12,32,0,35,8,16,14,54,2,16,32,0,35,9,16,14,54,2,20,32,0,35,10,16,14,54,2,24,32,0,35,11,16,14,54,2,28,11,14,0,16,11,35,31,32,0,16,17,35,33,16,18,11,82,0,65,196,10,40,2,0,36,2,65,148,13,40,2,0,36,3,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,24,65,192,0,16,10,36,26,35,26,36,27,65,128,8,16,10,36,28,35,28,36,29,65,128,4,16,10,36,30,35,30,36,31,65,32,16,10,36,32,35,32,36,33,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); +export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,43,8,96,2,127,127,0,96,1,127,0,96,1,127,1,127,96,3,127,127,127,0,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,6,3,23,22,0,0,0,0,0,7,2,4,4,2,5,3,1,2,3,1,1,0,1,1,5,3,5,3,1,0,1,6,187,1,37,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,0,11,7,169,1,13,8,72,65,83,95,83,73,77,68,3,36,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,16,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,17,12,73,78,80,85,84,95,76,69,78,71,84,72,3,1,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,0,5,105,110,112,117,116,3,30,6,111,117,116,112,117,116,3,32,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,18,5,102,105,110,97,108,0,19,6,100,105,103,101,115,116,0,20,8,100,105,103,101,115,116,54,52,0,15,6,109,101,109,111,114,121,2,0,8,1,21,12,1,18,10,164,23,22,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,23,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,23,11,35,23,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,24,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,25,32,2,40,2,0,65,124,113,65,4,106,106,36,25,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,4,65,133,221,158,219,123,36,5,65,242,230,187,227,3,36,6,65,186,234,191,170,122,36,7,65,255,164,185,136,5,36,8,65,140,209,149,216,121,36,9,65,171,179,143,252,1,36,10,65,153,154,131,223,5,36,11,65,0,36,34,65,0,36,35,11,233,3,1,1,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,16,73,4,64,32,0,35,20,65,2,116,106,32,1,35,20,32,2,108,65,2,116,34,3,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,32,3,65,1,106,106,45,0,0,65,16,116,114,32,1,32,3,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,16,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,32,0,35,20,65,16,107,65,2,116,106,40,2,0,32,0,35,20,65,7,107,65,2,116,106,40,2,0,32,0,35,20,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,20,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,34,1,106,40,2,0,32,1,35,2,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,1,35,14,34,2,113,32,1,35,12,34,1,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,253,1,1,2,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,2,35,14,34,1,113,32,2,35,12,34,2,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,88,0,16,11,35,29,32,0,32,2,16,12,35,3,16,13,32,1,35,4,16,14,54,2,0,32,1,35,5,16,14,54,2,4,32,1,35,6,16,14,54,2,8,32,1,35,7,16,14,54,2,12,32,1,35,8,16,14,54,2,16,32,1,35,9,16,14,54,2,20,32,1,35,10,16,14,54,2,24,32,1,35,11,16,14,54,2,28,11,10,0,32,0,65,1,65,6,16,22,11,10,0,32,0,65,4,65,2,16,22,11,178,1,1,2,127,35,35,32,1,106,36,35,35,34,4,64,65,192,0,35,34,107,34,2,32,1,76,4,64,35,27,35,34,106,32,0,32,2,252,10,0,0,35,34,32,2,106,36,34,65,192,0,35,34,107,33,2,32,1,65,192,0,35,34,107,107,33,1,35,29,35,27,65,1,16,12,65,0,36,34,5,35,27,35,34,106,32,0,32,1,252,10,0,0,35,34,32,1,106,36,34,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,29,32,0,32,2,106,65,1,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,27,35,34,106,32,0,32,2,106,32,1,252,10,0,0,35,34,32,1,106,36,34,11,11,150,2,1,2,127,35,35,65,63,113,65,63,73,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,35,65,63,113,65,56,79,4,64,35,27,35,34,106,34,1,65,192,0,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,29,35,27,65,1,16,12,65,0,36,34,11,35,35,65,63,113,65,63,79,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,27,35,34,106,34,1,65,56,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,27,35,35,65,128,128,128,128,2,109,16,14,54,2,56,35,27,35,35,65,3,116,16,14,54,2,60,35,29,35,27,65,1,16,12,32,0,35,4,16,14,54,2,0,32,0,35,5,16,14,54,2,4,32,0,35,6,16,14,54,2,8,32,0,35,7,16,14,54,2,12,32,0,35,8,16,14,54,2,16,32,0,35,9,16,14,54,2,20,32,0,35,10,16,14,54,2,24,32,0,35,11,16,14,54,2,28,11,14,0,16,11,35,31,32,0,16,18,35,33,16,19,11,82,0,65,196,10,40,2,0,36,2,65,148,13,40,2,0,36,3,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,24,65,192,0,16,10,36,26,35,26,36,27,65,128,8,16,10,36,28,35,28,36,29,65,128,4,16,10,36,30,35,30,36,31,65,32,16,10,36,32,35,32,36,33,11,44,1,1,127,3,64,32,3,65,4,72,4,64,35,31,32,3,32,2,116,106,32,0,32,3,65,5,116,106,32,1,16,15,32,3,65,1,106,33,3,12,1,11,11,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); diff --git a/packages/as-sha256/src/wasmSimdCode.ts b/packages/as-sha256/src/wasmSimdCode.ts index 643ee2dfe..d8d40e6d9 100644 --- a/packages/as-sha256/src/wasmSimdCode.ts +++ b/packages/as-sha256/src/wasmSimdCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,30,29,0,0,0,0,0,6,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,0,0,3,3,3,0,4,5,3,1,0,1,6,227,4,61,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,1,11,7,169,1,13,8,72,65,83,95,83,73,77,68,3,60,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,28,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,27,5,105,110,112,117,116,3,54,6,111,117,116,112,117,116,3,56,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,158,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,53,32,2,65,2,116,106,32,2,65,3,106,34,4,35,55,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,3,65,2,116,106,35,55,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,2,65,2,116,106,35,55,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,4,65,2,116,106,35,55,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,53,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,53,106,35,55,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,53,32,0,16,19,11,74,0,65,231,204,167,208,6,36,31,65,133,221,158,219,123,36,32,65,242,230,187,227,3,36,33,65,186,234,191,170,122,36,34,65,255,164,185,136,5,36,35,65,140,209,149,216,121,36,36,65,171,179,143,252,1,36,37,65,153,154,131,223,5,36,38,65,0,36,58,65,0,36,59,11,227,3,1,1,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,16,73,4,64,32,0,35,47,65,2,116,34,2,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,16,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,32,0,35,47,65,16,107,65,2,116,106,40,2,0,32,0,35,47,65,7,107,65,2,116,106,40,2,0,32,0,35,47,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,47,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,34,1,106,40,2,0,32,1,35,29,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,1,35,41,34,2,113,32,1,35,39,34,1,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,174,1,1,2,127,35,59,32,1,106,36,59,35,58,4,64,65,192,0,35,58,107,34,2,32,1,76,4,64,35,51,35,58,106,32,0,32,2,252,10,0,0,35,58,32,2,106,36,58,65,192,0,35,58,107,33,2,32,1,65,192,0,35,58,107,107,33,1,35,53,35,51,16,23,65,0,36,58,5,35,51,35,58,106,32,0,32,1,252,10,0,0,35,58,32,1,106,36,58,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,53,32,0,32,2,106,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,51,35,58,106,32,0,32,2,106,32,1,252,10,0,0,35,58,32,1,106,36,58,11,11,146,2,1,2,127,35,59,65,63,113,65,63,73,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,59,65,63,113,65,56,79,4,64,35,51,35,58,106,34,1,65,192,0,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,53,35,51,16,23,65,0,36,58,11,35,59,65,63,113,65,63,79,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,51,35,58,106,34,1,65,56,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,51,35,59,65,128,128,128,128,2,109,16,18,54,2,56,35,51,35,59,65,3,116,16,18,54,2,60,35,53,35,51,16,23,32,0,35,31,16,18,54,2,0,32,0,35,32,16,18,54,2,4,32,0,35,33,16,18,54,2,8,32,0,35,34,16,18,54,2,12,32,0,35,35,16,18,54,2,16,32,0,35,36,16,18,54,2,20,32,0,35,37,16,18,54,2,24,32,0,35,38,16,18,54,2,28,11,14,0,16,22,35,55,32,0,16,24,35,57,16,25,11,253,1,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,1,113,32,2,35,39,34,2,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,86,0,16,22,35,53,32,0,16,23,35,30,16,27,32,1,35,31,16,18,54,2,0,32,1,35,32,16,18,54,2,4,32,1,35,33,16,18,54,2,8,32,1,35,34,16,18,54,2,12,32,1,35,35,16,18,54,2,16,32,1,35,36,16,18,54,2,20,32,1,35,37,16,18,54,2,24,32,1,35,38,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,29,65,148,13,40,2,0,36,30,65,192,0,16,11,36,50,35,50,36,51,65,128,8,16,11,36,52,35,52,36,53,65,128,4,16,11,36,54,35,54,36,55,65,32,16,11,36,56,35,56,36,57,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); +export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,43,8,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,3,127,127,127,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,6,3,30,29,0,0,0,0,0,7,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,5,0,3,3,3,5,4,5,3,1,0,1,6,227,4,61,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,1,11,7,169,1,13,8,72,65,83,95,83,73,77,68,3,60,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,28,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,27,5,105,110,112,117,116,3,54,6,111,117,116,112,117,116,3,56,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,174,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,53,32,2,65,2,116,106,32,2,65,3,106,34,4,35,55,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,3,65,2,116,106,35,55,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,2,65,2,116,106,35,55,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,4,65,2,116,106,35,55,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,53,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,53,106,35,55,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,53,32,0,16,19,11,74,0,65,231,204,167,208,6,36,31,65,133,221,158,219,123,36,32,65,242,230,187,227,3,36,33,65,186,234,191,170,122,36,34,65,255,164,185,136,5,36,35,65,140,209,149,216,121,36,36,65,171,179,143,252,1,36,37,65,153,154,131,223,5,36,38,65,0,36,58,65,0,36,59,11,233,3,1,1,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,16,73,4,64,32,0,35,47,65,2,116,106,32,1,35,47,32,2,108,65,2,116,34,3,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,32,3,65,1,106,106,45,0,0,65,16,116,114,32,1,32,3,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,16,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,32,0,35,47,65,16,107,65,2,116,106,40,2,0,32,0,35,47,65,7,107,65,2,116,106,40,2,0,32,0,35,47,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,47,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,34,1,106,40,2,0,32,1,35,29,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,1,35,41,34,2,113,32,1,35,39,34,1,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,178,1,1,2,127,35,59,32,1,106,36,59,35,58,4,64,65,192,0,35,58,107,34,2,32,1,76,4,64,35,51,35,58,106,32,0,32,2,252,10,0,0,35,58,32,2,106,36,58,65,192,0,35,58,107,33,2,32,1,65,192,0,35,58,107,107,33,1,35,53,35,51,65,1,16,23,65,0,36,58,5,35,51,35,58,106,32,0,32,1,252,10,0,0,35,58,32,1,106,36,58,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,53,32,0,32,2,106,65,1,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,51,35,58,106,32,0,32,2,106,32,1,252,10,0,0,35,58,32,1,106,36,58,11,11,150,2,1,2,127,35,59,65,63,113,65,63,73,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,59,65,63,113,65,56,79,4,64,35,51,35,58,106,34,1,65,192,0,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,53,35,51,65,1,16,23,65,0,36,58,11,35,59,65,63,113,65,63,79,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,51,35,58,106,34,1,65,56,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,51,35,59,65,128,128,128,128,2,109,16,18,54,2,56,35,51,35,59,65,3,116,16,18,54,2,60,35,53,35,51,65,1,16,23,32,0,35,31,16,18,54,2,0,32,0,35,32,16,18,54,2,4,32,0,35,33,16,18,54,2,8,32,0,35,34,16,18,54,2,12,32,0,35,35,16,18,54,2,16,32,0,35,36,16,18,54,2,20,32,0,35,37,16,18,54,2,24,32,0,35,38,16,18,54,2,28,11,14,0,16,22,35,55,32,0,16,24,35,57,16,25,11,253,1,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,1,113,32,2,35,39,34,2,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,88,0,16,22,35,53,32,0,32,2,16,23,35,30,16,27,32,1,35,31,16,18,54,2,0,32,1,35,32,16,18,54,2,4,32,1,35,33,16,18,54,2,8,32,1,35,34,16,18,54,2,12,32,1,35,35,16,18,54,2,16,32,1,35,36,16,18,54,2,20,32,1,35,37,16,18,54,2,24,32,1,35,38,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,29,65,148,13,40,2,0,36,30,65,192,0,16,11,36,50,35,50,36,51,65,128,8,16,11,36,52,35,52,36,53,65,128,4,16,11,36,54,35,54,36,55,65,32,16,11,36,56,35,56,36,57,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); From a5f70d93729d7ae8b22bf6bcfd8cbeccfc808bd8 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Fri, 10 Jan 2025 02:12:56 +0700 Subject: [PATCH 47/47] refactor: remove step = 1 from TS calls --- packages/as-sha256/assembly/common.ts | 8 +- packages/as-sha256/assembly/index.ts | 18 +++- packages/as-sha256/build/optimized.simd.wasm | Bin 16834 -> 16812 bytes packages/as-sha256/build/optimized.simd.wat | 39 +++----- packages/as-sha256/build/optimized.wasm | Bin 4345 -> 4377 bytes packages/as-sha256/build/optimized.wat | 96 +++++++++++-------- packages/as-sha256/build/untouched.simd.wasm | Bin 27434 -> 27446 bytes packages/as-sha256/build/untouched.simd.wat | 8 +- packages/as-sha256/build/untouched.wasm | Bin 6823 -> 6833 bytes packages/as-sha256/build/untouched.wat | 11 ++- packages/as-sha256/src/index.ts | 8 +- packages/as-sha256/src/wasm.ts | 2 +- packages/as-sha256/src/wasmCode.ts | 2 +- packages/as-sha256/src/wasmSimdCode.ts | 2 +- 14 files changed, 116 insertions(+), 78 deletions(-) diff --git a/packages/as-sha256/assembly/common.ts b/packages/as-sha256/assembly/common.ts index 37491dcb5..84cb7e61e 100644 --- a/packages/as-sha256/assembly/common.ts +++ b/packages/as-sha256/assembly/common.ts @@ -293,7 +293,7 @@ export function digest(length: i32): void { final(outputPtr); } -export function digest64(inPtr: usize, outPtr: usize, step: i32): void { +export function digest64WithStep(inPtr: usize, outPtr: usize, step: i32): void { init(); hashBlocks(wPtr, inPtr, step); hashPreCompW(w64Ptr); @@ -305,4 +305,8 @@ export function digest64(inPtr: usize, outPtr: usize, step: i32): void { store32(outPtr, 5, bswap(H5)); store32(outPtr, 6, bswap(H6)); store32(outPtr, 7, bswap(H7)); -} \ No newline at end of file +} + +export function digest64(inPtr: usize, outPtr: usize): void { + digest64WithStep(inPtr, outPtr, 1); +} diff --git a/packages/as-sha256/assembly/index.ts b/packages/as-sha256/assembly/index.ts index ea5969be5..12e193013 100644 --- a/packages/as-sha256/assembly/index.ts +++ b/packages/as-sha256/assembly/index.ts @@ -1,4 +1,16 @@ -import {INPUT_LENGTH, PARALLEL_FACTOR, input, output, init, update, final, digest, digest64, inputPtr} from "./common"; +import { + INPUT_LENGTH, + PARALLEL_FACTOR, + input, + output, + init, + update, + final, + digest, + digest64, + digest64WithStep, + inputPtr, +} from "./common"; export const HAS_SIMD = false; @@ -11,7 +23,7 @@ export function batchHash4UintArray64s(outPtr: usize): void { for (let i = 0; i < 4; i++) { const inOffset = changetype(i * 64); const outOffset = changetype(i * 32); - digest64(inputPtr + inOffset, outPtr + outOffset, 1); + digest64(inputPtr + inOffset, outPtr + outOffset); } } @@ -22,6 +34,6 @@ export function batchHash4HashObjectInputs(outPtr: usize): void { for (let i = 0; i < 4; i++) { const inOffset = changetype(i * 4); const outOffset = changetype(i * 32); - digest64(inputPtr + inOffset, outPtr + outOffset, 4); + digest64WithStep(inputPtr + inOffset, outPtr + outOffset, 4); } } diff --git a/packages/as-sha256/build/optimized.simd.wasm b/packages/as-sha256/build/optimized.simd.wasm index e41db8ebce8ea28de095ab17a56e4bcb77cb3852..d42f0ea7a16cdc9548166d16947a0689aa19e63c 100644 GIT binary patch delta 275 zcmX9#y-LGS6h7ZMH>nOnT*N^oB&Z0AP_RiYLNkej;2?rdsUSkYYHD!w4w<_4j)KmD z2$EU+c>(bmI`{%UfH(CF-}!z&OFWf0r{47ihzQG#l(nW58oFi{VI@(jv^`2i>s#U( z$XWl!>78B<3UXv=(Qb)cFf$lnr9dKzEC?w_Kyb%u=jCGsBOF#gxC8F1Qofr!7PGLu z9(jAJ8*V0C1ng7h!{BhTe7&pyp+``EG#wX^W-LKx;$Cx@IZ!X;OsR}y}?jJcZ zL_y~U-oQJ!@fLQAo2vSXs>v9iW3=h)<^n{7jj5cir5qMEB(LyDl#8|YVP#R*WvS(t zL=7-A7+|G9BC6&^YVW7Zg172UzIy6M0N2dc_o72J)Rc4$mxV^s)qL(_EJli=L!_Z4 zxS20QH27;xR9**kRsUu7{~e=PWxr2aZkTPlr=5jqBx^BW`Klem-DkJ>a9imC8@N&0 j3-+4!@#wzOlK}gJOK;U=aE#^=MRUovCe78%?sNSYSp+us diff --git a/packages/as-sha256/build/optimized.simd.wat b/packages/as-sha256/build/optimized.simd.wat index 090e8e440..e0c8b6689 100644 --- a/packages/as-sha256/build/optimized.simd.wat +++ b/packages/as-sha256/build/optimized.simd.wat @@ -4,9 +4,8 @@ (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32))) (type $4 (func)) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) - (type $7 (func (param i32 i32 i64))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $assembly/simd/H0V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (global $assembly/simd/H1V128 (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) @@ -5636,7 +5635,8 @@ i32.const 0 global.set $assembly/common/bytesHashed ) - (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) (param $2 i32) + (func $assembly/common/hashBlocks (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) global.get $assembly/common/H0 global.set $assembly/common/a @@ -5661,30 +5661,26 @@ i32.const 16 i32.lt_u if - local.get $0 global.get $assembly/common/i i32.const 2 i32.shl + local.tee $2 + local.get $0 i32.add local.get $1 - global.get $assembly/common/i local.get $2 - i32.mul - i32.const 2 - i32.shl - local.tee $3 i32.const 3 i32.add i32.add i32.load8_u local.get $1 - local.get $3 + local.get $2 i32.add i32.load8_u i32.const 24 i32.shl local.get $1 - local.get $3 + local.get $2 i32.const 1 i32.add i32.add @@ -5693,7 +5689,7 @@ i32.shl i32.or local.get $1 - local.get $3 + local.get $2 i32.const 2 i32.add i32.add @@ -5794,11 +5790,11 @@ i32.const 64 i32.lt_u if - local.get $0 global.get $assembly/common/i i32.const 2 i32.shl local.tee $1 + local.get $0 i32.add i32.load local.get $1 @@ -5846,16 +5842,16 @@ i32.rotr i32.xor global.get $assembly/common/b - local.tee $1 - global.get $assembly/common/c local.tee $2 + global.get $assembly/common/c + local.tee $3 i32.and - local.get $1 global.get $assembly/common/a local.tee $1 + local.get $2 i32.and local.get $1 - local.get $2 + local.get $3 i32.and i32.xor i32.xor @@ -5959,7 +5955,6 @@ local.set $1 global.get $assembly/common/wPtr global.get $assembly/common/mPtr - i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -5988,7 +5983,6 @@ local.get $0 local.get $2 i32.add - i32.const 1 call $assembly/common/hashBlocks local.get $3 i32.const 1 @@ -6071,7 +6065,6 @@ end global.get $assembly/common/wPtr global.get $assembly/common/mPtr - i32.const 1 call $assembly/common/hashBlocks i32.const 0 global.set $assembly/common/mLength @@ -6130,7 +6123,6 @@ i32.store offset=60 global.get $assembly/common/wPtr global.get $assembly/common/mPtr - i32.const 1 call $assembly/common/hashBlocks local.get $0 global.get $assembly/common/H0 @@ -6320,11 +6312,10 @@ i32.add global.set $assembly/common/H7 ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (param $2 i32) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) call $assembly/common/init global.get $assembly/common/wPtr local.get $0 - local.get $2 call $assembly/common/hashBlocks global.get $assembly/common/w64Ptr call $assembly/common/hashPreCompW diff --git a/packages/as-sha256/build/optimized.wasm b/packages/as-sha256/build/optimized.wasm index e44cfe69fd18f4fca9a7234a7a05d3c4a498b469..4f44d9abf9c4209986a6e9888129b12427cf4f74 100644 GIT binary patch delta 221 zcmeyVI8$kY6faYKJ!5?W149CHeSQ5zb#;DbW+oO^MkZDUMn)iFnHc+uQE;*cqYR_a z_g%)G=L1`)QD%=Faa5(ZHY2*b>TL4YkcH8;Pgl8J$XQH+OCi0jDaD~uML zaSDu%i~{`JT8xbK%nm>fiwBE?vOJK%R+6Q_0Hj$Y evIy`aDc&s0eT|V-SXog(WbzN5kj<664a@*5uq+V( delta 189 zcmbQK^iy$y6fbjqeLX`0Q++*SeFDQob#;Cg7A96^MkZ!PMg~SkR_2MZuNVa;doao{ z3QkUCbkq}KP0P$n%wZ5_OUX=6EiPdY;easAOc?mta#M5jiz=BII2c8F7=^f&Y`(&1 z!71p-=*T7@#?8f`z~IQ@$Rr@PIg9%mBdd_IqJZ#ZSKbgE9Y)4_W(NgkM-~qj2W5E$ iW(B5_ECmLj04tDY6yOK47_$_ac^J95H_za0WCj3G0VYKN diff --git a/packages/as-sha256/build/optimized.wat b/packages/as-sha256/build/optimized.wat index 329953b64..060eed483 100644 --- a/packages/as-sha256/build/optimized.wat +++ b/packages/as-sha256/build/optimized.wat @@ -2,9 +2,9 @@ (type $0 (func (param i32 i32))) (type $1 (func (param i32))) (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32 i32 i32))) - (type $4 (func (param i32 i32) (result i32))) - (type $5 (func)) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func)) + (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -1330,7 +1330,7 @@ i32.rotr i32.or ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (param $2 i32) + (func $assembly/common/digest64WithStep (param $0 i32) (param $1 i32) (param $2 i32) call $assembly/common/init global.get $assembly/common/wPtr local.get $0 @@ -1371,17 +1371,64 @@ call $~lib/polyfills/bswap i32.store offset=28 ) - (func $assembly/index/batchHash4UintArray64s (param $0 i32) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) local.get $0 + local.get $1 i32.const 1 - i32.const 6 - call $byn$mgfn-shared$assembly/index/batchHash4UintArray64s + call $assembly/common/digest64WithStep + ) + (func $assembly/index/batchHash4UintArray64s (param $0 i32) + (local $1 i32) + loop $for-loop|0 + local.get $1 + i32.const 4 + i32.lt_s + if + global.get $assembly/common/inputPtr + local.get $1 + i32.const 6 + i32.shl + i32.add + local.get $0 + local.get $1 + i32.const 5 + i32.shl + i32.add + call $assembly/common/digest64 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end ) (func $assembly/index/batchHash4HashObjectInputs (param $0 i32) - local.get $0 - i32.const 4 - i32.const 2 - call $byn$mgfn-shared$assembly/index/batchHash4UintArray64s + (local $1 i32) + loop $for-loop|0 + local.get $1 + i32.const 4 + i32.lt_s + if + global.get $assembly/common/inputPtr + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $1 + i32.const 5 + i32.shl + i32.add + i32.const 4 + call $assembly/common/digest64WithStep + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end ) (func $assembly/common/update (param $0 i32) (param $1 i32) (local $2 i32) @@ -1671,31 +1718,4 @@ global.get $assembly/common/output global.set $assembly/common/outputPtr ) - (func $byn$mgfn-shared$assembly/index/batchHash4UintArray64s (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - loop $for-loop|0 - local.get $3 - i32.const 4 - i32.lt_s - if - global.get $assembly/common/inputPtr - local.get $3 - local.get $2 - i32.shl - i32.add - local.get $0 - local.get $3 - i32.const 5 - i32.shl - i32.add - local.get $1 - call $assembly/common/digest64 - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 - end - end - ) ) diff --git a/packages/as-sha256/build/untouched.simd.wasm b/packages/as-sha256/build/untouched.simd.wasm index 08159466b8a5a466d2201f795c974cebc754ceeb..0a0f493337a909ccd7915d53aa3b18b72178a0ce 100644 GIT binary patch delta 71 zcmZ2=jd9yG#tD&3jt&!}?HCz1&g5Z{wP(vs&CM^WWMbf8bl_xTWN>8UX5e8I<7(N= b=&<<^OK~I@7lQ(W0;40NfZb-3xNkfFz~d3R delta 58 zcmdmXjd9gA#tD&34)znH?KaNhVUe|C%T3MAFREl>;9#`pWMgD-WaMVxVHD%~xrxz! O^I?|a$jy#%UwHr$L_ao=xweM(`Eqx Df7>G2 delta 143 zcmdmJy4-Yv8@<$}nn8-oxlnU|Qupv#t$nVwo)!l1_i zVVIdPXt3p`=H?ewGBI#4>T|L&GB`4FGw?8Sah=!D-)zdXUVzbZ@&_SJ7Dq+_jm^@+ szDy!IW=ssqDvk#jvK(2mm317MO9XT_*NCz*vT7@93FvNa6Vqk^0EZwVSO5S3 diff --git a/packages/as-sha256/build/untouched.wat b/packages/as-sha256/build/untouched.wat index f2cffa629..120ba5148 100644 --- a/packages/as-sha256/build/untouched.wat +++ b/packages/as-sha256/build/untouched.wat @@ -2437,7 +2437,7 @@ i32.or return ) - (func $assembly/common/digest64 (param $0 i32) (param $1 i32) (param $2 i32) + (func $assembly/common/digest64WithStep (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2582,6 +2582,12 @@ local.get $26 i32.store ) + (func $assembly/common/digest64 (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.const 1 + call $assembly/common/digest64WithStep + ) (func $assembly/index/batchHash4UintArray64s (param $0 i32) (local $1 i32) (local $2 i32) @@ -2607,7 +2613,6 @@ local.get $0 local.get $3 i32.add - i32.const 1 call $assembly/common/digest64 local.get $1 i32.const 1 @@ -2643,7 +2648,7 @@ local.get $3 i32.add i32.const 4 - call $assembly/common/digest64 + call $assembly/common/digest64WithStep local.get $1 i32.const 1 i32.add diff --git a/packages/as-sha256/src/index.ts b/packages/as-sha256/src/index.ts index d4b14a74f..b7dddfda1 100644 --- a/packages/as-sha256/src/index.ts +++ b/packages/as-sha256/src/index.ts @@ -47,7 +47,7 @@ export function digest(data: Uint8Array): Uint8Array { export function digest64(data: Uint8Array): Uint8Array { if (data.length === 64) { inputUint8Array.set(data); - ctx.digest64(wasmInputValue, wasmOutputValue, 1); + ctx.digest64(wasmInputValue, wasmOutputValue); return allocDigest(); } throw new Error("InvalidLengthForDigest64"); @@ -57,7 +57,7 @@ export function digest2Bytes32(bytes1: Uint8Array, bytes2: Uint8Array): Uint8Arr if (bytes1.length === 32 && bytes2.length === 32) { inputUint8Array.set(bytes1); inputUint8Array.set(bytes2, 32); - ctx.digest64(wasmInputValue, wasmOutputValue, 1); + ctx.digest64(wasmInputValue, wasmOutputValue); return allocDigest(); } throw new Error("InvalidLengthForDigest64"); @@ -106,7 +106,7 @@ export function digest64HashObjectsInto(obj1: HashObject, obj2: HashObject, outp inputUint32Array[14] = obj2.h6; inputUint32Array[15] = obj2.h7; - ctx.digest64(wasmInputValue, wasmOutputValue, 1); + ctx.digest64(wasmInputValue, wasmOutputValue); // extracting numbers from Uint32Array causes more memory byteArrayIntoHashObject(outputUint8Array, 0, output); @@ -296,7 +296,7 @@ export function hashInto(input: Uint8Array, output: Uint8Array): void { const outputOffset = numHashed * 32; for (let i = 0; i < remainingHash; i++) { inputUint8Array.set(input.subarray(inputOffset + i * 64, inputOffset + (i + 1) * 64), 0); - ctx.digest64(wasmInputValue, wasmOutputValue, 1); + ctx.digest64(wasmInputValue, wasmOutputValue); output.set(outputUint8Array.subarray(0, 32), outputOffset + i * 32); } } diff --git a/packages/as-sha256/src/wasm.ts b/packages/as-sha256/src/wasm.ts index a1e99c60e..b30145689 100644 --- a/packages/as-sha256/src/wasm.ts +++ b/packages/as-sha256/src/wasm.ts @@ -20,7 +20,7 @@ export interface WasmContext { final(outPtr: number): void; digest(length: number): void; - digest64(inPtr: number, outPtr: number, step: number): void; + digest64(inPtr: number, outPtr: number): void; batchHash4UintArray64s(outPtr: number): void; batchHash4HashObjectInputs(outPtr: number): void; } diff --git a/packages/as-sha256/src/wasmCode.ts b/packages/as-sha256/src/wasmCode.ts index 232cb7df7..6a57a84be 100644 --- a/packages/as-sha256/src/wasmCode.ts +++ b/packages/as-sha256/src/wasmCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,43,8,96,2,127,127,0,96,1,127,0,96,1,127,1,127,96,3,127,127,127,0,96,2,127,127,1,127,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,6,3,23,22,0,0,0,0,0,7,2,4,4,2,5,3,1,2,3,1,1,0,1,1,5,3,5,3,1,0,1,6,187,1,37,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,0,11,7,169,1,13,8,72,65,83,95,83,73,77,68,3,36,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,16,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,17,12,73,78,80,85,84,95,76,69,78,71,84,72,3,1,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,0,5,105,110,112,117,116,3,30,6,111,117,116,112,117,116,3,32,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,18,5,102,105,110,97,108,0,19,6,100,105,103,101,115,116,0,20,8,100,105,103,101,115,116,54,52,0,15,6,109,101,109,111,114,121,2,0,8,1,21,12,1,18,10,164,23,22,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,23,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,23,11,35,23,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,24,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,25,32,2,40,2,0,65,124,113,65,4,106,106,36,25,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,4,65,133,221,158,219,123,36,5,65,242,230,187,227,3,36,6,65,186,234,191,170,122,36,7,65,255,164,185,136,5,36,8,65,140,209,149,216,121,36,9,65,171,179,143,252,1,36,10,65,153,154,131,223,5,36,11,65,0,36,34,65,0,36,35,11,233,3,1,1,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,16,73,4,64,32,0,35,20,65,2,116,106,32,1,35,20,32,2,108,65,2,116,34,3,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,32,3,65,1,106,106,45,0,0,65,16,116,114,32,1,32,3,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,16,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,32,0,35,20,65,16,107,65,2,116,106,40,2,0,32,0,35,20,65,7,107,65,2,116,106,40,2,0,32,0,35,20,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,20,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,34,1,106,40,2,0,32,1,35,2,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,1,35,14,34,2,113,32,1,35,12,34,1,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,253,1,1,2,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,2,35,14,34,1,113,32,2,35,12,34,2,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,88,0,16,11,35,29,32,0,32,2,16,12,35,3,16,13,32,1,35,4,16,14,54,2,0,32,1,35,5,16,14,54,2,4,32,1,35,6,16,14,54,2,8,32,1,35,7,16,14,54,2,12,32,1,35,8,16,14,54,2,16,32,1,35,9,16,14,54,2,20,32,1,35,10,16,14,54,2,24,32,1,35,11,16,14,54,2,28,11,10,0,32,0,65,1,65,6,16,22,11,10,0,32,0,65,4,65,2,16,22,11,178,1,1,2,127,35,35,32,1,106,36,35,35,34,4,64,65,192,0,35,34,107,34,2,32,1,76,4,64,35,27,35,34,106,32,0,32,2,252,10,0,0,35,34,32,2,106,36,34,65,192,0,35,34,107,33,2,32,1,65,192,0,35,34,107,107,33,1,35,29,35,27,65,1,16,12,65,0,36,34,5,35,27,35,34,106,32,0,32,1,252,10,0,0,35,34,32,1,106,36,34,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,29,32,0,32,2,106,65,1,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,27,35,34,106,32,0,32,2,106,32,1,252,10,0,0,35,34,32,1,106,36,34,11,11,150,2,1,2,127,35,35,65,63,113,65,63,73,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,35,65,63,113,65,56,79,4,64,35,27,35,34,106,34,1,65,192,0,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,29,35,27,65,1,16,12,65,0,36,34,11,35,35,65,63,113,65,63,79,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,27,35,34,106,34,1,65,56,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,27,35,35,65,128,128,128,128,2,109,16,14,54,2,56,35,27,35,35,65,3,116,16,14,54,2,60,35,29,35,27,65,1,16,12,32,0,35,4,16,14,54,2,0,32,0,35,5,16,14,54,2,4,32,0,35,6,16,14,54,2,8,32,0,35,7,16,14,54,2,12,32,0,35,8,16,14,54,2,16,32,0,35,9,16,14,54,2,20,32,0,35,10,16,14,54,2,24,32,0,35,11,16,14,54,2,28,11,14,0,16,11,35,31,32,0,16,18,35,33,16,19,11,82,0,65,196,10,40,2,0,36,2,65,148,13,40,2,0,36,3,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,24,65,192,0,16,10,36,26,35,26,36,27,65,128,8,16,10,36,28,35,28,36,29,65,128,4,16,10,36,30,35,30,36,31,65,32,16,10,36,32,35,32,36,33,11,44,1,1,127,3,64,32,3,65,4,72,4,64,35,31,32,3,32,2,116,106,32,0,32,3,65,5,116,106,32,1,16,15,32,3,65,1,106,33,3,12,1,11,11,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); +export const wasmCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,43,8,96,2,127,127,0,96,1,127,0,96,1,127,1,127,96,2,127,127,1,127,96,0,0,96,3,127,127,127,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,6,3,23,22,0,0,0,0,0,7,2,3,3,2,4,5,1,2,5,0,1,1,0,1,1,4,5,3,1,0,1,6,187,1,37,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,0,11,7,169,1,13,8,72,65,83,95,83,73,77,68,3,36,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,17,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,18,12,73,78,80,85,84,95,76,69,78,71,84,72,3,1,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,0,5,105,110,112,117,116,3,30,6,111,117,116,112,117,116,3,32,4,105,110,105,116,0,11,6,117,112,100,97,116,101,0,19,5,102,105,110,97,108,0,20,6,100,105,103,101,115,116,0,21,8,100,105,103,101,115,116,54,52,0,16,6,109,101,109,111,114,121,2,0,8,1,22,12,1,18,10,196,23,22,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,169,2,1,3,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,23,69,4,64,63,0,34,2,65,0,76,4,127,65,1,32,2,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,128,16,65,0,16,1,65,160,28,65,0,54,2,0,3,64,32,1,65,23,73,4,64,32,1,65,2,116,65,128,16,106,65,0,54,2,4,65,0,33,2,3,64,32,2,65,16,73,4,64,32,1,65,4,116,32,2,106,65,2,116,65,128,16,106,65,0,54,2,96,32,2,65,1,106,33,2,12,1,11,11,32,1,65,1,106,33,1,12,1,11,11,65,128,16,65,164,28,63,0,172,66,16,134,16,6,65,128,16,36,23,11,35,23,32,0,65,16,106,16,9,34,2,65,1,54,2,12,32,2,32,0,54,2,16,35,24,34,3,40,2,8,33,1,32,2,32,3,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,3,32,2,16,3,35,25,32,2,40,2,0,65,124,113,65,4,106,106,36,25,32,2,65,20,106,34,1,65,0,32,0,252,11,0,32,1,11,74,0,65,231,204,167,208,6,36,4,65,133,221,158,219,123,36,5,65,242,230,187,227,3,36,6,65,186,234,191,170,122,36,7,65,255,164,185,136,5,36,8,65,140,209,149,216,121,36,9,65,171,179,143,252,1,36,10,65,153,154,131,223,5,36,11,65,0,36,34,65,0,36,35,11,233,3,1,1,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,16,73,4,64,32,0,35,20,65,2,116,106,32,1,35,20,32,2,108,65,2,116,34,3,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,32,3,65,1,106,106,45,0,0,65,16,116,114,32,1,32,3,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,16,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,32,0,35,20,65,16,107,65,2,116,106,40,2,0,32,0,35,20,65,7,107,65,2,116,106,40,2,0,32,0,35,20,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,20,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,20,65,1,106,36,20,12,1,11,11,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,34,1,106,40,2,0,32,1,35,2,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,1,35,14,34,2,113,32,1,35,12,34,1,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,253,1,1,2,127,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,35,8,36,16,35,9,36,17,35,10,36,18,35,11,36,19,65,0,36,20,3,64,35,20,65,192,0,73,4,64,32,0,35,20,65,2,116,106,40,2,0,35,19,35,16,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,16,34,1,35,17,113,35,18,32,1,65,127,115,113,115,106,106,36,21,35,12,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,13,34,2,35,14,34,1,113,32,2,35,12,34,2,113,32,1,32,2,113,115,115,106,36,22,35,18,36,19,35,17,36,18,35,16,36,17,35,15,35,21,106,36,16,35,14,36,15,35,13,36,14,35,12,36,13,35,21,35,22,106,36,12,35,20,65,1,106,36,20,12,1,11,11,35,4,35,12,106,36,4,35,5,35,13,106,36,5,35,6,35,14,106,36,6,35,7,35,15,106,36,7,35,8,35,16,106,36,8,35,9,35,17,106,36,9,35,10,35,18,106,36,10,35,11,35,19,106,36,11,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,88,0,16,11,35,29,32,0,32,2,16,12,35,3,16,13,32,1,35,4,16,14,54,2,0,32,1,35,5,16,14,54,2,4,32,1,35,6,16,14,54,2,8,32,1,35,7,16,14,54,2,12,32,1,35,8,16,14,54,2,16,32,1,35,9,16,14,54,2,20,32,1,35,10,16,14,54,2,24,32,1,35,11,16,14,54,2,28,11,10,0,32,0,32,1,65,1,16,15,11,42,1,1,127,3,64,32,1,65,4,72,4,64,35,31,32,1,65,6,116,106,32,0,32,1,65,5,116,106,16,16,32,1,65,1,106,33,1,12,1,11,11,11,44,1,1,127,3,64,32,1,65,4,72,4,64,35,31,32,1,65,2,116,106,32,0,32,1,65,5,116,106,65,4,16,15,32,1,65,1,106,33,1,12,1,11,11,11,178,1,1,2,127,35,35,32,1,106,36,35,35,34,4,64,65,192,0,35,34,107,34,2,32,1,76,4,64,35,27,35,34,106,32,0,32,2,252,10,0,0,35,34,32,2,106,36,34,65,192,0,35,34,107,33,2,32,1,65,192,0,35,34,107,107,33,1,35,29,35,27,65,1,16,12,65,0,36,34,5,35,27,35,34,106,32,0,32,1,252,10,0,0,35,34,32,1,106,36,34,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,29,32,0,32,2,106,65,1,16,12,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,27,35,34,106,32,0,32,2,106,32,1,252,10,0,0,35,34,32,1,106,36,34,11,11,150,2,1,2,127,35,35,65,63,113,65,63,73,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,35,65,63,113,65,56,79,4,64,35,27,35,34,106,34,1,65,192,0,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,29,35,27,65,1,16,12,65,0,36,34,11,35,35,65,63,113,65,63,79,4,64,35,27,35,34,106,65,128,1,58,0,0,35,34,65,1,106,36,34,11,35,27,35,34,106,34,1,65,56,35,34,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,27,35,35,65,128,128,128,128,2,109,16,14,54,2,56,35,27,35,35,65,3,116,16,14,54,2,60,35,29,35,27,65,1,16,12,32,0,35,4,16,14,54,2,0,32,0,35,5,16,14,54,2,4,32,0,35,6,16,14,54,2,8,32,0,35,7,16,14,54,2,12,32,0,35,8,16,14,54,2,16,32,0,35,9,16,14,54,2,20,32,0,35,10,16,14,54,2,24,32,0,35,11,16,14,54,2,28,11,14,0,16,11,35,31,32,0,16,19,35,33,16,20,11,82,0,65,196,10,40,2,0,36,2,65,148,13,40,2,0,36,3,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,24,65,192,0,16,10,36,26,35,26,36,27,65,128,8,16,10,36,28,35,28,36,29,65,128,4,16,10,36,30,35,30,36,31,65,32,16,10,36,32,35,32,36,33,11,11,253,6,18,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115]); diff --git a/packages/as-sha256/src/wasmSimdCode.ts b/packages/as-sha256/src/wasmSimdCode.ts index d8d40e6d9..7209726ff 100644 --- a/packages/as-sha256/src/wasmSimdCode.ts +++ b/packages/as-sha256/src/wasmSimdCode.ts @@ -3,4 +3,4 @@ // eslint-disable-next-line prettier/prettier -export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,43,8,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,3,127,127,127,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,6,3,30,29,0,0,0,0,0,7,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,5,0,3,3,3,5,4,5,3,1,0,1,6,227,4,61,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,1,11,7,169,1,13,8,72,65,83,95,83,73,77,68,3,60,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,28,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,27,5,105,110,112,117,116,3,54,6,111,117,116,112,117,116,3,56,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,174,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,53,32,2,65,2,116,106,32,2,65,3,106,34,4,35,55,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,3,65,2,116,106,35,55,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,2,65,2,116,106,35,55,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,4,65,2,116,106,35,55,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,53,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,53,106,35,55,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,53,32,0,16,19,11,74,0,65,231,204,167,208,6,36,31,65,133,221,158,219,123,36,32,65,242,230,187,227,3,36,33,65,186,234,191,170,122,36,34,65,255,164,185,136,5,36,35,65,140,209,149,216,121,36,36,65,171,179,143,252,1,36,37,65,153,154,131,223,5,36,38,65,0,36,58,65,0,36,59,11,233,3,1,1,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,16,73,4,64,32,0,35,47,65,2,116,106,32,1,35,47,32,2,108,65,2,116,34,3,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,32,3,65,1,106,106,45,0,0,65,16,116,114,32,1,32,3,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,16,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,32,0,35,47,65,16,107,65,2,116,106,40,2,0,32,0,35,47,65,7,107,65,2,116,106,40,2,0,32,0,35,47,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,47,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,34,1,106,40,2,0,32,1,35,29,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,1,35,41,34,2,113,32,1,35,39,34,1,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,178,1,1,2,127,35,59,32,1,106,36,59,35,58,4,64,65,192,0,35,58,107,34,2,32,1,76,4,64,35,51,35,58,106,32,0,32,2,252,10,0,0,35,58,32,2,106,36,58,65,192,0,35,58,107,33,2,32,1,65,192,0,35,58,107,107,33,1,35,53,35,51,65,1,16,23,65,0,36,58,5,35,51,35,58,106,32,0,32,1,252,10,0,0,35,58,32,1,106,36,58,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,53,32,0,32,2,106,65,1,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,51,35,58,106,32,0,32,2,106,32,1,252,10,0,0,35,58,32,1,106,36,58,11,11,150,2,1,2,127,35,59,65,63,113,65,63,73,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,59,65,63,113,65,56,79,4,64,35,51,35,58,106,34,1,65,192,0,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,53,35,51,65,1,16,23,65,0,36,58,11,35,59,65,63,113,65,63,79,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,51,35,58,106,34,1,65,56,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,51,35,59,65,128,128,128,128,2,109,16,18,54,2,56,35,51,35,59,65,3,116,16,18,54,2,60,35,53,35,51,65,1,16,23,32,0,35,31,16,18,54,2,0,32,0,35,32,16,18,54,2,4,32,0,35,33,16,18,54,2,8,32,0,35,34,16,18,54,2,12,32,0,35,35,16,18,54,2,16,32,0,35,36,16,18,54,2,20,32,0,35,37,16,18,54,2,24,32,0,35,38,16,18,54,2,28,11,14,0,16,22,35,55,32,0,16,24,35,57,16,25,11,253,1,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,1,113,32,2,35,39,34,2,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,88,0,16,22,35,53,32,0,32,2,16,23,35,30,16,27,32,1,35,31,16,18,54,2,0,32,1,35,32,16,18,54,2,4,32,1,35,33,16,18,54,2,8,32,1,35,34,16,18,54,2,12,32,1,35,35,16,18,54,2,16,32,1,35,36,16,18,54,2,20,32,1,35,37,16,18,54,2,24,32,1,35,38,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,29,65,148,13,40,2,0,36,30,65,192,0,16,11,36,50,35,50,36,51,65,128,8,16,11,36,52,35,52,36,53,65,128,4,16,11,36,54,35,54,36,55,65,32,16,11,36,56,35,56,36,57,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]); +export const wasmSimdCode = Uint8Array.from([0,97,115,109,1,0,0,0,1,37,7,96,2,127,127,0,96,1,127,1,127,96,2,127,127,1,127,96,1,127,0,96,0,0,96,4,127,127,127,127,0,96,3,127,127,126,0,2,13,1,3,101,110,118,5,97,98,111,114,116,0,5,3,30,29,0,0,0,0,0,6,1,2,2,2,1,2,1,1,2,4,4,1,0,3,3,4,0,0,3,3,3,0,4,5,3,1,0,1,6,227,4,61,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,123,1,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,4,11,127,0,65,128,4,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,1,65,0,11,127,0,65,1,11,7,169,1,13,8,72,65,83,95,83,73,77,68,3,60,22,98,97,116,99,104,72,97,115,104,52,85,105,110,116,65,114,114,97,121,54,52,115,0,20,26,98,97,116,99,104,72,97,115,104,52,72,97,115,104,79,98,106,101,99,116,73,110,112,117,116,115,0,21,12,73,78,80,85,84,95,76,69,78,71,84,72,3,28,15,80,65,82,65,76,76,69,76,95,70,65,67,84,79,82,3,27,5,105,110,112,117,116,3,54,6,111,117,116,112,117,116,3,56,4,105,110,105,116,0,22,6,117,112,100,97,116,101,0,24,5,102,105,110,97,108,0,25,6,100,105,103,101,115,116,0,26,8,100,105,103,101,115,116,54,52,0,28,6,109,101,109,111,114,121,2,0,8,1,29,12,1,38,10,158,112,29,9,0,32,0,32,1,54,2,0,11,9,0,32,0,32,1,54,2,4,11,9,0,32,0,32,1,54,2,8,11,192,1,1,4,127,32,1,40,2,0,65,124,113,34,3,65,128,2,73,4,127,32,3,65,4,118,5,65,31,65,252,255,255,255,3,32,3,32,3,65,252,255,255,255,3,79,27,34,3,103,107,34,4,65,7,107,33,2,32,3,32,4,65,4,107,118,65,16,115,11,33,3,32,1,40,2,8,33,5,32,1,40,2,4,34,4,4,64,32,4,32,5,16,3,11,32,5,4,64,32,5,32,4,16,2,11,32,1,32,0,32,2,65,4,116,32,3,106,65,2,116,106,34,1,40,2,96,70,4,64,32,1,32,5,54,2,96,32,5,69,4,64,32,0,32,2,65,2,116,106,34,1,40,2,4,65,126,32,3,119,113,33,3,32,1,32,3,54,2,4,32,3,69,4,64,32,0,32,0,40,2,0,65,126,32,2,119,113,16,1,11,11,11,11,181,2,1,5,127,32,1,40,2,0,33,3,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,34,2,65,1,113,4,64,32,0,32,4,16,4,32,1,32,3,65,4,106,32,2,65,124,113,106,34,3,16,1,32,1,65,4,106,32,1,40,2,0,65,124,113,106,34,4,40,2,0,33,2,11,32,3,65,2,113,4,64,32,1,65,4,107,40,2,0,34,1,40,2,0,33,6,32,0,32,1,16,4,32,1,32,6,65,4,106,32,3,65,124,113,106,34,3,16,1,11,32,4,32,2,65,2,114,16,1,32,4,65,4,107,32,1,54,2,0,32,0,32,3,65,124,113,34,2,65,128,2,73,4,127,32,2,65,4,118,5,65,31,65,252,255,255,255,3,32,2,32,2,65,252,255,255,255,3,79,27,34,2,103,107,34,3,65,7,107,33,5,32,2,32,3,65,4,107,118,65,16,115,11,34,2,32,5,65,4,116,106,65,2,116,106,40,2,96,33,3,32,1,65,0,16,2,32,1,32,3,16,3,32,3,4,64,32,3,32,1,16,2,11,32,0,32,5,65,4,116,32,2,106,65,2,116,106,32,1,54,2,96,32,0,32,0,40,2,0,65,1,32,5,116,114,16,1,32,0,32,5,65,2,116,106,34,0,32,0,40,2,4,65,1,32,2,116,114,54,2,4,11,130,1,1,3,127,32,1,65,19,106,65,112,113,65,4,107,33,1,32,0,40,2,160,12,34,3,4,64,32,3,32,1,65,16,107,34,5,70,4,64,32,3,40,2,0,33,4,32,5,33,1,11,11,32,2,167,65,112,113,32,1,107,34,3,65,20,73,4,64,15,11,32,1,32,4,65,2,113,32,3,65,8,107,34,3,65,1,114,114,16,1,32,1,65,0,16,2,32,1,65,0,16,3,32,1,65,4,106,32,3,106,34,3,65,2,16,1,32,0,32,3,54,2,160,12,32,0,32,1,16,5,11,29,0,32,0,65,1,65,27,32,0,103,107,116,106,65,1,107,32,0,32,0,65,254,255,255,255,1,73,27,11,142,1,1,2,127,32,1,65,128,2,73,4,127,32,1,65,4,118,5,65,31,32,1,16,7,34,1,103,107,34,3,65,7,107,33,2,32,1,32,3,65,4,107,118,65,16,115,11,33,1,32,0,32,2,65,2,116,106,40,2,4,65,127,32,1,116,113,34,1,4,127,32,0,32,1,104,32,2,65,4,116,106,65,2,116,106,40,2,96,5,32,0,40,2,0,65,127,32,2,65,1,106,116,113,34,1,4,127,32,0,32,0,32,1,104,34,0,65,2,116,106,40,2,4,104,32,0,65,4,116,106,65,2,116,106,40,2,96,5,65,0,11,11,11,148,2,1,3,127,32,1,65,252,255,255,255,3,75,4,64,65,176,14,65,176,15,65,205,3,65,29,16,0,0,11,32,0,65,12,32,1,65,19,106,65,112,113,65,4,107,32,1,65,12,77,27,34,1,16,8,34,2,69,4,64,32,1,65,128,2,79,4,127,32,1,16,7,5,32,1,11,33,2,63,0,34,3,32,2,65,4,32,0,40,2,160,12,32,3,65,16,116,65,4,107,71,116,106,65,255,255,3,106,65,128,128,124,113,65,16,118,34,2,32,2,32,3,72,27,64,0,65,0,72,4,64,32,2,64,0,65,0,72,4,64,0,11,11,32,0,32,3,65,16,116,63,0,172,66,16,134,16,6,32,0,32,1,16,8,33,2,11,32,2,40,2,0,26,32,0,32,2,16,4,32,2,40,2,0,34,3,65,124,113,32,1,107,34,4,65,16,79,4,64,32,2,32,1,32,3,65,2,113,114,16,1,32,2,65,4,106,32,1,106,34,1,32,4,65,4,107,65,1,114,16,1,32,0,32,1,16,5,5,32,2,32,3,65,126,113,16,1,32,2,65,4,106,32,2,40,2,0,65,124,113,106,34,0,32,0,40,2,0,65,125,113,16,1,11,32,2,11,133,2,1,2,127,32,0,65,236,255,255,255,3,75,4,64,65,176,14,65,240,14,65,253,0,65,30,16,0,0,11,35,20,69,4,64,63,0,34,3,65,0,76,4,127,65,1,32,3,107,64,0,65,0,72,5,65,0,11,4,64,0,11,65,208,21,65,0,16,1,65,240,33,65,0,54,2,0,3,64,32,2,65,23,73,4,64,32,2,65,2,116,65,208,21,106,65,0,54,2,4,65,0,33,3,3,64,32,3,65,16,73,4,64,32,2,65,4,116,32,3,106,65,2,116,65,208,21,106,65,0,54,2,96,32,3,65,1,106,33,3,12,1,11,11,32,2,65,1,106,33,2,12,1,11,11,65,208,21,65,244,33,63,0,172,66,16,134,16,6,65,208,21,36,20,11,35,20,32,0,65,16,106,16,9,34,2,32,1,54,2,12,32,2,32,0,54,2,16,35,21,34,0,40,2,8,33,1,32,2,32,0,16,2,32,2,32,1,16,3,32,1,32,2,32,1,40,2,4,65,3,113,114,16,2,32,0,32,2,16,3,35,22,32,2,40,2,0,65,124,113,65,4,106,106,36,22,32,2,65,20,106,11,46,1,1,127,32,0,65,252,255,255,255,3,75,4,64,65,192,13,65,240,13,65,52,65,43,16,0,0,11,32,0,65,1,16,10,34,1,65,0,32,0,252,11,0,32,1,11,41,0,32,1,32,0,40,2,12,79,4,64,65,144,16,65,208,16,65,242,0,65,42,16,0,0,11,32,0,40,2,4,32,1,65,2,116,106,40,2,0,11,181,1,1,4,127,32,0,69,4,64,65,192,18,15,11,65,0,32,0,107,32,0,32,0,65,31,118,65,1,116,34,1,27,34,0,65,10,79,65,1,106,32,0,65,144,206,0,79,65,3,106,32,0,65,232,7,79,106,32,0,65,228,0,73,27,32,0,65,192,132,61,79,65,6,106,32,0,65,128,148,235,220,3,79,65,8,106,32,0,65,128,194,215,47,79,106,32,0,65,128,173,226,4,73,27,32,0,65,160,141,6,73,27,34,2,65,1,116,32,1,106,65,2,16,10,34,3,32,1,106,33,4,3,64,32,4,32,2,65,1,107,34,2,65,1,116,106,32,0,65,10,112,65,48,106,59,1,0,32,0,65,10,110,34,0,13,0,11,32,1,4,64,32,3,65,45,59,1,0,11,32,3,11,13,0,32,0,65,20,107,40,2,16,65,1,118,11,64,1,3,127,32,0,16,14,65,1,116,34,2,32,1,16,14,65,1,116,34,3,106,34,4,69,4,64,65,160,20,15,11,32,4,65,2,16,10,34,4,32,0,32,2,252,10,0,0,32,2,32,4,106,32,1,32,3,252,10,0,0,32,4,11,145,16,2,2,127,1,123,65,224,15,65,224,15,16,2,65,224,15,65,224,15,16,3,65,224,15,36,21,65,128,8,16,11,36,23,35,23,36,24,2,64,3,64,32,0,65,192,0,72,4,64,35,24,33,1,65,192,10,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,65,128,8,16,11,36,25,35,25,36,26,65,0,33,0,3,64,32,0,65,192,0,72,4,64,35,26,33,1,65,144,13,32,0,16,12,253,17,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,32,0,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,67,11,32,1,32,2,253,11,4,0,12,63,11,32,1,32,2,253,11,4,16,12,62,11,32,1,32,2,253,11,4,32,12,61,11,32,1,32,2,253,11,4,48,12,60,11,32,1,32,2,253,11,4,64,12,59,11,32,1,32,2,253,11,4,80,12,58,11,32,1,32,2,253,11,4,96,12,57,11,32,1,32,2,253,11,4,112,12,56,11,32,1,32,2,253,11,4,128,1,12,55,11,32,1,32,2,253,11,4,144,1,12,54,11,32,1,32,2,253,11,4,160,1,12,53,11,32,1,32,2,253,11,4,176,1,12,52,11,32,1,32,2,253,11,4,192,1,12,51,11,32,1,32,2,253,11,4,208,1,12,50,11,32,1,32,2,253,11,4,224,1,12,49,11,32,1,32,2,253,11,4,240,1,12,48,11,32,1,32,2,253,11,4,128,2,12,47,11,32,1,32,2,253,11,4,144,2,12,46,11,32,1,32,2,253,11,4,160,2,12,45,11,32,1,32,2,253,11,4,176,2,12,44,11,32,1,32,2,253,11,4,192,2,12,43,11,32,1,32,2,253,11,4,208,2,12,42,11,32,1,32,2,253,11,4,224,2,12,41,11,32,1,32,2,253,11,4,240,2,12,40,11,32,1,32,2,253,11,4,128,3,12,39,11,32,1,32,2,253,11,4,144,3,12,38,11,32,1,32,2,253,11,4,160,3,12,37,11,32,1,32,2,253,11,4,176,3,12,36,11,32,1,32,2,253,11,4,192,3,12,35,11,32,1,32,2,253,11,4,208,3,12,34,11,32,1,32,2,253,11,4,224,3,12,33,11,32,1,32,2,253,11,4,240,3,12,32,11,32,1,32,2,253,11,4,128,4,12,31,11,32,1,32,2,253,11,4,144,4,12,30,11,32,1,32,2,253,11,4,160,4,12,29,11,32,1,32,2,253,11,4,176,4,12,28,11,32,1,32,2,253,11,4,192,4,12,27,11,32,1,32,2,253,11,4,208,4,12,26,11,32,1,32,2,253,11,4,224,4,12,25,11,32,1,32,2,253,11,4,240,4,12,24,11,32,1,32,2,253,11,4,128,5,12,23,11,32,1,32,2,253,11,4,144,5,12,22,11,32,1,32,2,253,11,4,160,5,12,21,11,32,1,32,2,253,11,4,176,5,12,20,11,32,1,32,2,253,11,4,192,5,12,19,11,32,1,32,2,253,11,4,208,5,12,18,11,32,1,32,2,253,11,4,224,5,12,17,11,32,1,32,2,253,11,4,240,5,12,16,11,32,1,32,2,253,11,4,128,6,12,15,11,32,1,32,2,253,11,4,144,6,12,14,11,32,1,32,2,253,11,4,160,6,12,13,11,32,1,32,2,253,11,4,176,6,12,12,11,32,1,32,2,253,11,4,192,6,12,11,11,32,1,32,2,253,11,4,208,6,12,10,11,32,1,32,2,253,11,4,224,6,12,9,11,32,1,32,2,253,11,4,240,6,12,8,11,32,1,32,2,253,11,4,128,7,12,7,11,32,1,32,2,253,11,4,144,7,12,6,11,32,1,32,2,253,11,4,160,7,12,5,11,32,1,32,2,253,11,4,176,7,12,4,11,32,1,32,2,253,11,4,192,7,12,3,11,32,1,32,2,253,11,4,208,7,12,2,11,32,1,32,2,253,11,4,224,7,12,1,11,32,1,32,2,253,11,4,240,7,11,32,0,65,1,106,33,0,12,1,11,11,15,11,65,192,19,32,0,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,192,10,2,2,123,2,127,35,0,36,8,35,1,36,9,35,2,36,10,35,3,36,11,35,4,36,12,35,5,36,13,35,6,36,14,35,7,36,15,65,0,36,18,3,64,35,18,65,192,0,72,4,64,35,15,35,12,34,0,65,6,253,173,1,32,0,65,26,253,171,1,253,80,32,0,65,11,253,173,1,32,0,65,21,253,171,1,253,80,253,81,32,0,65,25,253,173,1,32,0,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,0,35,13,253,78,32,0,253,77,35,14,253,78,253,81,253,174,1,33,1,35,26,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,3,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,2,253,0,4,0,33,0,12,64,11,32,2,253,0,4,16,33,0,12,63,11,32,2,253,0,4,32,33,0,12,62,11,32,2,253,0,4,48,33,0,12,61,11,32,2,253,0,4,64,33,0,12,60,11,32,2,253,0,4,80,33,0,12,59,11,32,2,253,0,4,96,33,0,12,58,11,32,2,253,0,4,112,33,0,12,57,11,32,2,253,0,4,128,1,33,0,12,56,11,32,2,253,0,4,144,1,33,0,12,55,11,32,2,253,0,4,160,1,33,0,12,54,11,32,2,253,0,4,176,1,33,0,12,53,11,32,2,253,0,4,192,1,33,0,12,52,11,32,2,253,0,4,208,1,33,0,12,51,11,32,2,253,0,4,224,1,33,0,12,50,11,32,2,253,0,4,240,1,33,0,12,49,11,32,2,253,0,4,128,2,33,0,12,48,11,32,2,253,0,4,144,2,33,0,12,47,11,32,2,253,0,4,160,2,33,0,12,46,11,32,2,253,0,4,176,2,33,0,12,45,11,32,2,253,0,4,192,2,33,0,12,44,11,32,2,253,0,4,208,2,33,0,12,43,11,32,2,253,0,4,224,2,33,0,12,42,11,32,2,253,0,4,240,2,33,0,12,41,11,32,2,253,0,4,128,3,33,0,12,40,11,32,2,253,0,4,144,3,33,0,12,39,11,32,2,253,0,4,160,3,33,0,12,38,11,32,2,253,0,4,176,3,33,0,12,37,11,32,2,253,0,4,192,3,33,0,12,36,11,32,2,253,0,4,208,3,33,0,12,35,11,32,2,253,0,4,224,3,33,0,12,34,11,32,2,253,0,4,240,3,33,0,12,33,11,32,2,253,0,4,128,4,33,0,12,32,11,32,2,253,0,4,144,4,33,0,12,31,11,32,2,253,0,4,160,4,33,0,12,30,11,32,2,253,0,4,176,4,33,0,12,29,11,32,2,253,0,4,192,4,33,0,12,28,11,32,2,253,0,4,208,4,33,0,12,27,11,32,2,253,0,4,224,4,33,0,12,26,11,32,2,253,0,4,240,4,33,0,12,25,11,32,2,253,0,4,128,5,33,0,12,24,11,32,2,253,0,4,144,5,33,0,12,23,11,32,2,253,0,4,160,5,33,0,12,22,11,32,2,253,0,4,176,5,33,0,12,21,11,32,2,253,0,4,192,5,33,0,12,20,11,32,2,253,0,4,208,5,33,0,12,19,11,32,2,253,0,4,224,5,33,0,12,18,11,32,2,253,0,4,240,5,33,0,12,17,11,32,2,253,0,4,128,6,33,0,12,16,11,32,2,253,0,4,144,6,33,0,12,15,11,32,2,253,0,4,160,6,33,0,12,14,11,32,2,253,0,4,176,6,33,0,12,13,11,32,2,253,0,4,192,6,33,0,12,12,11,32,2,253,0,4,208,6,33,0,12,11,11,32,2,253,0,4,224,6,33,0,12,10,11,32,2,253,0,4,240,6,33,0,12,9,11,32,2,253,0,4,128,7,33,0,12,8,11,32,2,253,0,4,144,7,33,0,12,7,11,32,2,253,0,4,160,7,33,0,12,6,11,32,2,253,0,4,176,7,33,0,12,5,11,32,2,253,0,4,192,7,33,0,12,4,11,32,2,253,0,4,208,7,33,0,12,3,11,32,2,253,0,4,224,7,33,0,12,2,11,32,2,253,0,4,240,7,33,0,12,1,11,65,128,21,32,3,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,1,32,0,253,174,1,36,16,35,8,34,0,65,2,253,173,1,32,0,65,30,253,171,1,253,80,32,0,65,13,253,173,1,32,0,65,19,253,171,1,253,80,253,81,32,0,65,22,253,173,1,32,0,65,10,253,171,1,253,80,253,81,35,8,34,0,35,9,34,1,253,78,32,0,35,10,34,0,253,78,253,81,32,1,32,0,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,11,25,0,32,0,65,128,254,131,120,113,65,8,119,32,0,65,255,129,252,7,113,65,8,120,114,11,157,57,2,2,123,2,127,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,0,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,1,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,2,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,3,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,4,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,5,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,6,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,7,253,12,103,230,9,106,103,230,9,106,103,230,9,106,103,230,9,106,36,8,253,12,133,174,103,187,133,174,103,187,133,174,103,187,133,174,103,187,36,9,253,12,114,243,110,60,114,243,110,60,114,243,110,60,114,243,110,60,36,10,253,12,58,245,79,165,58,245,79,165,58,245,79,165,58,245,79,165,36,11,253,12,127,82,14,81,127,82,14,81,127,82,14,81,127,82,14,81,36,12,253,12,140,104,5,155,140,104,5,155,140,104,5,155,140,104,5,155,36,13,253,12,171,217,131,31,171,217,131,31,171,217,131,31,171,217,131,31,36,14,253,12,25,205,224,91,25,205,224,91,25,205,224,91,25,205,224,91,36,15,65,0,36,18,2,64,3,64,35,18,65,192,0,72,4,64,35,18,65,16,72,4,123,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,5,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,2,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,17,253,173,1,32,2,65,15,253,171,1,253,80,32,2,65,19,253,173,1,32,2,65,13,253,171,1,253,80,253,81,32,2,65,10,253,173,1,253,81,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,7,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,15,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,34,2,65,7,253,173,1,32,2,65,25,253,171,1,253,80,32,2,65,18,253,173,1,32,2,65,14,253,171,1,253,80,253,81,32,2,65,3,253,173,1,253,81,253,174,1,2,123,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,65,16,107,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,68,11,32,0,253,0,4,0,12,63,11,32,0,253,0,4,16,12,62,11,32,0,253,0,4,32,12,61,11,32,0,253,0,4,48,12,60,11,32,0,253,0,4,64,12,59,11,32,0,253,0,4,80,12,58,11,32,0,253,0,4,96,12,57,11,32,0,253,0,4,112,12,56,11,32,0,253,0,4,128,1,12,55,11,32,0,253,0,4,144,1,12,54,11,32,0,253,0,4,160,1,12,53,11,32,0,253,0,4,176,1,12,52,11,32,0,253,0,4,192,1,12,51,11,32,0,253,0,4,208,1,12,50,11,32,0,253,0,4,224,1,12,49,11,32,0,253,0,4,240,1,12,48,11,32,0,253,0,4,128,2,12,47,11,32,0,253,0,4,144,2,12,46,11,32,0,253,0,4,160,2,12,45,11,32,0,253,0,4,176,2,12,44,11,32,0,253,0,4,192,2,12,43,11,32,0,253,0,4,208,2,12,42,11,32,0,253,0,4,224,2,12,41,11,32,0,253,0,4,240,2,12,40,11,32,0,253,0,4,128,3,12,39,11,32,0,253,0,4,144,3,12,38,11,32,0,253,0,4,160,3,12,37,11,32,0,253,0,4,176,3,12,36,11,32,0,253,0,4,192,3,12,35,11,32,0,253,0,4,208,3,12,34,11,32,0,253,0,4,224,3,12,33,11,32,0,253,0,4,240,3,12,32,11,32,0,253,0,4,128,4,12,31,11,32,0,253,0,4,144,4,12,30,11,32,0,253,0,4,160,4,12,29,11,32,0,253,0,4,176,4,12,28,11,32,0,253,0,4,192,4,12,27,11,32,0,253,0,4,208,4,12,26,11,32,0,253,0,4,224,4,12,25,11,32,0,253,0,4,240,4,12,24,11,32,0,253,0,4,128,5,12,23,11,32,0,253,0,4,144,5,12,22,11,32,0,253,0,4,160,5,12,21,11,32,0,253,0,4,176,5,12,20,11,32,0,253,0,4,192,5,12,19,11,32,0,253,0,4,208,5,12,18,11,32,0,253,0,4,224,5,12,17,11,32,0,253,0,4,240,5,12,16,11,32,0,253,0,4,128,6,12,15,11,32,0,253,0,4,144,6,12,14,11,32,0,253,0,4,160,6,12,13,11,32,0,253,0,4,176,6,12,12,11,32,0,253,0,4,192,6,12,11,11,32,0,253,0,4,208,6,12,10,11,32,0,253,0,4,224,6,12,9,11,32,0,253,0,4,240,6,12,8,11,32,0,253,0,4,128,7,12,7,11,32,0,253,0,4,144,7,12,6,11,32,0,253,0,4,160,7,12,5,11,32,0,253,0,4,176,7,12,4,11,32,0,253,0,4,192,7,12,3,11,32,0,253,0,4,208,7,12,2,11,32,0,253,0,4,224,7,12,1,11,32,0,253,0,4,240,7,11,253,174,1,11,36,19,35,18,65,16,78,4,64,35,19,33,2,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,4,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,0,32,2,253,11,4,0,12,64,11,32,0,32,2,253,11,4,16,12,63,11,32,0,32,2,253,11,4,32,12,62,11,32,0,32,2,253,11,4,48,12,61,11,32,0,32,2,253,11,4,64,12,60,11,32,0,32,2,253,11,4,80,12,59,11,32,0,32,2,253,11,4,96,12,58,11,32,0,32,2,253,11,4,112,12,57,11,32,0,32,2,253,11,4,128,1,12,56,11,32,0,32,2,253,11,4,144,1,12,55,11,32,0,32,2,253,11,4,160,1,12,54,11,32,0,32,2,253,11,4,176,1,12,53,11,32,0,32,2,253,11,4,192,1,12,52,11,32,0,32,2,253,11,4,208,1,12,51,11,32,0,32,2,253,11,4,224,1,12,50,11,32,0,32,2,253,11,4,240,1,12,49,11,32,0,32,2,253,11,4,128,2,12,48,11,32,0,32,2,253,11,4,144,2,12,47,11,32,0,32,2,253,11,4,160,2,12,46,11,32,0,32,2,253,11,4,176,2,12,45,11,32,0,32,2,253,11,4,192,2,12,44,11,32,0,32,2,253,11,4,208,2,12,43,11,32,0,32,2,253,11,4,224,2,12,42,11,32,0,32,2,253,11,4,240,2,12,41,11,32,0,32,2,253,11,4,128,3,12,40,11,32,0,32,2,253,11,4,144,3,12,39,11,32,0,32,2,253,11,4,160,3,12,38,11,32,0,32,2,253,11,4,176,3,12,37,11,32,0,32,2,253,11,4,192,3,12,36,11,32,0,32,2,253,11,4,208,3,12,35,11,32,0,32,2,253,11,4,224,3,12,34,11,32,0,32,2,253,11,4,240,3,12,33,11,32,0,32,2,253,11,4,128,4,12,32,11,32,0,32,2,253,11,4,144,4,12,31,11,32,0,32,2,253,11,4,160,4,12,30,11,32,0,32,2,253,11,4,176,4,12,29,11,32,0,32,2,253,11,4,192,4,12,28,11,32,0,32,2,253,11,4,208,4,12,27,11,32,0,32,2,253,11,4,224,4,12,26,11,32,0,32,2,253,11,4,240,4,12,25,11,32,0,32,2,253,11,4,128,5,12,24,11,32,0,32,2,253,11,4,144,5,12,23,11,32,0,32,2,253,11,4,160,5,12,22,11,32,0,32,2,253,11,4,176,5,12,21,11,32,0,32,2,253,11,4,192,5,12,20,11,32,0,32,2,253,11,4,208,5,12,19,11,32,0,32,2,253,11,4,224,5,12,18,11,32,0,32,2,253,11,4,240,5,12,17,11,32,0,32,2,253,11,4,128,6,12,16,11,32,0,32,2,253,11,4,144,6,12,15,11,32,0,32,2,253,11,4,160,6,12,14,11,32,0,32,2,253,11,4,176,6,12,13,11,32,0,32,2,253,11,4,192,6,12,12,11,32,0,32,2,253,11,4,208,6,12,11,11,32,0,32,2,253,11,4,224,6,12,10,11,32,0,32,2,253,11,4,240,6,12,9,11,32,0,32,2,253,11,4,128,7,12,8,11,32,0,32,2,253,11,4,144,7,12,7,11,32,0,32,2,253,11,4,160,7,12,6,11,32,0,32,2,253,11,4,176,7,12,5,11,32,0,32,2,253,11,4,192,7,12,4,11,32,0,32,2,253,11,4,208,7,12,3,11,32,0,32,2,253,11,4,224,7,12,2,11,32,0,32,2,253,11,4,240,7,12,1,11,65,192,19,32,4,16,13,16,15,65,192,20,65,201,1,65,7,16,0,0,11,11,35,15,35,12,34,2,65,6,253,173,1,32,2,65,26,253,171,1,253,80,32,2,65,11,253,173,1,32,2,65,21,253,171,1,253,80,253,81,32,2,65,25,253,173,1,32,2,65,7,253,171,1,253,80,253,81,253,174,1,35,12,34,2,35,13,253,78,32,2,253,77,35,14,253,78,253,81,253,174,1,33,3,35,24,33,4,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,2,64,35,18,34,5,14,64,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,11,32,4,253,0,4,0,33,2,12,64,11,32,4,253,0,4,16,33,2,12,63,11,32,4,253,0,4,32,33,2,12,62,11,32,4,253,0,4,48,33,2,12,61,11,32,4,253,0,4,64,33,2,12,60,11,32,4,253,0,4,80,33,2,12,59,11,32,4,253,0,4,96,33,2,12,58,11,32,4,253,0,4,112,33,2,12,57,11,32,4,253,0,4,128,1,33,2,12,56,11,32,4,253,0,4,144,1,33,2,12,55,11,32,4,253,0,4,160,1,33,2,12,54,11,32,4,253,0,4,176,1,33,2,12,53,11,32,4,253,0,4,192,1,33,2,12,52,11,32,4,253,0,4,208,1,33,2,12,51,11,32,4,253,0,4,224,1,33,2,12,50,11,32,4,253,0,4,240,1,33,2,12,49,11,32,4,253,0,4,128,2,33,2,12,48,11,32,4,253,0,4,144,2,33,2,12,47,11,32,4,253,0,4,160,2,33,2,12,46,11,32,4,253,0,4,176,2,33,2,12,45,11,32,4,253,0,4,192,2,33,2,12,44,11,32,4,253,0,4,208,2,33,2,12,43,11,32,4,253,0,4,224,2,33,2,12,42,11,32,4,253,0,4,240,2,33,2,12,41,11,32,4,253,0,4,128,3,33,2,12,40,11,32,4,253,0,4,144,3,33,2,12,39,11,32,4,253,0,4,160,3,33,2,12,38,11,32,4,253,0,4,176,3,33,2,12,37,11,32,4,253,0,4,192,3,33,2,12,36,11,32,4,253,0,4,208,3,33,2,12,35,11,32,4,253,0,4,224,3,33,2,12,34,11,32,4,253,0,4,240,3,33,2,12,33,11,32,4,253,0,4,128,4,33,2,12,32,11,32,4,253,0,4,144,4,33,2,12,31,11,32,4,253,0,4,160,4,33,2,12,30,11,32,4,253,0,4,176,4,33,2,12,29,11,32,4,253,0,4,192,4,33,2,12,28,11,32,4,253,0,4,208,4,33,2,12,27,11,32,4,253,0,4,224,4,33,2,12,26,11,32,4,253,0,4,240,4,33,2,12,25,11,32,4,253,0,4,128,5,33,2,12,24,11,32,4,253,0,4,144,5,33,2,12,23,11,32,4,253,0,4,160,5,33,2,12,22,11,32,4,253,0,4,176,5,33,2,12,21,11,32,4,253,0,4,192,5,33,2,12,20,11,32,4,253,0,4,208,5,33,2,12,19,11,32,4,253,0,4,224,5,33,2,12,18,11,32,4,253,0,4,240,5,33,2,12,17,11,32,4,253,0,4,128,6,33,2,12,16,11,32,4,253,0,4,144,6,33,2,12,15,11,32,4,253,0,4,160,6,33,2,12,14,11,32,4,253,0,4,176,6,33,2,12,13,11,32,4,253,0,4,192,6,33,2,12,12,11,32,4,253,0,4,208,6,33,2,12,11,11,32,4,253,0,4,224,6,33,2,12,10,11,32,4,253,0,4,240,6,33,2,12,9,11,32,4,253,0,4,128,7,33,2,12,8,11,32,4,253,0,4,144,7,33,2,12,7,11,32,4,253,0,4,160,7,33,2,12,6,11,32,4,253,0,4,176,7,33,2,12,5,11,32,4,253,0,4,192,7,33,2,12,4,11,32,4,253,0,4,208,7,33,2,12,3,11,32,4,253,0,4,224,7,33,2,12,2,11,32,4,253,0,4,240,7,33,2,12,1,11,65,128,21,32,5,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,32,3,32,2,253,174,1,35,19,253,174,1,36,16,35,8,34,2,65,2,253,173,1,32,2,65,30,253,171,1,253,80,32,2,65,13,253,173,1,32,2,65,19,253,171,1,253,80,253,81,32,2,65,22,253,173,1,32,2,65,10,253,171,1,253,80,253,81,35,8,34,2,35,9,34,3,253,78,32,2,35,10,34,2,253,78,253,81,32,3,32,2,253,78,253,81,253,174,1,36,17,35,14,36,15,35,13,36,14,35,12,36,13,35,11,35,16,253,174,1,36,12,35,10,36,11,35,9,36,10,35,8,36,9,35,16,35,17,253,174,1,36,8,35,18,65,1,106,36,18,12,1,11,11,35,0,35,8,253,174,1,36,0,35,1,35,9,253,174,1,36,1,35,2,35,10,253,174,1,36,2,35,3,35,11,253,174,1,36,3,35,4,35,12,253,174,1,36,4,35,5,35,13,253,174,1,36,5,35,6,35,14,253,174,1,36,6,35,7,35,15,253,174,1,36,7,16,17,32,1,35,0,253,27,0,16,18,54,2,0,32,1,35,1,253,27,0,16,18,54,2,4,32,1,35,2,253,27,0,16,18,54,2,8,32,1,35,3,253,27,0,16,18,54,2,12,32,1,35,4,253,27,0,16,18,54,2,16,32,1,35,5,253,27,0,16,18,54,2,20,32,1,35,6,253,27,0,16,18,54,2,24,32,1,35,7,253,27,0,16,18,54,2,28,32,1,35,0,253,27,1,16,18,54,2,32,32,1,35,1,253,27,1,16,18,54,2,36,32,1,35,2,253,27,1,16,18,54,2,40,32,1,35,3,253,27,1,16,18,54,2,44,32,1,35,4,253,27,1,16,18,54,2,48,32,1,35,5,253,27,1,16,18,54,2,52,32,1,35,6,253,27,1,16,18,54,2,56,32,1,35,7,253,27,1,16,18,54,2,60,32,1,65,64,107,35,0,253,27,2,16,18,54,2,0,32,1,35,1,253,27,2,16,18,54,2,68,32,1,35,2,253,27,2,16,18,54,2,72,32,1,35,3,253,27,2,16,18,54,2,76,32,1,35,4,253,27,2,16,18,54,2,80,32,1,35,5,253,27,2,16,18,54,2,84,32,1,35,6,253,27,2,16,18,54,2,88,32,1,35,7,253,27,2,16,18,54,2,92,32,1,35,0,253,27,3,16,18,54,2,96,32,1,35,1,253,27,3,16,18,54,2,100,32,1,35,2,253,27,3,16,18,54,2,104,32,1,35,3,253,27,3,16,18,54,2,108,32,1,35,4,253,27,3,16,18,54,2,112,32,1,35,5,253,27,3,16,18,54,2,116,32,1,35,6,253,27,3,16,18,54,2,120,32,1,35,7,253,27,3,16,18,54,2,124,15,11,65,128,21,32,4,16,13,16,15,65,192,20,65,213,2,65,7,16,0,0,11,203,2,1,5,127,3,64,32,1,65,16,72,4,64,32,1,65,2,116,34,2,65,1,106,33,3,35,53,32,2,65,2,116,106,32,2,65,3,106,34,4,35,55,34,5,106,45,0,0,32,2,32,5,106,45,0,0,65,24,116,32,3,32,5,106,45,0,0,65,16,116,114,32,2,65,2,106,34,2,32,5,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,3,65,2,116,106,35,55,34,3,32,1,65,16,106,65,2,116,34,5,65,3,106,106,45,0,0,32,3,32,5,106,45,0,0,65,24,116,32,5,65,1,106,32,3,106,45,0,0,65,16,116,114,32,5,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,2,65,2,116,106,35,55,34,2,32,1,65,32,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,35,53,32,4,65,2,116,106,35,55,34,2,32,1,65,48,106,65,2,116,34,3,65,3,106,106,45,0,0,32,2,32,3,106,45,0,0,65,24,116,32,3,65,1,106,32,2,106,45,0,0,65,16,116,114,32,3,65,2,106,32,2,106,45,0,0,65,8,116,114,114,54,2,0,32,1,65,1,106,33,1,12,1,11,11,35,53,32,0,16,19,11,99,1,3,127,3,64,32,2,65,192,0,72,4,64,32,2,65,2,116,34,1,35,53,106,35,55,34,3,32,1,65,3,106,106,45,0,0,32,1,32,3,106,45,0,0,65,24,116,32,1,65,1,106,32,3,106,45,0,0,65,16,116,114,32,1,65,2,106,32,3,106,45,0,0,65,8,116,114,114,54,2,0,32,2,65,1,106,33,2,12,1,11,11,35,53,32,0,16,19,11,74,0,65,231,204,167,208,6,36,31,65,133,221,158,219,123,36,32,65,242,230,187,227,3,36,33,65,186,234,191,170,122,36,34,65,255,164,185,136,5,36,35,65,140,209,149,216,121,36,36,65,171,179,143,252,1,36,37,65,153,154,131,223,5,36,38,65,0,36,58,65,0,36,59,11,227,3,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,16,73,4,64,35,47,65,2,116,34,2,32,0,106,32,1,32,2,65,3,106,106,45,0,0,32,1,32,2,106,45,0,0,65,24,116,32,1,32,2,65,1,106,106,45,0,0,65,16,116,114,32,1,32,2,65,2,106,106,45,0,0,65,8,116,114,114,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,16,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,32,0,35,47,65,16,107,65,2,116,106,40,2,0,32,0,35,47,65,7,107,65,2,116,106,40,2,0,32,0,35,47,65,2,107,65,2,116,106,40,2,0,34,1,65,17,120,32,1,65,19,120,115,32,1,65,10,118,115,106,32,0,35,47,65,15,107,65,2,116,106,40,2,0,34,1,65,7,120,32,1,65,18,120,115,32,1,65,3,118,115,106,106,54,2,0,35,47,65,1,106,36,47,12,1,11,11,65,0,36,47,3,64,35,47,65,192,0,73,4,64,35,47,65,2,116,34,1,32,0,106,40,2,0,32,1,35,29,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,3,113,35,39,34,1,32,2,113,32,1,32,3,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,174,1,1,2,127,35,59,32,1,106,36,59,35,58,4,64,65,192,0,35,58,107,34,2,32,1,76,4,64,35,51,35,58,106,32,0,32,2,252,10,0,0,35,58,32,2,106,36,58,65,192,0,35,58,107,33,2,32,1,65,192,0,35,58,107,107,33,1,35,53,35,51,16,23,65,0,36,58,5,35,51,35,58,106,32,0,32,1,252,10,0,0,35,58,32,1,106,36,58,15,11,11,3,64,32,3,32,1,65,192,0,109,72,4,64,35,53,32,0,32,2,106,16,23,32,3,65,1,106,33,3,32,2,65,64,107,33,2,12,1,11,11,32,1,65,63,113,34,1,4,64,35,51,35,58,106,32,0,32,2,106,32,1,252,10,0,0,35,58,32,1,106,36,58,11,11,146,2,1,2,127,35,59,65,63,113,65,63,73,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,59,65,63,113,65,56,79,4,64,35,51,35,58,106,34,1,65,192,0,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,53,35,51,16,23,65,0,36,58,11,35,59,65,63,113,65,63,79,4,64,35,51,35,58,106,65,128,1,58,0,0,35,58,65,1,106,36,58,11,35,51,35,58,106,34,1,65,56,35,58,107,106,33,2,3,64,32,1,32,2,73,4,64,32,1,65,0,58,0,0,32,1,65,1,106,33,1,12,1,11,11,35,51,35,59,65,128,128,128,128,2,109,16,18,54,2,56,35,51,35,59,65,3,116,16,18,54,2,60,35,53,35,51,16,23,32,0,35,31,16,18,54,2,0,32,0,35,32,16,18,54,2,4,32,0,35,33,16,18,54,2,8,32,0,35,34,16,18,54,2,12,32,0,35,35,16,18,54,2,16,32,0,35,36,16,18,54,2,20,32,0,35,37,16,18,54,2,24,32,0,35,38,16,18,54,2,28,11,14,0,16,22,35,55,32,0,16,24,35,57,16,25,11,253,1,1,2,127,35,31,36,39,35,32,36,40,35,33,36,41,35,34,36,42,35,35,36,43,35,36,36,44,35,37,36,45,35,38,36,46,65,0,36,47,3,64,35,47,65,192,0,73,4,64,32,0,35,47,65,2,116,106,40,2,0,35,46,35,43,34,1,65,6,120,32,1,65,11,120,115,32,1,65,25,120,115,106,35,43,34,1,35,44,113,35,45,32,1,65,127,115,113,115,106,106,36,48,35,39,34,1,65,2,120,32,1,65,13,120,115,32,1,65,22,120,115,35,40,34,2,35,41,34,1,113,32,2,35,39,34,2,113,32,1,32,2,113,115,115,106,36,49,35,45,36,46,35,44,36,45,35,43,36,44,35,42,35,48,106,36,43,35,41,36,42,35,40,36,41,35,39,36,40,35,48,35,49,106,36,39,35,47,65,1,106,36,47,12,1,11,11,35,31,35,39,106,36,31,35,32,35,40,106,36,32,35,33,35,41,106,36,33,35,34,35,42,106,36,34,35,35,35,43,106,36,35,35,36,35,44,106,36,36,35,37,35,45,106,36,37,35,38,35,46,106,36,38,11,86,0,16,22,35,53,32,0,16,23,35,30,16,27,32,1,35,31,16,18,54,2,0,32,1,35,32,16,18,54,2,4,32,1,35,33,16,18,54,2,8,32,1,35,34,16,18,54,2,12,32,1,35,35,16,18,54,2,16,32,1,35,36,16,18,54,2,20,32,1,35,37,16,18,54,2,24,32,1,35,38,16,18,54,2,28,11,63,0,16,16,65,196,10,40,2,0,36,29,65,148,13,40,2,0,36,30,65,192,0,16,11,36,50,35,50,36,51,65,128,8,16,11,36,52,35,52,36,53,65,128,4,16,11,36,54,35,54,36,55,65,32,16,11,36,56,35,56,36,57,11,11,141,12,38,0,65,140,8,11,2,28,1,0,65,152,8,11,136,2,1,0,0,0,0,1,0,0,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,0,65,172,10,11,1,44,0,65,184,10,11,21,4,0,0,0,16,0,0,0,32,4,0,0,32,4,0,0,0,1,0,0,64,0,65,220,10,11,2,28,1,0,65,232,10,11,136,2,1,0,0,0,0,1,0,0,152,47,138,194,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,243,155,193,193,105,155,100,134,71,254,240,198,237,225,15,84,242,12,36,111,52,233,79,190,132,201,108,30,65,185,97,250,136,249,22,82,81,198,242,109,90,142,168,101,252,25,176,199,158,217,185,195,49,18,154,160,234,14,231,43,35,177,253,176,62,53,199,213,186,105,48,95,109,151,203,143,17,15,90,253,238,30,220,137,182,53,10,4,122,11,222,157,202,244,88,22,91,93,225,134,62,127,0,128,137,8,55,50,234,7,165,55,149,171,111,16,97,64,23,241,214,140,13,109,59,170,205,55,190,187,192,218,59,97,131,99,163,72,219,49,233,2,11,167,92,209,111,202,250,26,82,49,132,51,49,149,26,212,110,144,120,67,109,242,145,156,195,189,171,204,158,230,160,201,181,60,182,47,83,198,65,199,210,163,126,35,7,104,75,149,164,118,29,25,76,0,65,252,12,11,1,44,0,65,136,13,11,21,4,0,0,0,16,0,0,0,112,5,0,0,112,5,0,0,0,1,0,0,64,0,65,172,13,11,1,44,0,65,184,13,11,35,2,0,0,0,28,0,0,0,73,0,110,0,118,0,97,0,108,0,105,0,100,0,32,0,108,0,101,0,110,0,103,0,116,0,104,0,65,220,13,11,1,60,0,65,232,13,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,98,0,117,0,102,0,102,0,101,0,114,0,46,0,116,0,115,0,65,156,14,11,1,60,0,65,168,14,11,47,2,0,0,0,40,0,0,0,65,0,108,0,108,0,111,0,99,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,111,0,111,0,32,0,108,0,97,0,114,0,103,0,101,0,65,220,14,11,1,60,0,65,232,14,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,99,0,109,0,115,0,46,0,116,0,115,0,65,156,15,11,1,60,0,65,168,15,11,37,2,0,0,0,30,0,0,0,126,0,108,0,105,0,98,0,47,0,114,0,116,0,47,0,116,0,108,0,115,0,102,0,46,0,116,0,115,0,65,252,15,11,1,60,0,65,136,16,11,43,2,0,0,0,36,0,0,0,73,0,110,0,100,0,101,0,120,0,32,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,65,188,16,11,1,44,0,65,200,16,11,33,2,0,0,0,26,0,0,0,126,0,108,0,105,0,98,0,47,0,97,0,114,0,114,0,97,0,121,0,46,0,116,0,115,0,65,236,16,11,1,124,0,65,248,16,11,107,2,0,0,0,100,0,0,0,116,0,111,0,83,0,116,0,114,0,105,0,110,0,103,0,40,0,41,0,32,0,114,0,97,0,100,0,105,0,120,0,32,0,97,0,114,0,103,0,117,0,109,0,101,0,110,0,116,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,98,0,101,0,116,0,119,0,101,0,101,0,110,0,32,0,50,0,32,0,97,0,110,0,100,0,32,0,51,0,54,0,65,236,17,11,1,60,0,65,248,17,11,45,2,0,0,0,38,0,0,0,126,0,108,0,105,0,98,0,47,0,117,0,116,0,105,0,108,0,47,0,110,0,117,0,109,0,98,0,101,0,114,0,46,0,116,0,115,0,65,172,18,11,1,28,0,65,184,18,11,9,2,0,0,0,2,0,0,0,48,0,65,204,18,11,1,92,0,65,216,18,11,79,2,0,0,0,72,0,0,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,65,172,19,11,1,92,0,65,184,19,11,79,2,0,0,0,72,0,0,0,115,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32,0,65,140,20,11,1,28,0,65,152,20,11,1,2,0,65,172,20,11,1,60,0,65,184,20,11,51,2,0,0,0,44,0,0,0,97,0,115,0,115,0,101,0,109,0,98,0,108,0,121,0,47,0,117,0,116,0,105,0,108,0,115,0,47,0,118,0,49,0,50,0,56,0,46,0,116,0,115,0,65,236,20,11,1,92,0,65,248,20,11,79,2,0,0,0,72,0,0,0,103,0,101,0,116,0,86,0,49,0,50,0,56,0,58,0,32,0,101,0,120,0,112,0,101,0,99,0,116,0,32,0,105,0,32,0,102,0,114,0,111,0,109,0,32,0,48,0,32,0,116,0,111,0,32,0,54,0,51,0,44,0,32,0,103,0,111,0,116,0,32]);