Unescape HTML · Rust 🤝 Fable 5.2

SHA-256 d464ff1ce894733367f1502e92893d64473bd681d8137e722369df04e7955e12

View source (108.8 KiB of Rust)
// unescape_html in Rust with Wasm SIMD: decodes every HTML character reference in UTF-8 text
// the way Python's html.unescape does, and copies all other bytes unchanged.
//
// The design goal is a short path per reference with few unpredictable branches:
// - 64 zero bytes are written after the input, so no load or loop needs a bounds check and
//   nothing stale from an earlier input can be mistaken for part of a reference.
// - Two stages per 4 KiB window. Stage 1 turns each 64-byte block into a bitmask of its `&`
//   and appends their positions to a list, without branching on what it finds. Stage 2
//   walks the list: copy the text since the last reference (32 bytes unconditionally, more
//   in a loop), then decode. The next position is known before the current reference is
//   decoded, so consecutive references do not wait on each other.
// - Inputs without `&` are returned in place; nothing is copied.
// - A name of up to 7 bytes ending in `;` is looked up without measuring it: the first `;`
//   in the next 8 bytes is found with a SWAR zero-byte test, the bytes up to it are the key,
//   and one multiply indexes an open-addressed table of 16-byte entries (key, value, length).
//   A hit proves the name; legacy and common names sit in their home slot.
// - Longer names go through a second table and one masked 32-byte vector compare.
// - Without `;` only the 106 legacy names match. A filter on the first two bytes gives the
//   longest legacy name that could start there, usually none.
// - Numeric references of up to 7 digits, decimal or hexadecimal, share one branch-free
//   SWAR path, and the code point is encoded as UTF-8 without branching on its length.
// Tables are built from the packed entity list on the first call.
//
// Build: rustc --edition 2021 --target wasm32-unknown-unknown --crate-type cdylib
//   -C opt-level=3 -C panic=abort -C lto -C codegen-units=1 -C strip=symbols
//   -C target-feature=+simd128,+bulk-memory -C link-arg=-zstack-size=8192
//   -C link-arg=--initial-memory=3145728 -C link-arg=--max-memory=3145728 unescape.rs
#![no_std]
#![allow(static_mut_refs)]

use core::arch::wasm32::*;
use core::ptr::{addr_of, addr_of_mut};

const INPUT_CAP: usize = 1 << 20;
// The largest growth is `&nGt;` (5 bytes) becoming 6 bytes.
const OUTPUT_CAP: usize = INPUT_CAP / 5 * 6 + 8;
const PAD: usize = 128;

const FAST_BITS: u32 = 12;
const FAST_TAIL: usize = 32;
const LEG_BITS: u32 = 8;
const LEG_TAIL: usize = 16;
const LONG_BITS: u32 = 11;
const LONG_MASK: usize = (1 << LONG_BITS) - 1;
const EMPTY: u64 = !0;
// Bytes of input per stage-1 window; a multiple of 64.
const WINDOW: usize = 4096;
const ONES: u64 = 0x0101010101010101;
const HIGH: u64 = 0x8080808080808080;

const ENTITY_COUNT: usize = 2125;
const LONG_COUNT: usize = 506;
const FAST_MUL: u64 = 0x0c6e5973286bef29;
const LEG_MUL: u64 = 0x2ba5322c33c67a59;
const LONG_MUL: u64 = 0xa0c2995f40498cb3;
static ENTITY_BLOB: [u8; 24470] = [
    133,2,65,69,108,105,103,195,134,131,1,65,77,80,38,134,2,65,97,99,117,116,101,195,
    129,133,2,65,99,105,114,99,195,130,134,2,65,103,114,97,118,101,195,128,133,2,65,114,
    105,110,103,195,133,134,2,65,116,105,108,100,101,195,131,132,2,65,117,109,108,195,132,132,
    2,67,79,80,89,194,169,134,2,67,99,101,100,105,108,195,135,131,2,69,84,72,195,144,
    134,2,69,97,99,117,116,101,195,137,133,2,69,99,105,114,99,195,138,134,2,69,103,114,
    97,118,101,195,136,132,2,69,117,109,108,195,139,130,1,71,84,62,134,2,73,97,99,117,
    116,101,195,141,133,2,73,99,105,114,99,195,142,134,2,73,103,114,97,118,101,195,140,132,
    2,73,117,109,108,195,143,130,1,76,84,60,134,2,78,116,105,108,100,101,195,145,134,2,
    79,97,99,117,116,101,195,147,133,2,79,99,105,114,99,195,148,134,2,79,103,114,97,118,
    101,195,146,134,2,79,115,108,97,115,104,195,152,134,2,79,116,105,108,100,101,195,149,132,
    2,79,117,109,108,195,150,132,1,81,85,79,84,34,131,2,82,69,71,194,174,133,2,84,
    72,79,82,78,195,158,134,2,85,97,99,117,116,101,195,154,133,2,85,99,105,114,99,195,
    155,134,2,85,103,114,97,118,101,195,153,132,2,85,117,109,108,195,156,134,2,89,97,99,
    117,116,101,195,157,134,2,97,97,99,117,116,101,195,161,133,2,97,99,105,114,99,195,162,
    133,2,97,99,117,116,101,194,180,133,2,97,101,108,105,103,195,166,134,2,97,103,114,97,
    118,101,195,160,131,1,97,109,112,38,133,2,97,114,105,110,103,195,165,134,2,97,116,105,
    108,100,101,195,163,132,2,97,117,109,108,195,164,134,2,98,114,118,98,97,114,194,166,134,
    2,99,99,101,100,105,108,195,167,133,2,99,101,100,105,108,194,184,132,2,99,101,110,116,
    194,162,132,2,99,111,112,121,194,169,134,2,99,117,114,114,101,110,194,164,131,2,100,101,
    103,194,176,134,2,100,105,118,105,100,101,195,183,134,2,101,97,99,117,116,101,195,169,133,
    2,101,99,105,114,99,195,170,134,2,101,103,114,97,118,101,195,168,131,2,101,116,104,195,
    176,132,2,101,117,109,108,195,171,134,2,102,114,97,99,49,50,194,189,134,2,102,114,97,
    99,49,52,194,188,134,2,102,114,97,99,51,52,194,190,130,1,103,116,62,134,2,105,97,
    99,117,116,101,195,173,133,2,105,99,105,114,99,195,174,133,2,105,101,120,99,108,194,161,
    134,2,105,103,114,97,118,101,195,172,134,2,105,113,117,101,115,116,194,191,132,2,105,117,
    109,108,195,175,133,2,108,97,113,117,111,194,171,130,1,108,116,60,132,2,109,97,99,114,
    194,175,133,2,109,105,99,114,111,194,181,134,2,109,105,100,100,111,116,194,183,132,2,110,
    98,115,112,194,160,131,2,110,111,116,194,172,134,2,110,116,105,108,100,101,195,177,134,2,
    111,97,99,117,116,101,195,179,133,2,111,99,105,114,99,195,180,134,2,111,103,114,97,118,
    101,195,178,132,2,111,114,100,102,194,170,132,2,111,114,100,109,194,186,134,2,111,115,108,
    97,115,104,195,184,134,2,111,116,105,108,100,101,195,181,132,2,111,117,109,108,195,182,132,
    2,112,97,114,97,194,182,134,2,112,108,117,115,109,110,194,177,133,2,112,111,117,110,100,
    194,163,132,1,113,117,111,116,34,133,2,114,97,113,117,111,194,187,131,2,114,101,103,194,
    174,132,2,115,101,99,116,194,167,131,2,115,104,121,194,173,132,2,115,117,112,49,194,185,
    132,2,115,117,112,50,194,178,132,2,115,117,112,51,194,179,133,2,115,122,108,105,103,195,
    159,133,2,116,104,111,114,110,195,190,133,2,116,105,109,101,115,195,151,134,2,117,97,99,
    117,116,101,195,186,133,2,117,99,105,114,99,195,187,134,2,117,103,114,97,118,101,195,185,
    131,2,117,109,108,194,168,132,2,117,117,109,108,195,188,134,2,121,97,99,117,116,101,195,
    189,131,2,121,101,110,194,165,132,2,121,117,109,108,195,191,4,1,97,112,111,115,39,5,
    3,114,100,113,117,111,226,128,157,5,3,108,100,113,117,111,226,128,156,5,3,114,115,113,
    117,111,226,128,153,5,3,108,115,113,117,111,226,128,152,5,3,109,100,97,115,104,226,128,
    148,5,3,110,100,97,115,104,226,128,147,6,3,104,101,108,108,105,112,226,128,166,4,3,
    101,117,114,111,226,130,172,5,3,116,114,97,100,101,226,132,162,4,3,98,117,108,108,226,
    128,162,5,3,99,104,101,99,107,226,156,147,6,3,100,97,103,103,101,114,226,128,160,6,
    3,68,97,103,103,101,114,226,128,161,4,3,108,97,114,114,226,134,144,4,3,114,97,114,
    114,226,134,146,4,3,117,97,114,114,226,134,145,4,3,100,97,114,114,226,134,147,4,3,
    104,97,114,114,226,134,148,5,3,112,114,105,109,101,226,128,178,5,3,80,114,105,109,101,
    226,128,179,2,3,108,101,226,137,164,2,3,103,101,226,137,165,2,3,110,101,226,137,160,
    5,3,105,110,102,105,110,226,136,158,3,3,115,117,109,226,136,145,5,3,109,105,110,117,
    115,226,136,146,5,3,114,97,100,105,99,226,136,154,5,3,97,115,121,109,112,226,137,136,
    5,3,101,113,117,105,118,226,137,161,5,2,97,108,112,104,97,206,177,4,2,98,101,116,
    97,206,178,5,2,103,97,109,109,97,206,179,5,2,100,101,108,116,97,206,180,2,2,112,
    105,207,128,2,2,109,117,206,188,5,2,115,105,103,109,97,207,131,5,2,111,109,101,103,
    97,207,137,6,2,108,97,109,98,100,97,206,187,5,2,116,104,101,116,97,206,184,6,3,
    112,101,114,109,105,108,226,128,176,6,3,108,115,97,113,117,111,226,128,185,6,3,114,115,
    97,113,117,111,226,128,186,5,3,115,98,113,117,111,226,128,154,5,3,98,100,113,117,111,
    226,128,158,5,2,111,101,108,105,103,197,147,5,2,79,69,108,105,103,197,146,6,2,115,
    99,97,114,111,110,197,161,6,2,83,99,97,114,111,110,197,160,4,2,89,117,109,108,197,
    184,4,2,102,110,111,102,198,146,4,2,99,105,114,99,203,134,5,2,116,105,108,100,101,
    203,156,4,3,101,110,115,112,226,128,130,4,3,101,109,115,112,226,128,131,6,3,116,104,
    105,110,115,112,226,128,137,4,3,122,119,110,106,226,128,140,3,3,122,119,106,226,128,141,
    3,3,108,114,109,226,128,142,3,3,114,108,109,226,128,143,6,3,115,112,97,100,101,115,
    226,153,160,5,3,99,108,117,98,115,226,153,163,6,3,104,101,97,114,116,115,226,153,165,
    5,3,100,105,97,109,115,226,153,166,3,3,108,111,122,226,151,138,4,3,115,116,97,114,
    226,152,134,5,3,115,116,97,114,102,226,152,133,5,3,112,104,111,110,101,226,152,142,5,
    3,99,114,111,115,115,226,156,151,9,3,99,104,101,99,107,109,97,114,107,226,156,147,6,
    2,65,98,114,101,118,101,196,130,3,2,65,99,121,208,144,3,4,65,102,114,240,157,148,
    132,5,2,65,108,112,104,97,206,145,5,2,65,109,97,99,114,196,128,3,3,65,110,100,
    226,169,147,5,2,65,111,103,111,110,196,132,4,4,65,111,112,102,240,157,148,184,13,3,
    65,112,112,108,121,70,117,110,99,116,105,111,110,226,129,161,4,4,65,115,99,114,240,157,
    146,156,6,3,65,115,115,105,103,110,226,137,148,9,3,66,97,99,107,115,108,97,115,104,
    226,136,150,4,3,66,97,114,118,226,171,167,6,3,66,97,114,119,101,100,226,140,134,3,
    2,66,99,121,208,145,7,3,66,101,99,97,117,115,101,226,136,181,10,3,66,101,114,110,
    111,117,108,108,105,115,226,132,172,4,2,66,101,116,97,206,146,3,4,66,102,114,240,157,
    148,133,4,4,66,111,112,102,240,157,148,185,5,2,66,114,101,118,101,203,152,4,3,66,
    115,99,114,226,132,172,6,3,66,117,109,112,101,113,226,137,142,4,2,67,72,99,121,208,
    167,6,2,67,97,99,117,116,101,196,134,3,3,67,97,112,226,139,146,20,3,67,97,112,
    105,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,226,133,133,7,3,67,97,
    121,108,101,121,115,226,132,173,6,2,67,99,97,114,111,110,196,140,5,2,67,99,105,114,
    99,196,136,7,3,67,99,111,110,105,110,116,226,136,176,4,2,67,100,111,116,196,138,7,
    2,67,101,100,105,108,108,97,194,184,9,2,67,101,110,116,101,114,68,111,116,194,183,3,
    3,67,102,114,226,132,173,3,2,67,104,105,206,167,9,3,67,105,114,99,108,101,68,111,
    116,226,138,153,11,3,67,105,114,99,108,101,77,105,110,117,115,226,138,150,10,3,67,105,
    114,99,108,101,80,108,117,115,226,138,149,11,3,67,105,114,99,108,101,84,105,109,101,115,
    226,138,151,24,3,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,
    101,103,114,97,108,226,136,178,21,3,67,108,111,115,101,67,117,114,108,121,68,111,117,98,
    108,101,81,117,111,116,101,226,128,157,15,3,67,108,111,115,101,67,117,114,108,121,81,117,
    111,116,101,226,128,153,5,3,67,111,108,111,110,226,136,183,6,3,67,111,108,111,110,101,
    226,169,180,9,3,67,111,110,103,114,117,101,110,116,226,137,161,6,3,67,111,110,105,110,
    116,226,136,175,15,3,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,226,136,174,
    4,3,67,111,112,102,226,132,130,9,3,67,111,112,114,111,100,117,99,116,226,136,144,31,
    3,67,111,117,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,
    73,110,116,101,103,114,97,108,226,136,179,5,3,67,114,111,115,115,226,168,175,4,4,67,
    115,99,114,240,157,146,158,3,3,67,117,112,226,139,147,6,3,67,117,112,67,97,112,226,
    137,141,2,3,68,68,226,133,133,8,3,68,68,111,116,114,97,104,100,226,164,145,4,2,
    68,74,99,121,208,130,4,2,68,83,99,121,208,133,4,2,68,90,99,121,208,143,4,3,
    68,97,114,114,226,134,161,5,3,68,97,115,104,118,226,171,164,6,2,68,99,97,114,111,
    110,196,142,3,2,68,99,121,208,148,3,3,68,101,108,226,136,135,5,2,68,101,108,116,
    97,206,148,3,4,68,102,114,240,157,148,135,16,2,68,105,97,99,114,105,116,105,99,97,
    108,65,99,117,116,101,194,180,14,2,68,105,97,99,114,105,116,105,99,97,108,68,111,116,
    203,153,22,2,68,105,97,99,114,105,116,105,99,97,108,68,111,117,98,108,101,65,99,117,
    116,101,203,157,16,1,68,105,97,99,114,105,116,105,99,97,108,71,114,97,118,101,96,16,
    2,68,105,97,99,114,105,116,105,99,97,108,84,105,108,100,101,203,156,7,3,68,105,97,
    109,111,110,100,226,139,132,13,3,68,105,102,102,101,114,101,110,116,105,97,108,68,226,133,
    134,4,4,68,111,112,102,240,157,148,187,3,2,68,111,116,194,168,6,3,68,111,116,68,
    111,116,226,131,156,8,3,68,111,116,69,113,117,97,108,226,137,144,21,3,68,111,117,98,
    108,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,226,136,175,9,2,68,111,
    117,98,108,101,68,111,116,194,168,15,3,68,111,117,98,108,101,68,111,119,110,65,114,114,
    111,119,226,135,147,15,3,68,111,117,98,108,101,76,101,102,116,65,114,114,111,119,226,135,
    144,20,3,68,111,117,98,108,101,76,101,102,116,82,105,103,104,116,65,114,114,111,119,226,
    135,148,13,3,68,111,117,98,108,101,76,101,102,116,84,101,101,226,171,164,19,3,68,111,
    117,98,108,101,76,111,110,103,76,101,102,116,65,114,114,111,119,226,159,184,24,3,68,111,
    117,98,108,101,76,111,110,103,76,101,102,116,82,105,103,104,116,65,114,114,111,119,226,159,
    186,20,3,68,111,117,98,108,101,76,111,110,103,82,105,103,104,116,65,114,114,111,119,226,
    159,185,16,3,68,111,117,98,108,101,82,105,103,104,116,65,114,114,111,119,226,135,146,14,
    3,68,111,117,98,108,101,82,105,103,104,116,84,101,101,226,138,168,13,3,68,111,117,98,
    108,101,85,112,65,114,114,111,119,226,135,145,17,3,68,111,117,98,108,101,85,112,68,111,
    119,110,65,114,114,111,119,226,135,149,17,3,68,111,117,98,108,101,86,101,114,116,105,99,
    97,108,66,97,114,226,136,165,9,3,68,111,119,110,65,114,114,111,119,226,134,147,12,3,
    68,111,119,110,65,114,114,111,119,66,97,114,226,164,147,16,3,68,111,119,110,65,114,114,
    111,119,85,112,65,114,114,111,119,226,135,181,9,2,68,111,119,110,66,114,101,118,101,204,
    145,19,3,68,111,119,110,76,101,102,116,82,105,103,104,116,86,101,99,116,111,114,226,165,
    144,17,3,68,111,119,110,76,101,102,116,84,101,101,86,101,99,116,111,114,226,165,158,14,
    3,68,111,119,110,76,101,102,116,86,101,99,116,111,114,226,134,189,17,3,68,111,119,110,
    76,101,102,116,86,101,99,116,111,114,66,97,114,226,165,150,18,3,68,111,119,110,82,105,
    103,104,116,84,101,101,86,101,99,116,111,114,226,165,159,15,3,68,111,119,110,82,105,103,
    104,116,86,101,99,116,111,114,226,135,129,18,3,68,111,119,110,82,105,103,104,116,86,101,
    99,116,111,114,66,97,114,226,165,151,7,3,68,111,119,110,84,101,101,226,138,164,12,3,
    68,111,119,110,84,101,101,65,114,114,111,119,226,134,167,9,3,68,111,119,110,97,114,114,
    111,119,226,135,147,4,4,68,115,99,114,240,157,146,159,6,2,68,115,116,114,111,107,196,
    144,3,2,69,78,71,197,138,6,2,69,99,97,114,111,110,196,154,3,2,69,99,121,208,
    173,4,2,69,100,111,116,196,150,3,4,69,102,114,240,157,148,136,7,3,69,108,101,109,
    101,110,116,226,136,136,5,2,69,109,97,99,114,196,146,16,3,69,109,112,116,121,83,109,
    97,108,108,83,113,117,97,114,101,226,151,187,20,3,69,109,112,116,121,86,101,114,121,83,
    109,97,108,108,83,113,117,97,114,101,226,150,171,5,2,69,111,103,111,110,196,152,4,4,
    69,111,112,102,240,157,148,188,7,2,69,112,115,105,108,111,110,206,149,5,3,69,113,117,
    97,108,226,169,181,10,3,69,113,117,97,108,84,105,108,100,101,226,137,130,11,3,69,113,
    117,105,108,105,98,114,105,117,109,226,135,140,4,3,69,115,99,114,226,132,176,4,3,69,
    115,105,109,226,169,179,3,2,69,116,97,206,151,6,3,69,120,105,115,116,115,226,136,131,
    12,3,69,120,112,111,110,101,110,116,105,97,108,69,226,133,135,3,2,70,99,121,208,164,
    3,4,70,102,114,240,157,148,137,17,3,70,105,108,108,101,100,83,109,97,108,108,83,113,
    117,97,114,101,226,151,188,21,3,70,105,108,108,101,100,86,101,114,121,83,109,97,108,108,
    83,113,117,97,114,101,226,150,170,4,4,70,111,112,102,240,157,148,189,6,3,70,111,114,
    65,108,108,226,136,128,10,3,70,111,117,114,105,101,114,116,114,102,226,132,177,4,3,70,
    115,99,114,226,132,177,4,2,71,74,99,121,208,131,5,2,71,97,109,109,97,206,147,6,
    2,71,97,109,109,97,100,207,156,6,2,71,98,114,101,118,101,196,158,6,2,71,99,101,
    100,105,108,196,162,5,2,71,99,105,114,99,196,156,3,2,71,99,121,208,147,4,2,71,
    100,111,116,196,160,3,4,71,102,114,240,157,148,138,2,3,71,103,226,139,153,4,4,71,
    111,112,102,240,157,148,190,12,3,71,114,101,97,116,101,114,69,113,117,97,108,226,137,165,
    16,3,71,114,101,97,116,101,114,69,113,117,97,108,76,101,115,115,226,139,155,16,3,71,
    114,101,97,116,101,114,70,117,108,108,69,113,117,97,108,226,137,167,14,3,71,114,101,97,
    116,101,114,71,114,101,97,116,101,114,226,170,162,11,3,71,114,101,97,116,101,114,76,101,
    115,115,226,137,183,17,3,71,114,101,97,116,101,114,83,108,97,110,116,69,113,117,97,108,
    226,169,190,12,3,71,114,101,97,116,101,114,84,105,108,100,101,226,137,179,4,4,71,115,
    99,114,240,157,146,162,2,3,71,116,226,137,171,6,2,72,65,82,68,99,121,208,170,5,
    2,72,97,99,101,107,203,135,3,1,72,97,116,94,5,2,72,99,105,114,99,196,164,3,
    3,72,102,114,226,132,140,12,3,72,105,108,98,101,114,116,83,112,97,99,101,226,132,139,
    4,3,72,111,112,102,226,132,141,14,3,72,111,114,105,122,111,110,116,97,108,76,105,110,
    101,226,148,128,4,3,72,115,99,114,226,132,139,6,2,72,115,116,114,111,107,196,166,12,
    3,72,117,109,112,68,111,119,110,72,117,109,112,226,137,142,9,3,72,117,109,112,69,113,
    117,97,108,226,137,143,4,2,73,69,99,121,208,149,5,2,73,74,108,105,103,196,178,4,
    2,73,79,99,121,208,129,3,2,73,99,121,208,152,4,2,73,100,111,116,196,176,3,3,
    73,102,114,226,132,145,2,3,73,109,226,132,145,5,2,73,109,97,99,114,196,170,10,3,
    73,109,97,103,105,110,97,114,121,73,226,133,136,7,3,73,109,112,108,105,101,115,226,135,
    146,3,3,73,110,116,226,136,172,8,3,73,110,116,101,103,114,97,108,226,136,171,12,3,
    73,110,116,101,114,115,101,99,116,105,111,110,226,139,130,14,3,73,110,118,105,115,105,98,
    108,101,67,111,109,109,97,226,129,163,14,3,73,110,118,105,115,105,98,108,101,84,105,109,
    101,115,226,129,162,5,2,73,111,103,111,110,196,174,4,4,73,111,112,102,240,157,149,128,
    4,2,73,111,116,97,206,153,4,3,73,115,99,114,226,132,144,6,2,73,116,105,108,100,
    101,196,168,5,2,73,117,107,99,121,208,134,5,2,74,99,105,114,99,196,180,3,2,74,
    99,121,208,153,3,4,74,102,114,240,157,148,141,4,4,74,111,112,102,240,157,149,129,4,
    4,74,115,99,114,240,157,146,165,6,2,74,115,101,114,99,121,208,136,5,2,74,117,107,
    99,121,208,132,4,2,75,72,99,121,208,165,4,2,75,74,99,121,208,140,5,2,75,97,
    112,112,97,206,154,6,2,75,99,101,100,105,108,196,182,3,2,75,99,121,208,154,3,4,
    75,102,114,240,157,148,142,4,4,75,111,112,102,240,157,149,130,4,4,75,115,99,114,240,
    157,146,166,4,2,76,74,99,121,208,137,6,2,76,97,99,117,116,101,196,185,6,2,76,
    97,109,98,100,97,206,155,4,3,76,97,110,103,226,159,170,10,3,76,97,112,108,97,99,
    101,116,114,102,226,132,146,4,3,76,97,114,114,226,134,158,6,2,76,99,97,114,111,110,
    196,189,6,2,76,99,101,100,105,108,196,187,3,2,76,99,121,208,155,16,3,76,101,102,
    116,65,110,103,108,101,66,114,97,99,107,101,116,226,159,168,9,3,76,101,102,116,65,114,
    114,111,119,226,134,144,12,3,76,101,102,116,65,114,114,111,119,66,97,114,226,135,164,19,
    3,76,101,102,116,65,114,114,111,119,82,105,103,104,116,65,114,114,111,119,226,135,134,11,
    3,76,101,102,116,67,101,105,108,105,110,103,226,140,136,17,3,76,101,102,116,68,111,117,
    98,108,101,66,114,97,99,107,101,116,226,159,166,17,3,76,101,102,116,68,111,119,110,84,
    101,101,86,101,99,116,111,114,226,165,161,14,3,76,101,102,116,68,111,119,110,86,101,99,
    116,111,114,226,135,131,17,3,76,101,102,116,68,111,119,110,86,101,99,116,111,114,66,97,
    114,226,165,153,9,3,76,101,102,116,70,108,111,111,114,226,140,138,14,3,76,101,102,116,
    82,105,103,104,116,65,114,114,111,119,226,134,148,15,3,76,101,102,116,82,105,103,104,116,
    86,101,99,116,111,114,226,165,142,7,3,76,101,102,116,84,101,101,226,138,163,12,3,76,
    101,102,116,84,101,101,65,114,114,111,119,226,134,164,13,3,76,101,102,116,84,101,101,86,
    101,99,116,111,114,226,165,154,12,3,76,101,102,116,84,114,105,97,110,103,108,101,226,138,
    178,15,3,76,101,102,116,84,114,105,97,110,103,108,101,66,97,114,226,167,143,17,3,76,
    101,102,116,84,114,105,97,110,103,108,101,69,113,117,97,108,226,138,180,16,3,76,101,102,
    116,85,112,68,111,119,110,86,101,99,116,111,114,226,165,145,15,3,76,101,102,116,85,112,
    84,101,101,86,101,99,116,111,114,226,165,160,12,3,76,101,102,116,85,112,86,101,99,116,
    111,114,226,134,191,15,3,76,101,102,116,85,112,86,101,99,116,111,114,66,97,114,226,165,
    152,10,3,76,101,102,116,86,101,99,116,111,114,226,134,188,13,3,76,101,102,116,86,101,
    99,116,111,114,66,97,114,226,165,146,9,3,76,101,102,116,97,114,114,111,119,226,135,144,
    14,3,76,101,102,116,114,105,103,104,116,97,114,114,111,119,226,135,148,16,3,76,101,115,
    115,69,113,117,97,108,71,114,101,97,116,101,114,226,139,154,13,3,76,101,115,115,70,117,
    108,108,69,113,117,97,108,226,137,166,11,3,76,101,115,115,71,114,101,97,116,101,114,226,
    137,182,8,3,76,101,115,115,76,101,115,115,226,170,161,14,3,76,101,115,115,83,108,97,
    110,116,69,113,117,97,108,226,169,189,9,3,76,101,115,115,84,105,108,100,101,226,137,178,
    3,4,76,102,114,240,157,148,143,2,3,76,108,226,139,152,10,3,76,108,101,102,116,97,
    114,114,111,119,226,135,154,6,2,76,109,105,100,111,116,196,191,13,3,76,111,110,103,76,
    101,102,116,65,114,114,111,119,226,159,181,18,3,76,111,110,103,76,101,102,116,82,105,103,
    104,116,65,114,114,111,119,226,159,183,14,3,76,111,110,103,82,105,103,104,116,65,114,114,
    111,119,226,159,182,13,3,76,111,110,103,108,101,102,116,97,114,114,111,119,226,159,184,18,
    3,76,111,110,103,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,159,186,14,3,
    76,111,110,103,114,105,103,104,116,97,114,114,111,119,226,159,185,4,4,76,111,112,102,240,
    157,149,131,14,3,76,111,119,101,114,76,101,102,116,65,114,114,111,119,226,134,153,15,3,
    76,111,119,101,114,82,105,103,104,116,65,114,114,111,119,226,134,152,4,3,76,115,99,114,
    226,132,146,3,3,76,115,104,226,134,176,6,2,76,115,116,114,111,107,197,129,2,3,76,
    116,226,137,170,3,3,77,97,112,226,164,133,3,2,77,99,121,208,156,11,3,77,101,100,
    105,117,109,83,112,97,99,101,226,129,159,9,3,77,101,108,108,105,110,116,114,102,226,132,
    179,3,4,77,102,114,240,157,148,144,9,3,77,105,110,117,115,80,108,117,115,226,136,147,
    4,4,77,111,112,102,240,157,149,132,4,3,77,115,99,114,226,132,179,2,2,77,117,206,
    156,4,2,78,74,99,121,208,138,6,2,78,97,99,117,116,101,197,131,6,2,78,99,97,
    114,111,110,197,135,6,2,78,99,101,100,105,108,197,133,3,2,78,99,121,208,157,19,3,
    78,101,103,97,116,105,118,101,77,101,100,105,117,109,83,112,97,99,101,226,128,139,18,3,
    78,101,103,97,116,105,118,101,84,104,105,99,107,83,112,97,99,101,226,128,139,17,3,78,
    101,103,97,116,105,118,101,84,104,105,110,83,112,97,99,101,226,128,139,21,3,78,101,103,
    97,116,105,118,101,86,101,114,121,84,104,105,110,83,112,97,99,101,226,128,139,20,3,78,
    101,115,116,101,100,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,137,171,14,3,
    78,101,115,116,101,100,76,101,115,115,76,101,115,115,226,137,170,7,1,78,101,119,76,105,
    110,101,10,3,4,78,102,114,240,157,148,145,7,3,78,111,66,114,101,97,107,226,129,160,
    16,2,78,111,110,66,114,101,97,107,105,110,103,83,112,97,99,101,194,160,4,3,78,111,
    112,102,226,132,149,3,3,78,111,116,226,171,172,12,3,78,111,116,67,111,110,103,114,117,
    101,110,116,226,137,162,9,3,78,111,116,67,117,112,67,97,112,226,137,173,20,3,78,111,
    116,68,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,226,136,166,10,3,78,
    111,116,69,108,101,109,101,110,116,226,136,137,8,3,78,111,116,69,113,117,97,108,226,137,
    160,13,5,78,111,116,69,113,117,97,108,84,105,108,100,101,226,137,130,204,184,9,3,78,
    111,116,69,120,105,115,116,115,226,136,132,10,3,78,111,116,71,114,101,97,116,101,114,226,
    137,175,15,3,78,111,116,71,114,101,97,116,101,114,69,113,117,97,108,226,137,177,19,5,
    78,111,116,71,114,101,97,116,101,114,70,117,108,108,69,113,117,97,108,226,137,167,204,184,
    17,5,78,111,116,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,137,171,204,184,
    14,3,78,111,116,71,114,101,97,116,101,114,76,101,115,115,226,137,185,20,5,78,111,116,
    71,114,101,97,116,101,114,83,108,97,110,116,69,113,117,97,108,226,169,190,204,184,15,3,
    78,111,116,71,114,101,97,116,101,114,84,105,108,100,101,226,137,181,15,5,78,111,116,72,
    117,109,112,68,111,119,110,72,117,109,112,226,137,142,204,184,12,5,78,111,116,72,117,109,
    112,69,113,117,97,108,226,137,143,204,184,15,3,78,111,116,76,101,102,116,84,114,105,97,
    110,103,108,101,226,139,170,18,5,78,111,116,76,101,102,116,84,114,105,97,110,103,108,101,
    66,97,114,226,167,143,204,184,20,3,78,111,116,76,101,102,116,84,114,105,97,110,103,108,
    101,69,113,117,97,108,226,139,172,7,3,78,111,116,76,101,115,115,226,137,174,12,3,78,
    111,116,76,101,115,115,69,113,117,97,108,226,137,176,14,3,78,111,116,76,101,115,115,71,
    114,101,97,116,101,114,226,137,184,11,5,78,111,116,76,101,115,115,76,101,115,115,226,137,
    170,204,184,17,5,78,111,116,76,101,115,115,83,108,97,110,116,69,113,117,97,108,226,169,
    189,204,184,12,3,78,111,116,76,101,115,115,84,105,108,100,101,226,137,180,23,5,78,111,
    116,78,101,115,116,101,100,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,170,162,
    204,184,17,5,78,111,116,78,101,115,116,101,100,76,101,115,115,76,101,115,115,226,170,161,
    204,184,11,3,78,111,116,80,114,101,99,101,100,101,115,226,138,128,16,5,78,111,116,80,
    114,101,99,101,100,101,115,69,113,117,97,108,226,170,175,204,184,21,3,78,111,116,80,114,
    101,99,101,100,101,115,83,108,97,110,116,69,113,117,97,108,226,139,160,17,3,78,111,116,
    82,101,118,101,114,115,101,69,108,101,109,101,110,116,226,136,140,16,3,78,111,116,82,105,
    103,104,116,84,114,105,97,110,103,108,101,226,139,171,19,5,78,111,116,82,105,103,104,116,
    84,114,105,97,110,103,108,101,66,97,114,226,167,144,204,184,21,3,78,111,116,82,105,103,
    104,116,84,114,105,97,110,103,108,101,69,113,117,97,108,226,139,173,15,5,78,111,116,83,
    113,117,97,114,101,83,117,98,115,101,116,226,138,143,204,184,20,3,78,111,116,83,113,117,
    97,114,101,83,117,98,115,101,116,69,113,117,97,108,226,139,162,17,5,78,111,116,83,113,
    117,97,114,101,83,117,112,101,114,115,101,116,226,138,144,204,184,22,3,78,111,116,83,113,
    117,97,114,101,83,117,112,101,114,115,101,116,69,113,117,97,108,226,139,163,9,6,78,111,
    116,83,117,98,115,101,116,226,138,130,226,131,146,14,3,78,111,116,83,117,98,115,101,116,
    69,113,117,97,108,226,138,136,11,3,78,111,116,83,117,99,99,101,101,100,115,226,138,129,
    16,5,78,111,116,83,117,99,99,101,101,100,115,69,113,117,97,108,226,170,176,204,184,21,
    3,78,111,116,83,117,99,99,101,101,100,115,83,108,97,110,116,69,113,117,97,108,226,139,
    161,16,5,78,111,116,83,117,99,99,101,101,100,115,84,105,108,100,101,226,137,191,204,184,
    11,6,78,111,116,83,117,112,101,114,115,101,116,226,138,131,226,131,146,16,3,78,111,116,
    83,117,112,101,114,115,101,116,69,113,117,97,108,226,138,137,8,3,78,111,116,84,105,108,
    100,101,226,137,129,13,3,78,111,116,84,105,108,100,101,69,113,117,97,108,226,137,132,17,
    3,78,111,116,84,105,108,100,101,70,117,108,108,69,113,117,97,108,226,137,135,13,3,78,
    111,116,84,105,108,100,101,84,105,108,100,101,226,137,137,14,3,78,111,116,86,101,114,116,
    105,99,97,108,66,97,114,226,136,164,4,4,78,115,99,114,240,157,146,169,2,2,78,117,
    206,157,3,2,79,99,121,208,158,6,2,79,100,98,108,97,99,197,144,3,4,79,102,114,
    240,157,148,146,5,2,79,109,97,99,114,197,140,5,2,79,109,101,103,97,206,169,7,2,
    79,109,105,99,114,111,110,206,159,4,4,79,111,112,102,240,157,149,134,20,3,79,112,101,
    110,67,117,114,108,121,68,111,117,98,108,101,81,117,111,116,101,226,128,156,14,3,79,112,
    101,110,67,117,114,108,121,81,117,111,116,101,226,128,152,2,3,79,114,226,169,148,4,4,
    79,115,99,114,240,157,146,170,6,3,79,116,105,109,101,115,226,168,183,7,3,79,118,101,
    114,66,97,114,226,128,190,9,3,79,118,101,114,66,114,97,99,101,226,143,158,11,3,79,
    118,101,114,66,114,97,99,107,101,116,226,142,180,15,3,79,118,101,114,80,97,114,101,110,
    116,104,101,115,105,115,226,143,156,8,3,80,97,114,116,105,97,108,68,226,136,130,3,2,
    80,99,121,208,159,3,4,80,102,114,240,157,148,147,3,2,80,104,105,206,166,2,2,80,
    105,206,160,9,2,80,108,117,115,77,105,110,117,115,194,177,13,3,80,111,105,110,99,97,
    114,101,112,108,97,110,101,226,132,140,4,3,80,111,112,102,226,132,153,2,3,80,114,226,
    170,187,8,3,80,114,101,99,101,100,101,115,226,137,186,13,3,80,114,101,99,101,100,101,
    115,69,113,117,97,108,226,170,175,18,3,80,114,101,99,101,100,101,115,83,108,97,110,116,
    69,113,117,97,108,226,137,188,13,3,80,114,101,99,101,100,101,115,84,105,108,100,101,226,
    137,190,7,3,80,114,111,100,117,99,116,226,136,143,10,3,80,114,111,112,111,114,116,105,
    111,110,226,136,183,12,3,80,114,111,112,111,114,116,105,111,110,97,108,226,136,157,4,4,
    80,115,99,114,240,157,146,171,3,2,80,115,105,206,168,3,4,81,102,114,240,157,148,148,
    4,3,81,111,112,102,226,132,154,4,4,81,115,99,114,240,157,146,172,5,3,82,66,97,
    114,114,226,164,144,6,2,82,97,99,117,116,101,197,148,4,3,82,97,110,103,226,159,171,
    4,3,82,97,114,114,226,134,160,6,3,82,97,114,114,116,108,226,164,150,6,2,82,99,
    97,114,111,110,197,152,6,2,82,99,101,100,105,108,197,150,3,2,82,99,121,208,160,2,
    3,82,101,226,132,156,14,3,82,101,118,101,114,115,101,69,108,101,109,101,110,116,226,136,
    139,18,3,82,101,118,101,114,115,101,69,113,117,105,108,105,98,114,105,117,109,226,135,139,
    20,3,82,101,118,101,114,115,101,85,112,69,113,117,105,108,105,98,114,105,117,109,226,165,
    175,3,3,82,102,114,226,132,156,3,2,82,104,111,206,161,17,3,82,105,103,104,116,65,
    110,103,108,101,66,114,97,99,107,101,116,226,159,169,10,3,82,105,103,104,116,65,114,114,
    111,119,226,134,146,13,3,82,105,103,104,116,65,114,114,111,119,66,97,114,226,135,165,19,
    3,82,105,103,104,116,65,114,114,111,119,76,101,102,116,65,114,114,111,119,226,135,132,12,
    3,82,105,103,104,116,67,101,105,108,105,110,103,226,140,137,18,3,82,105,103,104,116,68,
    111,117,98,108,101,66,114,97,99,107,101,116,226,159,167,18,3,82,105,103,104,116,68,111,
    119,110,84,101,101,86,101,99,116,111,114,226,165,157,15,3,82,105,103,104,116,68,111,119,
    110,86,101,99,116,111,114,226,135,130,18,3,82,105,103,104,116,68,111,119,110,86,101,99,
    116,111,114,66,97,114,226,165,149,10,3,82,105,103,104,116,70,108,111,111,114,226,140,139,
    8,3,82,105,103,104,116,84,101,101,226,138,162,13,3,82,105,103,104,116,84,101,101,65,
    114,114,111,119,226,134,166,14,3,82,105,103,104,116,84,101,101,86,101,99,116,111,114,226,
    165,155,13,3,82,105,103,104,116,84,114,105,97,110,103,108,101,226,138,179,16,3,82,105,
    103,104,116,84,114,105,97,110,103,108,101,66,97,114,226,167,144,18,3,82,105,103,104,116,
    84,114,105,97,110,103,108,101,69,113,117,97,108,226,138,181,17,3,82,105,103,104,116,85,
    112,68,111,119,110,86,101,99,116,111,114,226,165,143,16,3,82,105,103,104,116,85,112,84,
    101,101,86,101,99,116,111,114,226,165,156,13,3,82,105,103,104,116,85,112,86,101,99,116,
    111,114,226,134,190,16,3,82,105,103,104,116,85,112,86,101,99,116,111,114,66,97,114,226,
    165,148,11,3,82,105,103,104,116,86,101,99,116,111,114,226,135,128,14,3,82,105,103,104,
    116,86,101,99,116,111,114,66,97,114,226,165,147,10,3,82,105,103,104,116,97,114,114,111,
    119,226,135,146,4,3,82,111,112,102,226,132,157,12,3,82,111,117,110,100,73,109,112,108,
    105,101,115,226,165,176,11,3,82,114,105,103,104,116,97,114,114,111,119,226,135,155,4,3,
    82,115,99,114,226,132,155,3,3,82,115,104,226,134,177,11,3,82,117,108,101,68,101,108,
    97,121,101,100,226,167,180,6,2,83,72,67,72,99,121,208,169,4,2,83,72,99,121,208,
    168,6,2,83,79,70,84,99,121,208,172,6,2,83,97,99,117,116,101,197,154,2,3,83,
    99,226,170,188,6,2,83,99,101,100,105,108,197,158,5,2,83,99,105,114,99,197,156,3,
    2,83,99,121,208,161,3,4,83,102,114,240,157,148,150,14,3,83,104,111,114,116,68,111,
    119,110,65,114,114,111,119,226,134,147,14,3,83,104,111,114,116,76,101,102,116,65,114,114,
    111,119,226,134,144,15,3,83,104,111,114,116,82,105,103,104,116,65,114,114,111,119,226,134,
    146,12,3,83,104,111,114,116,85,112,65,114,114,111,119,226,134,145,5,2,83,105,103,109,
    97,206,163,11,3,83,109,97,108,108,67,105,114,99,108,101,226,136,152,4,4,83,111,112,
    102,240,157,149,138,4,3,83,113,114,116,226,136,154,6,3,83,113,117,97,114,101,226,150,
    161,18,3,83,113,117,97,114,101,73,110,116,101,114,115,101,99,116,105,111,110,226,138,147,
    12,3,83,113,117,97,114,101,83,117,98,115,101,116,226,138,143,17,3,83,113,117,97,114,
    101,83,117,98,115,101,116,69,113,117,97,108,226,138,145,14,3,83,113,117,97,114,101,83,
    117,112,101,114,115,101,116,226,138,144,19,3,83,113,117,97,114,101,83,117,112,101,114,115,
    101,116,69,113,117,97,108,226,138,146,11,3,83,113,117,97,114,101,85,110,105,111,110,226,
    138,148,4,4,83,115,99,114,240,157,146,174,4,3,83,116,97,114,226,139,134,3,3,83,
    117,98,226,139,144,6,3,83,117,98,115,101,116,226,139,144,11,3,83,117,98,115,101,116,
    69,113,117,97,108,226,138,134,8,3,83,117,99,99,101,101,100,115,226,137,187,13,3,83,
    117,99,99,101,101,100,115,69,113,117,97,108,226,170,176,18,3,83,117,99,99,101,101,100,
    115,83,108,97,110,116,69,113,117,97,108,226,137,189,13,3,83,117,99,99,101,101,100,115,
    84,105,108,100,101,226,137,191,8,3,83,117,99,104,84,104,97,116,226,136,139,3,3,83,
    117,109,226,136,145,3,3,83,117,112,226,139,145,8,3,83,117,112,101,114,115,101,116,226,
    138,131,13,3,83,117,112,101,114,115,101,116,69,113,117,97,108,226,138,135,6,3,83,117,
    112,115,101,116,226,139,145,5,3,84,82,65,68,69,226,132,162,5,2,84,83,72,99,121,
    208,139,4,2,84,83,99,121,208,166,3,1,84,97,98,9,3,2,84,97,117,206,164,6,
    2,84,99,97,114,111,110,197,164,6,2,84,99,101,100,105,108,197,162,3,2,84,99,121,
    208,162,3,4,84,102,114,240,157,148,151,9,3,84,104,101,114,101,102,111,114,101,226,136,
    180,5,2,84,104,101,116,97,206,152,10,6,84,104,105,99,107,83,112,97,99,101,226,129,
    159,226,128,138,9,3,84,104,105,110,83,112,97,99,101,226,128,137,5,3,84,105,108,100,
    101,226,136,188,10,3,84,105,108,100,101,69,113,117,97,108,226,137,131,14,3,84,105,108,
    100,101,70,117,108,108,69,113,117,97,108,226,137,133,10,3,84,105,108,100,101,84,105,108,
    100,101,226,137,136,4,4,84,111,112,102,240,157,149,139,9,3,84,114,105,112,108,101,68,
    111,116,226,131,155,4,4,84,115,99,114,240,157,146,175,6,2,84,115,116,114,111,107,197,
    166,4,3,85,97,114,114,226,134,159,8,3,85,97,114,114,111,99,105,114,226,165,137,5,
    2,85,98,114,99,121,208,142,6,2,85,98,114,101,118,101,197,172,3,2,85,99,121,208,
    163,6,2,85,100,98,108,97,99,197,176,3,4,85,102,114,240,157,148,152,5,2,85,109,
    97,99,114,197,170,8,1,85,110,100,101,114,66,97,114,95,10,3,85,110,100,101,114,66,
    114,97,99,101,226,143,159,12,3,85,110,100,101,114,66,114,97,99,107,101,116,226,142,181,
    16,3,85,110,100,101,114,80,97,114,101,110,116,104,101,115,105,115,226,143,157,5,3,85,
    110,105,111,110,226,139,131,9,3,85,110,105,111,110,80,108,117,115,226,138,142,5,2,85,
    111,103,111,110,197,178,4,4,85,111,112,102,240,157,149,140,7,3,85,112,65,114,114,111,
    119,226,134,145,10,3,85,112,65,114,114,111,119,66,97,114,226,164,146,16,3,85,112,65,
    114,114,111,119,68,111,119,110,65,114,114,111,119,226,135,133,11,3,85,112,68,111,119,110,
    65,114,114,111,119,226,134,149,13,3,85,112,69,113,117,105,108,105,98,114,105,117,109,226,
    165,174,5,3,85,112,84,101,101,226,138,165,10,3,85,112,84,101,101,65,114,114,111,119,
    226,134,165,7,3,85,112,97,114,114,111,119,226,135,145,11,3,85,112,100,111,119,110,97,
    114,114,111,119,226,135,149,14,3,85,112,112,101,114,76,101,102,116,65,114,114,111,119,226,
    134,150,15,3,85,112,112,101,114,82,105,103,104,116,65,114,114,111,119,226,134,151,4,2,
    85,112,115,105,207,146,7,2,85,112,115,105,108,111,110,206,165,5,2,85,114,105,110,103,
    197,174,4,4,85,115,99,114,240,157,146,176,6,2,85,116,105,108,100,101,197,168,5,3,
    86,68,97,115,104,226,138,171,4,3,86,98,97,114,226,171,171,3,2,86,99,121,208,146,
    5,3,86,100,97,115,104,226,138,169,6,3,86,100,97,115,104,108,226,171,166,3,3,86,
    101,101,226,139,129,6,3,86,101,114,98,97,114,226,128,150,4,3,86,101,114,116,226,128,
    150,11,3,86,101,114,116,105,99,97,108,66,97,114,226,136,163,12,1,86,101,114,116,105,
    99,97,108,76,105,110,101,124,17,3,86,101,114,116,105,99,97,108,83,101,112,97,114,97,
    116,111,114,226,157,152,13,3,86,101,114,116,105,99,97,108,84,105,108,100,101,226,137,128,
    13,3,86,101,114,121,84,104,105,110,83,112,97,99,101,226,128,138,3,4,86,102,114,240,
    157,148,153,4,4,86,111,112,102,240,157,149,141,4,4,86,115,99,114,240,157,146,177,6,
    3,86,118,100,97,115,104,226,138,170,5,2,87,99,105,114,99,197,180,5,3,87,101,100,
    103,101,226,139,128,3,4,87,102,114,240,157,148,154,4,4,87,111,112,102,240,157,149,142,
    4,4,87,115,99,114,240,157,146,178,3,4,88,102,114,240,157,148,155,2,2,88,105,206,
    158,4,4,88,111,112,102,240,157,149,143,4,4,88,115,99,114,240,157,146,179,4,2,89,
    65,99,121,208,175,4,2,89,73,99,121,208,135,4,2,89,85,99,121,208,174,5,2,89,
    99,105,114,99,197,182,3,2,89,99,121,208,171,3,4,89,102,114,240,157,148,156,4,4,
    89,111,112,102,240,157,149,144,4,4,89,115,99,114,240,157,146,180,4,2,90,72,99,121,
    208,150,6,2,90,97,99,117,116,101,197,185,6,2,90,99,97,114,111,110,197,189,3,2,
    90,99,121,208,151,4,2,90,100,111,116,197,187,14,3,90,101,114,111,87,105,100,116,104,
    83,112,97,99,101,226,128,139,4,2,90,101,116,97,206,150,3,3,90,102,114,226,132,168,
    4,3,90,111,112,102,226,132,164,4,4,90,115,99,114,240,157,146,181,6,2,97,98,114,
    101,118,101,196,131,2,3,97,99,226,136,190,3,5,97,99,69,226,136,190,204,179,3,3,
    97,99,100,226,136,191,3,2,97,99,121,208,176,2,3,97,102,226,129,161,3,4,97,102,
    114,240,157,148,158,7,3,97,108,101,102,115,121,109,226,132,181,5,3,97,108,101,112,104,
    226,132,181,5,2,97,109,97,99,114,196,129,5,3,97,109,97,108,103,226,168,191,3,3,
    97,110,100,226,136,167,6,3,97,110,100,97,110,100,226,169,149,4,3,97,110,100,100,226,
    169,156,8,3,97,110,100,115,108,111,112,101,226,169,152,4,3,97,110,100,118,226,169,154,
    3,3,97,110,103,226,136,160,4,3,97,110,103,101,226,166,164,5,3,97,110,103,108,101,
    226,136,160,6,3,97,110,103,109,115,100,226,136,161,8,3,97,110,103,109,115,100,97,97,
    226,166,168,8,3,97,110,103,109,115,100,97,98,226,166,169,8,3,97,110,103,109,115,100,
    97,99,226,166,170,8,3,97,110,103,109,115,100,97,100,226,166,171,8,3,97,110,103,109,
    115,100,97,101,226,166,172,8,3,97,110,103,109,115,100,97,102,226,166,173,8,3,97,110,
    103,109,115,100,97,103,226,166,174,8,3,97,110,103,109,115,100,97,104,226,166,175,5,3,
    97,110,103,114,116,226,136,159,7,3,97,110,103,114,116,118,98,226,138,190,8,3,97,110,
    103,114,116,118,98,100,226,166,157,6,3,97,110,103,115,112,104,226,136,162,5,2,97,110,
    103,115,116,195,133,7,3,97,110,103,122,97,114,114,226,141,188,5,2,97,111,103,111,110,
    196,133,4,4,97,111,112,102,240,157,149,146,2,3,97,112,226,137,136,3,3,97,112,69,
    226,169,176,6,3,97,112,97,99,105,114,226,169,175,3,3,97,112,101,226,137,138,4,3,
    97,112,105,100,226,137,139,6,3,97,112,112,114,111,120,226,137,136,8,3,97,112,112,114,
    111,120,101,113,226,137,138,4,4,97,115,99,114,240,157,146,182,3,1,97,115,116,42,7,
    3,97,115,121,109,112,101,113,226,137,141,8,3,97,119,99,111,110,105,110,116,226,136,179,
    5,3,97,119,105,110,116,226,168,145,4,3,98,78,111,116,226,171,173,8,3,98,97,99,
    107,99,111,110,103,226,137,140,11,2,98,97,99,107,101,112,115,105,108,111,110,207,182,9,
    3,98,97,99,107,112,114,105,109,101,226,128,181,7,3,98,97,99,107,115,105,109,226,136,
    189,9,3,98,97,99,107,115,105,109,101,113,226,139,141,6,3,98,97,114,118,101,101,226,
    138,189,6,3,98,97,114,119,101,100,226,140,133,8,3,98,97,114,119,101,100,103,101,226,
    140,133,4,3,98,98,114,107,226,142,181,8,3,98,98,114,107,116,98,114,107,226,142,182,
    5,3,98,99,111,110,103,226,137,140,3,2,98,99,121,208,177,6,3,98,101,99,97,117,
    115,226,136,181,7,3,98,101,99,97,117,115,101,226,136,181,7,3,98,101,109,112,116,121,
    118,226,166,176,5,2,98,101,112,115,105,207,182,6,3,98,101,114,110,111,117,226,132,172,
    4,3,98,101,116,104,226,132,182,7,3,98,101,116,119,101,101,110,226,137,172,3,4,98,
    102,114,240,157,148,159,6,3,98,105,103,99,97,112,226,139,130,7,3,98,105,103,99,105,
    114,99,226,151,175,6,3,98,105,103,99,117,112,226,139,131,7,3,98,105,103,111,100,111,
    116,226,168,128,8,3,98,105,103,111,112,108,117,115,226,168,129,9,3,98,105,103,111,116,
    105,109,101,115,226,168,130,8,3,98,105,103,115,113,99,117,112,226,168,134,7,3,98,105,
    103,115,116,97,114,226,152,133,15,3,98,105,103,116,114,105,97,110,103,108,101,100,111,119,
    110,226,150,189,13,3,98,105,103,116,114,105,97,110,103,108,101,117,112,226,150,179,8,3,
    98,105,103,117,112,108,117,115,226,168,132,6,3,98,105,103,118,101,101,226,139,129,8,3,
    98,105,103,119,101,100,103,101,226,139,128,6,3,98,107,97,114,111,119,226,164,141,12,3,
    98,108,97,99,107,108,111,122,101,110,103,101,226,167,171,11,3,98,108,97,99,107,115,113,
    117,97,114,101,226,150,170,13,3,98,108,97,99,107,116,114,105,97,110,103,108,101,226,150,
    180,17,3,98,108,97,99,107,116,114,105,97,110,103,108,101,100,111,119,110,226,150,190,17,
    3,98,108,97,99,107,116,114,105,97,110,103,108,101,108,101,102,116,226,151,130,18,3,98,
    108,97,99,107,116,114,105,97,110,103,108,101,114,105,103,104,116,226,150,184,5,3,98,108,
    97,110,107,226,144,163,5,3,98,108,107,49,50,226,150,146,5,3,98,108,107,49,52,226,
    150,145,5,3,98,108,107,51,52,226,150,147,5,3,98,108,111,99,107,226,150,136,3,4,
    98,110,101,61,226,131,165,7,6,98,110,101,113,117,105,118,226,137,161,226,131,165,4,3,
    98,110,111,116,226,140,144,4,4,98,111,112,102,240,157,149,147,3,3,98,111,116,226,138,
    165,6,3,98,111,116,116,111,109,226,138,165,6,3,98,111,119,116,105,101,226,139,136,5,
    3,98,111,120,68,76,226,149,151,5,3,98,111,120,68,82,226,149,148,5,3,98,111,120,
    68,108,226,149,150,5,3,98,111,120,68,114,226,149,147,4,3,98,111,120,72,226,149,144,
    5,3,98,111,120,72,68,226,149,166,5,3,98,111,120,72,85,226,149,169,5,3,98,111,
    120,72,100,226,149,164,5,3,98,111,120,72,117,226,149,167,5,3,98,111,120,85,76,226,
    149,157,5,3,98,111,120,85,82,226,149,154,5,3,98,111,120,85,108,226,149,156,5,3,
    98,111,120,85,114,226,149,153,4,3,98,111,120,86,226,149,145,5,3,98,111,120,86,72,
    226,149,172,5,3,98,111,120,86,76,226,149,163,5,3,98,111,120,86,82,226,149,160,5,
    3,98,111,120,86,104,226,149,171,5,3,98,111,120,86,108,226,149,162,5,3,98,111,120,
    86,114,226,149,159,6,3,98,111,120,98,111,120,226,167,137,5,3,98,111,120,100,76,226,
    149,149,5,3,98,111,120,100,82,226,149,146,5,3,98,111,120,100,108,226,148,144,5,3,
    98,111,120,100,114,226,148,140,4,3,98,111,120,104,226,148,128,5,3,98,111,120,104,68,
    226,149,165,5,3,98,111,120,104,85,226,149,168,5,3,98,111,120,104,100,226,148,172,5,
    3,98,111,120,104,117,226,148,180,8,3,98,111,120,109,105,110,117,115,226,138,159,7,3,
    98,111,120,112,108,117,115,226,138,158,8,3,98,111,120,116,105,109,101,115,226,138,160,5,
    3,98,111,120,117,76,226,149,155,5,3,98,111,120,117,82,226,149,152,5,3,98,111,120,
    117,108,226,148,152,5,3,98,111,120,117,114,226,148,148,4,3,98,111,120,118,226,148,130,
    5,3,98,111,120,118,72,226,149,170,5,3,98,111,120,118,76,226,149,161,5,3,98,111,
    120,118,82,226,149,158,5,3,98,111,120,118,104,226,148,188,5,3,98,111,120,118,108,226,
    148,164,5,3,98,111,120,118,114,226,148,156,6,3,98,112,114,105,109,101,226,128,181,5,
    2,98,114,101,118,101,203,152,4,4,98,115,99,114,240,157,146,183,5,3,98,115,101,109,
    105,226,129,143,4,3,98,115,105,109,226,136,189,5,3,98,115,105,109,101,226,139,141,4,
    1,98,115,111,108,92,5,3,98,115,111,108,98,226,167,133,8,3,98,115,111,108,104,115,
    117,98,226,159,136,6,3,98,117,108,108,101,116,226,128,162,4,3,98,117,109,112,226,137,
    142,5,3,98,117,109,112,69,226,170,174,5,3,98,117,109,112,101,226,137,143,6,3,98,
    117,109,112,101,113,226,137,143,6,2,99,97,99,117,116,101,196,135,3,3,99,97,112,226,
    136,169,6,3,99,97,112,97,110,100,226,169,132,8,3,99,97,112,98,114,99,117,112,226,
    169,137,6,3,99,97,112,99,97,112,226,169,139,6,3,99,97,112,99,117,112,226,169,135,
    6,3,99,97,112,100,111,116,226,169,128,4,6,99,97,112,115,226,136,169,239,184,128,5,
    3,99,97,114,101,116,226,129,129,5,2,99,97,114,111,110,203,135,5,3,99,99,97,112,
    115,226,169,141,6,2,99,99,97,114,111,110,196,141,5,2,99,99,105,114,99,196,137,5,
    3,99,99,117,112,115,226,169,140,7,3,99,99,117,112,115,115,109,226,169,144,4,2,99,
    100,111,116,196,139,7,3,99,101,109,112,116,121,118,226,166,178,9,2,99,101,110,116,101,
    114,100,111,116,194,183,3,4,99,102,114,240,157,148,160,4,2,99,104,99,121,209,135,3,
    2,99,104,105,207,135,3,3,99,105,114,226,151,139,4,3,99,105,114,69,226,167,131,6,
    3,99,105,114,99,101,113,226,137,151,15,3,99,105,114,99,108,101,97,114,114,111,119,108,
    101,102,116,226,134,186,16,3,99,105,114,99,108,101,97,114,114,111,119,114,105,103,104,116,
    226,134,187,8,2,99,105,114,99,108,101,100,82,194,174,8,3,99,105,114,99,108,101,100,
    83,226,147,136,10,3,99,105,114,99,108,101,100,97,115,116,226,138,155,11,3,99,105,114,
    99,108,101,100,99,105,114,99,226,138,154,11,3,99,105,114,99,108,101,100,100,97,115,104,
    226,138,157,4,3,99,105,114,101,226,137,151,8,3,99,105,114,102,110,105,110,116,226,168,
    144,6,3,99,105,114,109,105,100,226,171,175,7,3,99,105,114,115,99,105,114,226,167,130,
    8,3,99,108,117,98,115,117,105,116,226,153,163,5,1,99,111,108,111,110,58,6,3,99,
    111,108,111,110,101,226,137,148,7,3,99,111,108,111,110,101,113,226,137,148,5,1,99,111,
    109,109,97,44,6,1,99,111,109,109,97,116,64,4,3,99,111,109,112,226,136,129,6,3,
    99,111,109,112,102,110,226,136,152,10,3,99,111,109,112,108,101,109,101,110,116,226,136,129,
    9,3,99,111,109,112,108,101,120,101,115,226,132,130,4,3,99,111,110,103,226,137,133,7,
    3,99,111,110,103,100,111,116,226,169,173,6,3,99,111,110,105,110,116,226,136,174,4,4,
    99,111,112,102,240,157,149,148,6,3,99,111,112,114,111,100,226,136,144,6,3,99,111,112,
    121,115,114,226,132,151,5,3,99,114,97,114,114,226,134,181,4,4,99,115,99,114,240,157,
    146,184,4,3,99,115,117,98,226,171,143,5,3,99,115,117,98,101,226,171,145,4,3,99,
    115,117,112,226,171,144,5,3,99,115,117,112,101,226,171,146,5,3,99,116,100,111,116,226,
    139,175,7,3,99,117,100,97,114,114,108,226,164,184,7,3,99,117,100,97,114,114,114,226,
    164,181,5,3,99,117,101,112,114,226,139,158,5,3,99,117,101,115,99,226,139,159,6,3,
    99,117,108,97,114,114,226,134,182,7,3,99,117,108,97,114,114,112,226,164,189,3,3,99,
    117,112,226,136,170,8,3,99,117,112,98,114,99,97,112,226,169,136,6,3,99,117,112,99,
    97,112,226,169,134,6,3,99,117,112,99,117,112,226,169,138,6,3,99,117,112,100,111,116,
    226,138,141,5,3,99,117,112,111,114,226,169,133,4,6,99,117,112,115,226,136,170,239,184,
    128,6,3,99,117,114,97,114,114,226,134,183,7,3,99,117,114,97,114,114,109,226,164,188,
    11,3,99,117,114,108,121,101,113,112,114,101,99,226,139,158,11,3,99,117,114,108,121,101,
    113,115,117,99,99,226,139,159,8,3,99,117,114,108,121,118,101,101,226,139,142,10,3,99,
    117,114,108,121,119,101,100,103,101,226,139,143,14,3,99,117,114,118,101,97,114,114,111,119,
    108,101,102,116,226,134,182,15,3,99,117,114,118,101,97,114,114,111,119,114,105,103,104,116,
    226,134,183,5,3,99,117,118,101,101,226,139,142,5,3,99,117,119,101,100,226,139,143,8,
    3,99,119,99,111,110,105,110,116,226,136,178,5,3,99,119,105,110,116,226,136,177,6,3,
    99,121,108,99,116,121,226,140,173,4,3,100,65,114,114,226,135,147,4,3,100,72,97,114,
    226,165,165,6,3,100,97,108,101,116,104,226,132,184,4,3,100,97,115,104,226,128,144,5,
    3,100,97,115,104,118,226,138,163,7,3,100,98,107,97,114,111,119,226,164,143,5,2,100,
    98,108,97,99,203,157,6,2,100,99,97,114,111,110,196,143,3,2,100,99,121,208,180,2,
    3,100,100,226,133,134,7,3,100,100,97,103,103,101,114,226,128,161,5,3,100,100,97,114,
    114,226,135,138,7,3,100,100,111,116,115,101,113,226,169,183,7,3,100,101,109,112,116,121,
    118,226,166,177,6,3,100,102,105,115,104,116,226,165,191,3,4,100,102,114,240,157,148,161,
    5,3,100,104,97,114,108,226,135,131,5,3,100,104,97,114,114,226,135,130,4,3,100,105,
    97,109,226,139,132,7,3,100,105,97,109,111,110,100,226,139,132,11,3,100,105,97,109,111,
    110,100,115,117,105,116,226,153,166,3,2,100,105,101,194,168,7,2,100,105,103,97,109,109,
    97,207,157,5,3,100,105,115,105,110,226,139,178,3,2,100,105,118,195,183,13,3,100,105,
    118,105,100,101,111,110,116,105,109,101,115,226,139,135,6,3,100,105,118,111,110,120,226,139,
    135,4,2,100,106,99,121,209,146,6,3,100,108,99,111,114,110,226,140,158,6,3,100,108,
    99,114,111,112,226,140,141,6,1,100,111,108,108,97,114,36,4,4,100,111,112,102,240,157,
    149,149,3,2,100,111,116,203,153,5,3,100,111,116,101,113,226,137,144,8,3,100,111,116,
    101,113,100,111,116,226,137,145,8,3,100,111,116,109,105,110,117,115,226,136,184,7,3,100,
    111,116,112,108,117,115,226,136,148,9,3,100,111,116,115,113,117,97,114,101,226,138,161,14,
    3,100,111,117,98,108,101,98,97,114,119,101,100,103,101,226,140,134,9,3,100,111,119,110,
    97,114,114,111,119,226,134,147,14,3,100,111,119,110,100,111,119,110,97,114,114,111,119,115,
    226,135,138,15,3,100,111,119,110,104,97,114,112,111,111,110,108,101,102,116,226,135,131,16,
    3,100,111,119,110,104,97,114,112,111,111,110,114,105,103,104,116,226,135,130,8,3,100,114,
    98,107,97,114,111,119,226,164,144,6,3,100,114,99,111,114,110,226,140,159,6,3,100,114,
    99,114,111,112,226,140,140,4,4,100,115,99,114,240,157,146,185,4,2,100,115,99,121,209,
    149,4,3,100,115,111,108,226,167,182,6,2,100,115,116,114,111,107,196,145,5,3,100,116,
    100,111,116,226,139,177,4,3,100,116,114,105,226,150,191,5,3,100,116,114,105,102,226,150,
    190,5,3,100,117,97,114,114,226,135,181,5,3,100,117,104,97,114,226,165,175,7,3,100,
    119,97,110,103,108,101,226,166,166,4,2,100,122,99,121,209,159,8,3,100,122,105,103,114,
    97,114,114,226,159,191,5,3,101,68,68,111,116,226,169,183,4,3,101,68,111,116,226,137,
    145,6,3,101,97,115,116,101,114,226,169,174,6,2,101,99,97,114,111,110,196,155,4,3,
    101,99,105,114,226,137,150,6,3,101,99,111,108,111,110,226,137,149,3,2,101,99,121,209,
    141,4,2,101,100,111,116,196,151,2,3,101,101,226,133,135,5,3,101,102,68,111,116,226,
    137,146,3,4,101,102,114,240,157,148,162,2,3,101,103,226,170,154,3,3,101,103,115,226,
    170,150,6,3,101,103,115,100,111,116,226,170,152,2,3,101,108,226,170,153,8,3,101,108,
    105,110,116,101,114,115,226,143,167,3,3,101,108,108,226,132,147,3,3,101,108,115,226,170,
    149,6,3,101,108,115,100,111,116,226,170,151,5,2,101,109,97,99,114,196,147,5,3,101,
    109,112,116,121,226,136,133,8,3,101,109,112,116,121,115,101,116,226,136,133,6,3,101,109,
    112,116,121,118,226,136,133,6,3,101,109,115,112,49,51,226,128,132,6,3,101,109,115,112,
    49,52,226,128,133,3,2,101,110,103,197,139,5,2,101,111,103,111,110,196,153,4,4,101,
    111,112,102,240,157,149,150,4,3,101,112,97,114,226,139,149,6,3,101,112,97,114,115,108,
    226,167,163,5,3,101,112,108,117,115,226,169,177,4,2,101,112,115,105,206,181,7,2,101,
    112,115,105,108,111,110,206,181,5,2,101,112,115,105,118,207,181,6,3,101,113,99,105,114,
    99,226,137,150,7,3,101,113,99,111,108,111,110,226,137,149,5,3,101,113,115,105,109,226,
    137,130,10,3,101,113,115,108,97,110,116,103,116,114,226,170,150,11,3,101,113,115,108,97,
    110,116,108,101,115,115,226,170,149,6,1,101,113,117,97,108,115,61,6,3,101,113,117,101,
    115,116,226,137,159,7,3,101,113,117,105,118,68,68,226,169,184,8,3,101,113,118,112,97,
    114,115,108,226,167,165,5,3,101,114,68,111,116,226,137,147,5,3,101,114,97,114,114,226,
    165,177,4,3,101,115,99,114,226,132,175,5,3,101,115,100,111,116,226,137,144,4,3,101,
    115,105,109,226,137,130,3,2,101,116,97,206,183,4,1,101,120,99,108,33,5,3,101,120,
    105,115,116,226,136,131,11,3,101,120,112,101,99,116,97,116,105,111,110,226,132,176,12,3,
    101,120,112,111,110,101,110,116,105,97,108,101,226,133,135,13,3,102,97,108,108,105,110,103,
    100,111,116,115,101,113,226,137,146,3,2,102,99,121,209,132,6,3,102,101,109,97,108,101,
    226,153,128,6,3,102,102,105,108,105,103,239,172,131,5,3,102,102,108,105,103,239,172,128,
    6,3,102,102,108,108,105,103,239,172,132,3,4,102,102,114,240,157,148,163,5,3,102,105,
    108,105,103,239,172,129,5,2,102,106,108,105,103,102,106,4,3,102,108,97,116,226,153,173,
    5,3,102,108,108,105,103,239,172,130,5,3,102,108,116,110,115,226,150,177,4,4,102,111,
    112,102,240,157,149,151,6,3,102,111,114,97,108,108,226,136,128,4,3,102,111,114,107,226,
    139,148,5,3,102,111,114,107,118,226,171,153,8,3,102,112,97,114,116,105,110,116,226,168,
    141,6,3,102,114,97,99,49,51,226,133,147,6,3,102,114,97,99,49,53,226,133,149,6,
    3,102,114,97,99,49,54,226,133,153,6,3,102,114,97,99,49,56,226,133,155,6,3,102,
    114,97,99,50,51,226,133,148,6,3,102,114,97,99,50,53,226,133,150,6,3,102,114,97,
    99,51,53,226,133,151,6,3,102,114,97,99,51,56,226,133,156,6,3,102,114,97,99,52,
    53,226,133,152,6,3,102,114,97,99,53,54,226,133,154,6,3,102,114,97,99,53,56,226,
    133,157,6,3,102,114,97,99,55,56,226,133,158,5,3,102,114,97,115,108,226,129,132,5,
    3,102,114,111,119,110,226,140,162,4,4,102,115,99,114,240,157,146,187,2,3,103,69,226,
    137,167,3,3,103,69,108,226,170,140,6,2,103,97,99,117,116,101,199,181,6,2,103,97,
    109,109,97,100,207,157,3,3,103,97,112,226,170,134,6,2,103,98,114,101,118,101,196,159,
    5,2,103,99,105,114,99,196,157,3,2,103,99,121,208,179,4,2,103,100,111,116,196,161,
    3,3,103,101,108,226,139,155,3,3,103,101,113,226,137,165,4,3,103,101,113,113,226,137,
    167,8,3,103,101,113,115,108,97,110,116,226,169,190,3,3,103,101,115,226,169,190,5,3,
    103,101,115,99,99,226,170,169,6,3,103,101,115,100,111,116,226,170,128,7,3,103,101,115,
    100,111,116,111,226,170,130,8,3,103,101,115,100,111,116,111,108,226,170,132,4,6,103,101,
    115,108,226,139,155,239,184,128,6,3,103,101,115,108,101,115,226,170,148,3,4,103,102,114,
    240,157,148,164,2,3,103,103,226,137,171,3,3,103,103,103,226,139,153,5,3,103,105,109,
    101,108,226,132,183,4,2,103,106,99,121,209,147,2,3,103,108,226,137,183,3,3,103,108,
    69,226,170,146,3,3,103,108,97,226,170,165,3,3,103,108,106,226,170,164,3,3,103,110,
    69,226,137,169,4,3,103,110,97,112,226,170,138,8,3,103,110,97,112,112,114,111,120,226,
    170,138,3,3,103,110,101,226,170,136,4,3,103,110,101,113,226,170,136,5,3,103,110,101,
    113,113,226,137,169,5,3,103,110,115,105,109,226,139,167,4,4,103,111,112,102,240,157,149,
    152,5,1,103,114,97,118,101,96,4,3,103,115,99,114,226,132,138,4,3,103,115,105,109,
    226,137,179,5,3,103,115,105,109,101,226,170,142,5,3,103,115,105,109,108,226,170,144,4,
    3,103,116,99,99,226,170,167,5,3,103,116,99,105,114,226,169,186,5,3,103,116,100,111,
    116,226,139,151,6,3,103,116,108,80,97,114,226,166,149,7,3,103,116,113,117,101,115,116,
    226,169,188,9,3,103,116,114,97,112,112,114,111,120,226,170,134,6,3,103,116,114,97,114,
    114,226,165,184,6,3,103,116,114,100,111,116,226,139,151,9,3,103,116,114,101,113,108,101,
    115,115,226,139,155,10,3,103,116,114,101,113,113,108,101,115,115,226,170,140,7,3,103,116,
    114,108,101,115,115,226,137,183,6,3,103,116,114,115,105,109,226,137,179,9,6,103,118,101,
    114,116,110,101,113,113,226,137,169,239,184,128,4,6,103,118,110,69,226,137,169,239,184,128,
    4,3,104,65,114,114,226,135,148,6,3,104,97,105,114,115,112,226,128,138,4,2,104,97,
    108,102,194,189,6,3,104,97,109,105,108,116,226,132,139,6,2,104,97,114,100,99,121,209,
    138,7,3,104,97,114,114,99,105,114,226,165,136,5,3,104,97,114,114,119,226,134,173,4,
    3,104,98,97,114,226,132,143,5,2,104,99,105,114,99,196,165,9,3,104,101,97,114,116,
    115,117,105,116,226,153,165,6,3,104,101,114,99,111,110,226,138,185,3,4,104,102,114,240,
    157,148,165,8,3,104,107,115,101,97,114,111,119,226,164,165,8,3,104,107,115,119,97,114,
    111,119,226,164,166,5,3,104,111,97,114,114,226,135,191,6,3,104,111,109,116,104,116,226,
    136,187,13,3,104,111,111,107,108,101,102,116,97,114,114,111,119,226,134,169,14,3,104,111,
    111,107,114,105,103,104,116,97,114,114,111,119,226,134,170,4,4,104,111,112,102,240,157,149,
    153,6,3,104,111,114,98,97,114,226,128,149,4,4,104,115,99,114,240,157,146,189,6,3,
    104,115,108,97,115,104,226,132,143,6,2,104,115,116,114,111,107,196,167,6,3,104,121,98,
    117,108,108,226,129,131,6,3,104,121,112,104,101,110,226,128,144,2,3,105,99,226,129,163,
    3,2,105,99,121,208,184,4,2,105,101,99,121,208,181,3,3,105,102,102,226,135,148,3,
    4,105,102,114,240,157,148,166,2,3,105,105,226,133,136,6,3,105,105,105,105,110,116,226,
    168,140,5,3,105,105,105,110,116,226,136,173,6,3,105,105,110,102,105,110,226,167,156,5,
    3,105,105,111,116,97,226,132,169,5,2,105,106,108,105,103,196,179,5,2,105,109,97,99,
    114,196,171,5,3,105,109,97,103,101,226,132,145,8,3,105,109,97,103,108,105,110,101,226,
    132,144,8,3,105,109,97,103,112,97,114,116,226,132,145,5,2,105,109,97,116,104,196,177,
    4,3,105,109,111,102,226,138,183,5,2,105,109,112,101,100,198,181,2,3,105,110,226,136,
    136,6,3,105,110,99,97,114,101,226,132,133,8,3,105,110,102,105,110,116,105,101,226,167,
    157,6,2,105,110,111,100,111,116,196,177,3,3,105,110,116,226,136,171,6,3,105,110,116,
    99,97,108,226,138,186,8,3,105,110,116,101,103,101,114,115,226,132,164,8,3,105,110,116,
    101,114,99,97,108,226,138,186,8,3,105,110,116,108,97,114,104,107,226,168,151,7,3,105,
    110,116,112,114,111,100,226,168,188,4,2,105,111,99,121,209,145,5,2,105,111,103,111,110,
    196,175,4,4,105,111,112,102,240,157,149,154,4,2,105,111,116,97,206,185,5,3,105,112,
    114,111,100,226,168,188,4,4,105,115,99,114,240,157,146,190,4,3,105,115,105,110,226,136,
    136,5,3,105,115,105,110,69,226,139,185,7,3,105,115,105,110,100,111,116,226,139,181,5,
    3,105,115,105,110,115,226,139,180,6,3,105,115,105,110,115,118,226,139,179,5,3,105,115,
    105,110,118,226,136,136,2,3,105,116,226,129,162,6,2,105,116,105,108,100,101,196,169,5,
    2,105,117,107,99,121,209,150,5,2,106,99,105,114,99,196,181,3,2,106,99,121,208,185,
    3,4,106,102,114,240,157,148,167,5,2,106,109,97,116,104,200,183,4,4,106,111,112,102,
    240,157,149,155,4,4,106,115,99,114,240,157,146,191,6,2,106,115,101,114,99,121,209,152,
    5,2,106,117,107,99,121,209,148,5,2,107,97,112,112,97,206,186,6,2,107,97,112,112,
    97,118,207,176,6,2,107,99,101,100,105,108,196,183,3,2,107,99,121,208,186,3,4,107,
    102,114,240,157,148,168,6,2,107,103,114,101,101,110,196,184,4,2,107,104,99,121,209,133,
    4,2,107,106,99,121,209,156,4,4,107,111,112,102,240,157,149,156,4,4,107,115,99,114,
    240,157,147,128,5,3,108,65,97,114,114,226,135,154,4,3,108,65,114,114,226,135,144,6,
    3,108,65,116,97,105,108,226,164,155,5,3,108,66,97,114,114,226,164,142,2,3,108,69,
    226,137,166,3,3,108,69,103,226,170,139,4,3,108,72,97,114,226,165,162,6,2,108,97,
    99,117,116,101,196,186,8,3,108,97,101,109,112,116,121,118,226,166,180,6,3,108,97,103,
    114,97,110,226,132,146,4,3,108,97,110,103,226,159,168,5,3,108,97,110,103,100,226,166,
    145,6,3,108,97,110,103,108,101,226,159,168,3,3,108,97,112,226,170,133,5,3,108,97,
    114,114,98,226,135,164,7,3,108,97,114,114,98,102,115,226,164,159,6,3,108,97,114,114,
    102,115,226,164,157,6,3,108,97,114,114,104,107,226,134,169,6,3,108,97,114,114,108,112,
    226,134,171,6,3,108,97,114,114,112,108,226,164,185,7,3,108,97,114,114,115,105,109,226,
    165,179,6,3,108,97,114,114,116,108,226,134,162,3,3,108,97,116,226,170,171,6,3,108,
    97,116,97,105,108,226,164,153,4,3,108,97,116,101,226,170,173,5,6,108,97,116,101,115,
    226,170,173,239,184,128,5,3,108,98,97,114,114,226,164,140,5,3,108,98,98,114,107,226,
    157,178,6,1,108,98,114,97,99,101,123,6,1,108,98,114,97,99,107,91,5,3,108,98,
    114,107,101,226,166,139,7,3,108,98,114,107,115,108,100,226,166,143,7,3,108,98,114,107,
    115,108,117,226,166,141,6,2,108,99,97,114,111,110,196,190,6,2,108,99,101,100,105,108,
    196,188,5,3,108,99,101,105,108,226,140,136,4,1,108,99,117,98,123,3,2,108,99,121,
    208,187,4,3,108,100,99,97,226,164,182,6,3,108,100,113,117,111,114,226,128,158,7,3,
    108,100,114,100,104,97,114,226,165,167,8,3,108,100,114,117,115,104,97,114,226,165,139,4,
    3,108,100,115,104,226,134,178,9,3,108,101,102,116,97,114,114,111,119,226,134,144,13,3,
    108,101,102,116,97,114,114,111,119,116,97,105,108,226,134,162,15,3,108,101,102,116,104,97,
    114,112,111,111,110,100,111,119,110,226,134,189,13,3,108,101,102,116,104,97,114,112,111,111,
    110,117,112,226,134,188,14,3,108,101,102,116,108,101,102,116,97,114,114,111,119,115,226,135,
    135,14,3,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,134,148,15,3,108,101,
    102,116,114,105,103,104,116,97,114,114,111,119,115,226,135,134,17,3,108,101,102,116,114,105,
    103,104,116,104,97,114,112,111,111,110,115,226,135,139,19,3,108,101,102,116,114,105,103,104,
    116,115,113,117,105,103,97,114,114,111,119,226,134,173,14,3,108,101,102,116,116,104,114,101,
    101,116,105,109,101,115,226,139,139,3,3,108,101,103,226,139,154,3,3,108,101,113,226,137,
    164,4,3,108,101,113,113,226,137,166,8,3,108,101,113,115,108,97,110,116,226,169,189,3,
    3,108,101,115,226,169,189,5,3,108,101,115,99,99,226,170,168,6,3,108,101,115,100,111,
    116,226,169,191,7,3,108,101,115,100,111,116,111,226,170,129,8,3,108,101,115,100,111,116,
    111,114,226,170,131,4,6,108,101,115,103,226,139,154,239,184,128,6,3,108,101,115,103,101,
    115,226,170,147,10,3,108,101,115,115,97,112,112,114,111,120,226,170,133,7,3,108,101,115,
    115,100,111,116,226,139,150,9,3,108,101,115,115,101,113,103,116,114,226,139,154,10,3,108,
    101,115,115,101,113,113,103,116,114,226,170,139,7,3,108,101,115,115,103,116,114,226,137,182,
    7,3,108,101,115,115,115,105,109,226,137,178,6,3,108,102,105,115,104,116,226,165,188,6,
    3,108,102,108,111,111,114,226,140,138,3,4,108,102,114,240,157,148,169,2,3,108,103,226,
    137,182,3,3,108,103,69,226,170,145,5,3,108,104,97,114,100,226,134,189,5,3,108,104,
    97,114,117,226,134,188,6,3,108,104,97,114,117,108,226,165,170,5,3,108,104,98,108,107,
    226,150,132,4,2,108,106,99,121,209,153,2,3,108,108,226,137,170,5,3,108,108,97,114,
    114,226,135,135,8,3,108,108,99,111,114,110,101,114,226,140,158,6,3,108,108,104,97,114,
    100,226,165,171,5,3,108,108,116,114,105,226,151,186,6,2,108,109,105,100,111,116,197,128,
    6,3,108,109,111,117,115,116,226,142,176,10,3,108,109,111,117,115,116,97,99,104,101,226,
    142,176,3,3,108,110,69,226,137,168,4,3,108,110,97,112,226,170,137,8,3,108,110,97,
    112,112,114,111,120,226,170,137,3,3,108,110,101,226,170,135,4,3,108,110,101,113,226,170,
    135,5,3,108,110,101,113,113,226,137,168,5,3,108,110,115,105,109,226,139,166,5,3,108,
    111,97,110,103,226,159,172,5,3,108,111,97,114,114,226,135,189,5,3,108,111,98,114,107,
    226,159,166,13,3,108,111,110,103,108,101,102,116,97,114,114,111,119,226,159,181,18,3,108,
    111,110,103,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,159,183,10,3,108,111,
    110,103,109,97,112,115,116,111,226,159,188,14,3,108,111,110,103,114,105,103,104,116,97,114,
    114,111,119,226,159,182,13,3,108,111,111,112,97,114,114,111,119,108,101,102,116,226,134,171,
    14,3,108,111,111,112,97,114,114,111,119,114,105,103,104,116,226,134,172,5,3,108,111,112,
    97,114,226,166,133,4,4,108,111,112,102,240,157,149,157,6,3,108,111,112,108,117,115,226,
    168,173,7,3,108,111,116,105,109,101,115,226,168,180,6,3,108,111,119,97,115,116,226,136,
    151,6,1,108,111,119,98,97,114,95,7,3,108,111,122,101,110,103,101,226,151,138,4,3,
    108,111,122,102,226,167,171,4,1,108,112,97,114,40,6,3,108,112,97,114,108,116,226,166,
    147,5,3,108,114,97,114,114,226,135,134,8,3,108,114,99,111,114,110,101,114,226,140,159,
    5,3,108,114,104,97,114,226,135,139,6,3,108,114,104,97,114,100,226,165,173,5,3,108,
    114,116,114,105,226,138,191,4,4,108,115,99,114,240,157,147,129,3,3,108,115,104,226,134,
    176,4,3,108,115,105,109,226,137,178,5,3,108,115,105,109,101,226,170,141,5,3,108,115,
    105,109,103,226,170,143,4,1,108,115,113,98,91,6,3,108,115,113,117,111,114,226,128,154,
    6,2,108,115,116,114,111,107,197,130,4,3,108,116,99,99,226,170,166,5,3,108,116,99,
    105,114,226,169,185,5,3,108,116,100,111,116,226,139,150,6,3,108,116,104,114,101,101,226,
    139,139,6,3,108,116,105,109,101,115,226,139,137,6,3,108,116,108,97,114,114,226,165,182,
    7,3,108,116,113,117,101,115,116,226,169,187,6,3,108,116,114,80,97,114,226,166,150,4,
    3,108,116,114,105,226,151,131,5,3,108,116,114,105,101,226,138,180,5,3,108,116,114,105,
    102,226,151,130,8,3,108,117,114,100,115,104,97,114,226,165,138,7,3,108,117,114,117,104,
    97,114,226,165,166,9,6,108,118,101,114,116,110,101,113,113,226,137,168,239,184,128,4,6,
    108,118,110,69,226,137,168,239,184,128,5,3,109,68,68,111,116,226,136,186,4,3,109,97,
    108,101,226,153,130,4,3,109,97,108,116,226,156,160,7,3,109,97,108,116,101,115,101,226,
    156,160,3,3,109,97,112,226,134,166,6,3,109,97,112,115,116,111,226,134,166,10,3,109,
    97,112,115,116,111,100,111,119,110,226,134,167,10,3,109,97,112,115,116,111,108,101,102,116,
    226,134,164,8,3,109,97,112,115,116,111,117,112,226,134,165,6,3,109,97,114,107,101,114,
    226,150,174,6,3,109,99,111,109,109,97,226,168,169,3,2,109,99,121,208,188,13,3,109,
    101,97,115,117,114,101,100,97,110,103,108,101,226,136,161,3,4,109,102,114,240,157,148,170,
    3,3,109,104,111,226,132,167,3,3,109,105,100,226,136,163,6,1,109,105,100,97,115,116,
    42,6,3,109,105,100,99,105,114,226,171,176,6,3,109,105,110,117,115,98,226,138,159,6,
    3,109,105,110,117,115,100,226,136,184,7,3,109,105,110,117,115,100,117,226,168,170,4,3,
    109,108,99,112,226,171,155,4,3,109,108,100,114,226,128,166,6,3,109,110,112,108,117,115,
    226,136,147,6,3,109,111,100,101,108,115,226,138,167,4,4,109,111,112,102,240,157,149,158,
    2,3,109,112,226,136,147,4,4,109,115,99,114,240,157,147,130,6,3,109,115,116,112,111,
    115,226,136,190,8,3,109,117,108,116,105,109,97,112,226,138,184,5,3,109,117,109,97,112,
    226,138,184,3,5,110,71,103,226,139,153,204,184,3,6,110,71,116,226,137,171,226,131,146,
    4,5,110,71,116,118,226,137,171,204,184,10,3,110,76,101,102,116,97,114,114,111,119,226,
    135,141,15,3,110,76,101,102,116,114,105,103,104,116,97,114,114,111,119,226,135,142,3,5,
    110,76,108,226,139,152,204,184,3,6,110,76,116,226,137,170,226,131,146,4,5,110,76,116,
    118,226,137,170,204,184,11,3,110,82,105,103,104,116,97,114,114,111,119,226,135,143,6,3,
    110,86,68,97,115,104,226,138,175,6,3,110,86,100,97,115,104,226,138,174,5,3,110,97,
    98,108,97,226,136,135,6,2,110,97,99,117,116,101,197,132,4,6,110,97,110,103,226,136,
    160,226,131,146,3,3,110,97,112,226,137,137,4,5,110,97,112,69,226,169,176,204,184,5,
    5,110,97,112,105,100,226,137,139,204,184,5,2,110,97,112,111,115,197,137,7,3,110,97,
    112,112,114,111,120,226,137,137,5,3,110,97,116,117,114,226,153,174,7,3,110,97,116,117,
    114,97,108,226,153,174,8,3,110,97,116,117,114,97,108,115,226,132,149,5,5,110,98,117,
    109,112,226,137,142,204,184,6,5,110,98,117,109,112,101,226,137,143,204,184,4,3,110,99,
    97,112,226,169,131,6,2,110,99,97,114,111,110,197,136,6,2,110,99,101,100,105,108,197,
    134,5,3,110,99,111,110,103,226,137,135,8,5,110,99,111,110,103,100,111,116,226,169,173,
    204,184,4,3,110,99,117,112,226,169,130,3,2,110,99,121,208,189,5,3,110,101,65,114,
    114,226,135,151,6,3,110,101,97,114,104,107,226,164,164,5,3,110,101,97,114,114,226,134,
    151,7,3,110,101,97,114,114,111,119,226,134,151,5,5,110,101,100,111,116,226,137,144,204,
    184,6,3,110,101,113,117,105,118,226,137,162,6,3,110,101,115,101,97,114,226,164,168,5,
    5,110,101,115,105,109,226,137,130,204,184,6,3,110,101,120,105,115,116,226,136,132,7,3,
    110,101,120,105,115,116,115,226,136,132,3,4,110,102,114,240,157,148,171,3,5,110,103,69,
    226,137,167,204,184,3,3,110,103,101,226,137,177,4,3,110,103,101,113,226,137,177,5,5,
    110,103,101,113,113,226,137,167,204,184,9,5,110,103,101,113,115,108,97,110,116,226,169,190,
    204,184,4,5,110,103,101,115,226,169,190,204,184,5,3,110,103,115,105,109,226,137,181,3,
    3,110,103,116,226,137,175,4,3,110,103,116,114,226,137,175,5,3,110,104,65,114,114,226,
    135,142,5,3,110,104,97,114,114,226,134,174,5,3,110,104,112,97,114,226,171,178,2,3,
    110,105,226,136,139,3,3,110,105,115,226,139,188,4,3,110,105,115,100,226,139,186,3,3,
    110,105,118,226,136,139,4,2,110,106,99,121,209,154,5,3,110,108,65,114,114,226,135,141,
    3,5,110,108,69,226,137,166,204,184,5,3,110,108,97,114,114,226,134,154,4,3,110,108,
    100,114,226,128,165,3,3,110,108,101,226,137,176,10,3,110,108,101,102,116,97,114,114,111,
    119,226,134,154,15,3,110,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,134,174,
    4,3,110,108,101,113,226,137,176,5,5,110,108,101,113,113,226,137,166,204,184,9,5,110,
    108,101,113,115,108,97,110,116,226,169,189,204,184,4,5,110,108,101,115,226,169,189,204,184,
    5,3,110,108,101,115,115,226,137,174,5,3,110,108,115,105,109,226,137,180,3,3,110,108,
    116,226,137,174,5,3,110,108,116,114,105,226,139,170,6,3,110,108,116,114,105,101,226,139,
    172,4,3,110,109,105,100,226,136,164,4,4,110,111,112,102,240,157,149,159,5,3,110,111,
    116,105,110,226,136,137,6,5,110,111,116,105,110,69,226,139,185,204,184,8,5,110,111,116,
    105,110,100,111,116,226,139,181,204,184,7,3,110,111,116,105,110,118,97,226,136,137,7,3,
    110,111,116,105,110,118,98,226,139,183,7,3,110,111,116,105,110,118,99,226,139,182,5,3,
    110,111,116,110,105,226,136,140,7,3,110,111,116,110,105,118,97,226,136,140,7,3,110,111,
    116,110,105,118,98,226,139,190,7,3,110,111,116,110,105,118,99,226,139,189,4,3,110,112,
    97,114,226,136,166,9,3,110,112,97,114,97,108,108,101,108,226,136,166,6,6,110,112,97,
    114,115,108,226,171,189,226,131,165,5,5,110,112,97,114,116,226,136,130,204,184,7,3,110,
    112,111,108,105,110,116,226,168,148,3,3,110,112,114,226,138,128,6,3,110,112,114,99,117,
    101,226,139,160,4,5,110,112,114,101,226,170,175,204,184,5,3,110,112,114,101,99,226,138,
    128,7,5,110,112,114,101,99,101,113,226,170,175,204,184,5,3,110,114,65,114,114,226,135,
    143,5,3,110,114,97,114,114,226,134,155,6,5,110,114,97,114,114,99,226,164,179,204,184,
    6,5,110,114,97,114,114,119,226,134,157,204,184,11,3,110,114,105,103,104,116,97,114,114,
    111,119,226,134,155,5,3,110,114,116,114,105,226,139,171,6,3,110,114,116,114,105,101,226,
    139,173,3,3,110,115,99,226,138,129,6,3,110,115,99,99,117,101,226,139,161,4,5,110,
    115,99,101,226,170,176,204,184,4,4,110,115,99,114,240,157,147,131,9,3,110,115,104,111,
    114,116,109,105,100,226,136,164,14,3,110,115,104,111,114,116,112,97,114,97,108,108,101,108,
    226,136,166,4,3,110,115,105,109,226,137,129,5,3,110,115,105,109,101,226,137,132,6,3,
    110,115,105,109,101,113,226,137,132,5,3,110,115,109,105,100,226,136,164,5,3,110,115,112,
    97,114,226,136,166,7,3,110,115,113,115,117,98,101,226,139,162,7,3,110,115,113,115,117,
    112,101,226,139,163,4,3,110,115,117,98,226,138,132,5,5,110,115,117,98,69,226,171,133,
    204,184,5,3,110,115,117,98,101,226,138,136,7,6,110,115,117,98,115,101,116,226,138,130,
    226,131,146,9,3,110,115,117,98,115,101,116,101,113,226,138,136,10,5,110,115,117,98,115,
    101,116,101,113,113,226,171,133,204,184,5,3,110,115,117,99,99,226,138,129,7,5,110,115,
    117,99,99,101,113,226,170,176,204,184,4,3,110,115,117,112,226,138,133,5,5,110,115,117,
    112,69,226,171,134,204,184,5,3,110,115,117,112,101,226,138,137,7,6,110,115,117,112,115,
    101,116,226,138,131,226,131,146,9,3,110,115,117,112,115,101,116,101,113,226,138,137,10,5,
    110,115,117,112,115,101,116,101,113,113,226,171,134,204,184,4,3,110,116,103,108,226,137,185,
    4,3,110,116,108,103,226,137,184,13,3,110,116,114,105,97,110,103,108,101,108,101,102,116,
    226,139,170,15,3,110,116,114,105,97,110,103,108,101,108,101,102,116,101,113,226,139,172,14,
    3,110,116,114,105,97,110,103,108,101,114,105,103,104,116,226,139,171,16,3,110,116,114,105,
    97,110,103,108,101,114,105,103,104,116,101,113,226,139,173,2,2,110,117,206,189,3,1,110,
    117,109,35,6,3,110,117,109,101,114,111,226,132,150,5,3,110,117,109,115,112,226,128,135,
    6,3,110,118,68,97,115,104,226,138,173,6,3,110,118,72,97,114,114,226,164,132,4,6,
    110,118,97,112,226,137,141,226,131,146,6,3,110,118,100,97,115,104,226,138,172,4,6,110,
    118,103,101,226,137,165,226,131,146,4,4,110,118,103,116,62,226,131,146,7,3,110,118,105,
    110,102,105,110,226,167,158,6,3,110,118,108,65,114,114,226,164,130,4,6,110,118,108,101,
    226,137,164,226,131,146,4,4,110,118,108,116,60,226,131,146,7,6,110,118,108,116,114,105,
    101,226,138,180,226,131,146,6,3,110,118,114,65,114,114,226,164,131,7,6,110,118,114,116,
    114,105,101,226,138,181,226,131,146,5,6,110,118,115,105,109,226,136,188,226,131,146,5,3,
    110,119,65,114,114,226,135,150,6,3,110,119,97,114,104,107,226,164,163,5,3,110,119,97,
    114,114,226,134,150,7,3,110,119,97,114,114,111,119,226,134,150,6,3,110,119,110,101,97,
    114,226,164,167,2,3,111,83,226,147,136,4,3,111,97,115,116,226,138,155,4,3,111,99,
    105,114,226,138,154,3,2,111,99,121,208,190,5,3,111,100,97,115,104,226,138,157,6,2,
    111,100,98,108,97,99,197,145,4,3,111,100,105,118,226,168,184,4,3,111,100,111,116,226,
    138,153,6,3,111,100,115,111,108,100,226,166,188,5,3,111,102,99,105,114,226,166,191,3,
    4,111,102,114,240,157,148,172,4,2,111,103,111,110,203,155,3,3,111,103,116,226,167,129,
    5,3,111,104,98,97,114,226,166,181,3,2,111,104,109,206,169,4,3,111,105,110,116,226,
    136,174,5,3,111,108,97,114,114,226,134,186,5,3,111,108,99,105,114,226,166,190,7,3,
    111,108,99,114,111,115,115,226,166,187,5,3,111,108,105,110,101,226,128,190,3,3,111,108,
    116,226,167,128,5,2,111,109,97,99,114,197,141,7,2,111,109,105,99,114,111,110,206,191,
    4,3,111,109,105,100,226,166,182,6,3,111,109,105,110,117,115,226,138,150,4,4,111,111,
    112,102,240,157,149,160,4,3,111,112,97,114,226,166,183,5,3,111,112,101,114,112,226,166,
    185,5,3,111,112,108,117,115,226,138,149,2,3,111,114,226,136,168,5,3,111,114,97,114,
    114,226,134,187,3,3,111,114,100,226,169,157,5,3,111,114,100,101,114,226,132,180,7,3,
    111,114,100,101,114,111,102,226,132,180,6,3,111,114,105,103,111,102,226,138,182,4,3,111,
    114,111,114,226,169,150,7,3,111,114,115,108,111,112,101,226,169,151,3,3,111,114,118,226,
    169,155,4,3,111,115,99,114,226,132,180,4,3,111,115,111,108,226,138,152,6,3,111,116,
    105,109,101,115,226,138,151,8,3,111,116,105,109,101,115,97,115,226,168,182,5,3,111,118,
    98,97,114,226,140,189,3,3,112,97,114,226,136,165,8,3,112,97,114,97,108,108,101,108,
    226,136,165,6,3,112,97,114,115,105,109,226,171,179,5,3,112,97,114,115,108,226,171,189,
    4,3,112,97,114,116,226,136,130,3,2,112,99,121,208,191,6,1,112,101,114,99,110,116,
    37,6,1,112,101,114,105,111,100,46,4,3,112,101,114,112,226,138,165,7,3,112,101,114,
    116,101,110,107,226,128,177,3,4,112,102,114,240,157,148,173,3,2,112,104,105,207,134,4,
    2,112,104,105,118,207,149,6,3,112,104,109,109,97,116,226,132,179,9,3,112,105,116,99,
    104,102,111,114,107,226,139,148,3,2,112,105,118,207,150,6,3,112,108,97,110,99,107,226,
    132,143,7,3,112,108,97,110,99,107,104,226,132,142,6,3,112,108,97,110,107,118,226,132,
    143,4,1,112,108,117,115,43,8,3,112,108,117,115,97,99,105,114,226,168,163,5,3,112,
    108,117,115,98,226,138,158,7,3,112,108,117,115,99,105,114,226,168,162,6,3,112,108,117,
    115,100,111,226,136,148,6,3,112,108,117,115,100,117,226,168,165,5,3,112,108,117,115,101,
    226,169,178,7,3,112,108,117,115,115,105,109,226,168,166,7,3,112,108,117,115,116,119,111,
    226,168,167,2,2,112,109,194,177,8,3,112,111,105,110,116,105,110,116,226,168,149,4,4,
    112,111,112,102,240,157,149,161,2,3,112,114,226,137,186,3,3,112,114,69,226,170,179,4,
    3,112,114,97,112,226,170,183,5,3,112,114,99,117,101,226,137,188,3,3,112,114,101,226,
    170,175,4,3,112,114,101,99,226,137,186,10,3,112,114,101,99,97,112,112,114,111,120,226,
    170,183,11,3,112,114,101,99,99,117,114,108,121,101,113,226,137,188,6,3,112,114,101,99,
    101,113,226,170,175,11,3,112,114,101,99,110,97,112,112,114,111,120,226,170,185,8,3,112,
    114,101,99,110,101,113,113,226,170,181,8,3,112,114,101,99,110,115,105,109,226,139,168,7,
    3,112,114,101,99,115,105,109,226,137,190,6,3,112,114,105,109,101,115,226,132,153,4,3,
    112,114,110,69,226,170,181,5,3,112,114,110,97,112,226,170,185,6,3,112,114,110,115,105,
    109,226,139,168,4,3,112,114,111,100,226,136,143,8,3,112,114,111,102,97,108,97,114,226,
    140,174,8,3,112,114,111,102,108,105,110,101,226,140,146,8,3,112,114,111,102,115,117,114,
    102,226,140,147,4,3,112,114,111,112,226,136,157,6,3,112,114,111,112,116,111,226,136,157,
    5,3,112,114,115,105,109,226,137,190,6,3,112,114,117,114,101,108,226,138,176,4,4,112,
    115,99,114,240,157,147,133,3,2,112,115,105,207,136,6,3,112,117,110,99,115,112,226,128,
    136,3,4,113,102,114,240,157,148,174,4,3,113,105,110,116,226,168,140,4,4,113,111,112,
    102,240,157,149,162,6,3,113,112,114,105,109,101,226,129,151,4,4,113,115,99,114,240,157,
    147,134,11,3,113,117,97,116,101,114,110,105,111,110,115,226,132,141,7,3,113,117,97,116,
    105,110,116,226,168,150,5,1,113,117,101,115,116,63,7,3,113,117,101,115,116,101,113,226,
    137,159,5,3,114,65,97,114,114,226,135,155,4,3,114,65,114,114,226,135,146,6,3,114,
    65,116,97,105,108,226,164,156,5,3,114,66,97,114,114,226,164,143,4,3,114,72,97,114,
    226,165,164,4,5,114,97,99,101,226,136,189,204,177,6,2,114,97,99,117,116,101,197,149,
    8,3,114,97,101,109,112,116,121,118,226,166,179,4,3,114,97,110,103,226,159,169,5,3,
    114,97,110,103,100,226,166,146,5,3,114,97,110,103,101,226,166,165,6,3,114,97,110,103,
    108,101,226,159,169,6,3,114,97,114,114,97,112,226,165,181,5,3,114,97,114,114,98,226,
    135,165,7,3,114,97,114,114,98,102,115,226,164,160,5,3,114,97,114,114,99,226,164,179,
    6,3,114,97,114,114,102,115,226,164,158,6,3,114,97,114,114,104,107,226,134,170,6,3,
    114,97,114,114,108,112,226,134,172,6,3,114,97,114,114,112,108,226,165,133,7,3,114,97,
    114,114,115,105,109,226,165,180,6,3,114,97,114,114,116,108,226,134,163,5,3,114,97,114,
    114,119,226,134,157,6,3,114,97,116,97,105,108,226,164,154,5,3,114,97,116,105,111,226,
    136,182,9,3,114,97,116,105,111,110,97,108,115,226,132,154,5,3,114,98,97,114,114,226,
    164,141,5,3,114,98,98,114,107,226,157,179,6,1,114,98,114,97,99,101,125,6,1,114,
    98,114,97,99,107,93,5,3,114,98,114,107,101,226,166,140,7,3,114,98,114,107,115,108,
    100,226,166,142,7,3,114,98,114,107,115,108,117,226,166,144,6,2,114,99,97,114,111,110,
    197,153,6,2,114,99,101,100,105,108,197,151,5,3,114,99,101,105,108,226,140,137,4,1,
    114,99,117,98,125,3,2,114,99,121,209,128,4,3,114,100,99,97,226,164,183,7,3,114,
    100,108,100,104,97,114,226,165,169,6,3,114,100,113,117,111,114,226,128,157,4,3,114,100,
    115,104,226,134,179,4,3,114,101,97,108,226,132,156,7,3,114,101,97,108,105,110,101,226,
    132,155,8,3,114,101,97,108,112,97,114,116,226,132,156,5,3,114,101,97,108,115,226,132,
    157,4,3,114,101,99,116,226,150,173,6,3,114,102,105,115,104,116,226,165,189,6,3,114,
    102,108,111,111,114,226,140,139,3,4,114,102,114,240,157,148,175,5,3,114,104,97,114,100,
    226,135,129,5,3,114,104,97,114,117,226,135,128,6,3,114,104,97,114,117,108,226,165,172,
    3,2,114,104,111,207,129,4,2,114,104,111,118,207,177,10,3,114,105,103,104,116,97,114,
    114,111,119,226,134,146,14,3,114,105,103,104,116,97,114,114,111,119,116,97,105,108,226,134,
    163,16,3,114,105,103,104,116,104,97,114,112,111,111,110,100,111,119,110,226,135,129,14,3,
    114,105,103,104,116,104,97,114,112,111,111,110,117,112,226,135,128,15,3,114,105,103,104,116,
    108,101,102,116,97,114,114,111,119,115,226,135,132,17,3,114,105,103,104,116,108,101,102,116,
    104,97,114,112,111,111,110,115,226,135,140,16,3,114,105,103,104,116,114,105,103,104,116,97,
    114,114,111,119,115,226,135,137,15,3,114,105,103,104,116,115,113,117,105,103,97,114,114,111,
    119,226,134,157,15,3,114,105,103,104,116,116,104,114,101,101,116,105,109,101,115,226,139,140,
    4,2,114,105,110,103,203,154,12,3,114,105,115,105,110,103,100,111,116,115,101,113,226,137,
    147,5,3,114,108,97,114,114,226,135,132,5,3,114,108,104,97,114,226,135,140,6,3,114,
    109,111,117,115,116,226,142,177,10,3,114,109,111,117,115,116,97,99,104,101,226,142,177,5,
    3,114,110,109,105,100,226,171,174,5,3,114,111,97,110,103,226,159,173,5,3,114,111,97,
    114,114,226,135,190,5,3,114,111,98,114,107,226,159,167,5,3,114,111,112,97,114,226,166,
    134,4,4,114,111,112,102,240,157,149,163,6,3,114,111,112,108,117,115,226,168,174,7,3,
    114,111,116,105,109,101,115,226,168,181,4,1,114,112,97,114,41,6,3,114,112,97,114,103,
    116,226,166,148,8,3,114,112,112,111,108,105,110,116,226,168,146,5,3,114,114,97,114,114,
    226,135,137,4,4,114,115,99,114,240,157,147,135,3,3,114,115,104,226,134,177,4,1,114,
    115,113,98,93,6,3,114,115,113,117,111,114,226,128,153,6,3,114,116,104,114,101,101,226,
    139,140,6,3,114,116,105,109,101,115,226,139,138,4,3,114,116,114,105,226,150,185,5,3,
    114,116,114,105,101,226,138,181,5,3,114,116,114,105,102,226,150,184,8,3,114,116,114,105,
    108,116,114,105,226,167,142,7,3,114,117,108,117,104,97,114,226,165,168,2,3,114,120,226,
    132,158,6,2,115,97,99,117,116,101,197,155,2,3,115,99,226,137,187,3,3,115,99,69,
    226,170,180,4,3,115,99,97,112,226,170,184,5,3,115,99,99,117,101,226,137,189,3,3,
    115,99,101,226,170,176,6,2,115,99,101,100,105,108,197,159,5,2,115,99,105,114,99,197,
    157,4,3,115,99,110,69,226,170,182,5,3,115,99,110,97,112,226,170,186,6,3,115,99,
    110,115,105,109,226,139,169,8,3,115,99,112,111,108,105,110,116,226,168,147,5,3,115,99,
    115,105,109,226,137,191,3,2,115,99,121,209,129,4,3,115,100,111,116,226,139,133,5,3,
    115,100,111,116,98,226,138,161,5,3,115,100,111,116,101,226,169,166,5,3,115,101,65,114,
    114,226,135,152,6,3,115,101,97,114,104,107,226,164,165,5,3,115,101,97,114,114,226,134,
    152,7,3,115,101,97,114,114,111,119,226,134,152,4,1,115,101,109,105,59,6,3,115,101,
    115,119,97,114,226,164,169,8,3,115,101,116,109,105,110,117,115,226,136,150,5,3,115,101,
    116,109,110,226,136,150,4,3,115,101,120,116,226,156,182,3,4,115,102,114,240,157,148,176,
    6,3,115,102,114,111,119,110,226,140,162,5,3,115,104,97,114,112,226,153,175,6,2,115,
    104,99,104,99,121,209,137,4,2,115,104,99,121,209,136,8,3,115,104,111,114,116,109,105,
    100,226,136,163,13,3,115,104,111,114,116,112,97,114,97,108,108,101,108,226,136,165,6,2,
    115,105,103,109,97,102,207,130,6,2,115,105,103,109,97,118,207,130,3,3,115,105,109,226,
    136,188,6,3,115,105,109,100,111,116,226,169,170,4,3,115,105,109,101,226,137,131,5,3,
    115,105,109,101,113,226,137,131,4,3,115,105,109,103,226,170,158,5,3,115,105,109,103,69,
    226,170,160,4,3,115,105,109,108,226,170,157,5,3,115,105,109,108,69,226,170,159,5,3,
    115,105,109,110,101,226,137,134,7,3,115,105,109,112,108,117,115,226,168,164,7,3,115,105,
    109,114,97,114,114,226,165,178,5,3,115,108,97,114,114,226,134,144,13,3,115,109,97,108,
    108,115,101,116,109,105,110,117,115,226,136,150,6,3,115,109,97,115,104,112,226,168,179,8,
    3,115,109,101,112,97,114,115,108,226,167,164,4,3,115,109,105,100,226,136,163,5,3,115,
    109,105,108,101,226,140,163,3,3,115,109,116,226,170,170,4,3,115,109,116,101,226,170,172,
    5,6,115,109,116,101,115,226,170,172,239,184,128,6,2,115,111,102,116,99,121,209,140,3,
    1,115,111,108,47,4,3,115,111,108,98,226,167,132,6,3,115,111,108,98,97,114,226,140,
    191,4,4,115,111,112,102,240,157,149,164,9,3,115,112,97,100,101,115,117,105,116,226,153,
    160,4,3,115,112,97,114,226,136,165,5,3,115,113,99,97,112,226,138,147,6,6,115,113,
    99,97,112,115,226,138,147,239,184,128,5,3,115,113,99,117,112,226,138,148,6,6,115,113,
    99,117,112,115,226,138,148,239,184,128,5,3,115,113,115,117,98,226,138,143,6,3,115,113,
    115,117,98,101,226,138,145,8,3,115,113,115,117,98,115,101,116,226,138,143,10,3,115,113,
    115,117,98,115,101,116,101,113,226,138,145,5,3,115,113,115,117,112,226,138,144,6,3,115,
    113,115,117,112,101,226,138,146,8,3,115,113,115,117,112,115,101,116,226,138,144,10,3,115,
    113,115,117,112,115,101,116,101,113,226,138,146,3,3,115,113,117,226,150,161,6,3,115,113,
    117,97,114,101,226,150,161,6,3,115,113,117,97,114,102,226,150,170,4,3,115,113,117,102,
    226,150,170,5,3,115,114,97,114,114,226,134,146,4,4,115,115,99,114,240,157,147,136,6,
    3,115,115,101,116,109,110,226,136,150,6,3,115,115,109,105,108,101,226,140,163,6,3,115,
    115,116,97,114,102,226,139,134,15,2,115,116,114,97,105,103,104,116,101,112,115,105,108,111,
    110,207,181,11,2,115,116,114,97,105,103,104,116,112,104,105,207,149,5,2,115,116,114,110,
    115,194,175,3,3,115,117,98,226,138,130,4,3,115,117,98,69,226,171,133,6,3,115,117,
    98,100,111,116,226,170,189,4,3,115,117,98,101,226,138,134,7,3,115,117,98,101,100,111,
    116,226,171,131,7,3,115,117,98,109,117,108,116,226,171,129,5,3,115,117,98,110,69,226,
    171,139,5,3,115,117,98,110,101,226,138,138,7,3,115,117,98,112,108,117,115,226,170,191,
    7,3,115,117,98,114,97,114,114,226,165,185,6,3,115,117,98,115,101,116,226,138,130,8,
    3,115,117,98,115,101,116,101,113,226,138,134,9,3,115,117,98,115,101,116,101,113,113,226,
    171,133,9,3,115,117,98,115,101,116,110,101,113,226,138,138,10,3,115,117,98,115,101,116,
    110,101,113,113,226,171,139,6,3,115,117,98,115,105,109,226,171,135,6,3,115,117,98,115,
    117,98,226,171,149,6,3,115,117,98,115,117,112,226,171,147,4,3,115,117,99,99,226,137,
    187,10,3,115,117,99,99,97,112,112,114,111,120,226,170,184,11,3,115,117,99,99,99,117,
    114,108,121,101,113,226,137,189,6,3,115,117,99,99,101,113,226,170,176,11,3,115,117,99,
    99,110,97,112,112,114,111,120,226,170,186,8,3,115,117,99,99,110,101,113,113,226,170,182,
    8,3,115,117,99,99,110,115,105,109,226,139,169,7,3,115,117,99,99,115,105,109,226,137,
    191,4,3,115,117,110,103,226,153,170,3,3,115,117,112,226,138,131,4,3,115,117,112,69,
    226,171,134,6,3,115,117,112,100,111,116,226,170,190,7,3,115,117,112,100,115,117,98,226,
    171,152,4,3,115,117,112,101,226,138,135,7,3,115,117,112,101,100,111,116,226,171,132,7,
    3,115,117,112,104,115,111,108,226,159,137,7,3,115,117,112,104,115,117,98,226,171,151,7,
    3,115,117,112,108,97,114,114,226,165,187,7,3,115,117,112,109,117,108,116,226,171,130,5,
    3,115,117,112,110,69,226,171,140,5,3,115,117,112,110,101,226,138,139,7,3,115,117,112,
    112,108,117,115,226,171,128,6,3,115,117,112,115,101,116,226,138,131,8,3,115,117,112,115,
    101,116,101,113,226,138,135,9,3,115,117,112,115,101,116,101,113,113,226,171,134,9,3,115,
    117,112,115,101,116,110,101,113,226,138,139,10,3,115,117,112,115,101,116,110,101,113,113,226,
    171,140,6,3,115,117,112,115,105,109,226,171,136,6,3,115,117,112,115,117,98,226,171,148,
    6,3,115,117,112,115,117,112,226,171,150,5,3,115,119,65,114,114,226,135,153,6,3,115,
    119,97,114,104,107,226,164,166,5,3,115,119,97,114,114,226,134,153,7,3,115,119,97,114,
    114,111,119,226,134,153,6,3,115,119,110,119,97,114,226,164,170,6,3,116,97,114,103,101,
    116,226,140,150,3,2,116,97,117,207,132,4,3,116,98,114,107,226,142,180,6,2,116,99,
    97,114,111,110,197,165,6,2,116,99,101,100,105,108,197,163,3,2,116,99,121,209,130,4,
    3,116,100,111,116,226,131,155,6,3,116,101,108,114,101,99,226,140,149,3,4,116,102,114,
    240,157,148,177,6,3,116,104,101,114,101,52,226,136,180,9,3,116,104,101,114,101,102,111,
    114,101,226,136,180,8,2,116,104,101,116,97,115,121,109,207,145,6,2,116,104,101,116,97,
    118,207,145,11,3,116,104,105,99,107,97,112,112,114,111,120,226,137,136,8,3,116,104,105,
    99,107,115,105,109,226,136,188,5,3,116,104,107,97,112,226,137,136,6,3,116,104,107,115,
    105,109,226,136,188,6,3,116,105,109,101,115,98,226,138,160,8,3,116,105,109,101,115,98,
    97,114,226,168,177,6,3,116,105,109,101,115,100,226,168,176,4,3,116,105,110,116,226,136,
    173,4,3,116,111,101,97,226,164,168,3,3,116,111,112,226,138,164,6,3,116,111,112,98,
    111,116,226,140,182,6,3,116,111,112,99,105,114,226,171,177,4,4,116,111,112,102,240,157,
    149,165,7,3,116,111,112,102,111,114,107,226,171,154,4,3,116,111,115,97,226,164,169,6,
    3,116,112,114,105,109,101,226,128,180,8,3,116,114,105,97,110,103,108,101,226,150,181,12,
    3,116,114,105,97,110,103,108,101,100,111,119,110,226,150,191,12,3,116,114,105,97,110,103,
    108,101,108,101,102,116,226,151,131,14,3,116,114,105,97,110,103,108,101,108,101,102,116,101,
    113,226,138,180,9,3,116,114,105,97,110,103,108,101,113,226,137,156,13,3,116,114,105,97,
    110,103,108,101,114,105,103,104,116,226,150,185,15,3,116,114,105,97,110,103,108,101,114,105,
    103,104,116,101,113,226,138,181,6,3,116,114,105,100,111,116,226,151,172,4,3,116,114,105,
    101,226,137,156,8,3,116,114,105,109,105,110,117,115,226,168,186,7,3,116,114,105,112,108,
    117,115,226,168,185,5,3,116,114,105,115,98,226,167,141,7,3,116,114,105,116,105,109,101,
    226,168,187,8,3,116,114,112,101,122,105,117,109,226,143,162,4,4,116,115,99,114,240,157,
    147,137,4,2,116,115,99,121,209,134,5,2,116,115,104,99,121,209,155,6,2,116,115,116,
    114,111,107,197,167,5,3,116,119,105,120,116,226,137,172,16,3,116,119,111,104,101,97,100,
    108,101,102,116,97,114,114,111,119,226,134,158,17,3,116,119,111,104,101,97,100,114,105,103,
    104,116,97,114,114,111,119,226,134,160,4,3,117,65,114,114,226,135,145,4,3,117,72,97,
    114,226,165,163,5,2,117,98,114,99,121,209,158,6,2,117,98,114,101,118,101,197,173,3,
    2,117,99,121,209,131,5,3,117,100,97,114,114,226,135,133,6,2,117,100,98,108,97,99,
    197,177,5,3,117,100,104,97,114,226,165,174,6,3,117,102,105,115,104,116,226,165,190,3,
    4,117,102,114,240,157,148,178,5,3,117,104,97,114,108,226,134,191,5,3,117,104,97,114,
    114,226,134,190,5,3,117,104,98,108,107,226,150,128,6,3,117,108,99,111,114,110,226,140,
    156,8,3,117,108,99,111,114,110,101,114,226,140,156,6,3,117,108,99,114,111,112,226,140,
    143,5,3,117,108,116,114,105,226,151,184,5,2,117,109,97,99,114,197,171,5,2,117,111,
    103,111,110,197,179,4,4,117,111,112,102,240,157,149,166,7,3,117,112,97,114,114,111,119,
    226,134,145,11,3,117,112,100,111,119,110,97,114,114,111,119,226,134,149,13,3,117,112,104,
    97,114,112,111,111,110,108,101,102,116,226,134,191,14,3,117,112,104,97,114,112,111,111,110,
    114,105,103,104,116,226,134,190,5,3,117,112,108,117,115,226,138,142,4,2,117,112,115,105,
    207,133,5,2,117,112,115,105,104,207,146,7,2,117,112,115,105,108,111,110,207,133,10,3,
    117,112,117,112,97,114,114,111,119,115,226,135,136,6,3,117,114,99,111,114,110,226,140,157,
    8,3,117,114,99,111,114,110,101,114,226,140,157,6,3,117,114,99,114,111,112,226,140,142,
    5,2,117,114,105,110,103,197,175,5,3,117,114,116,114,105,226,151,185,4,4,117,115,99,
    114,240,157,147,138,5,3,117,116,100,111,116,226,139,176,6,2,117,116,105,108,100,101,197,
    169,4,3,117,116,114,105,226,150,181,5,3,117,116,114,105,102,226,150,180,5,3,117,117,
    97,114,114,226,135,136,7,3,117,119,97,110,103,108,101,226,166,167,4,3,118,65,114,114,
    226,135,149,4,3,118,66,97,114,226,171,168,5,3,118,66,97,114,118,226,171,169,5,3,
    118,68,97,115,104,226,138,168,6,3,118,97,110,103,114,116,226,166,156,10,2,118,97,114,
    101,112,115,105,108,111,110,207,181,8,2,118,97,114,107,97,112,112,97,207,176,10,3,118,
    97,114,110,111,116,104,105,110,103,226,136,133,6,2,118,97,114,112,104,105,207,149,5,2,
    118,97,114,112,105,207,150,9,3,118,97,114,112,114,111,112,116,111,226,136,157,4,3,118,
    97,114,114,226,134,149,6,2,118,97,114,114,104,111,207,177,8,2,118,97,114,115,105,103,
    109,97,207,130,12,6,118,97,114,115,117,98,115,101,116,110,101,113,226,138,138,239,184,128,
    13,6,118,97,114,115,117,98,115,101,116,110,101,113,113,226,171,139,239,184,128,12,6,118,
    97,114,115,117,112,115,101,116,110,101,113,226,138,139,239,184,128,13,6,118,97,114,115,117,
    112,115,101,116,110,101,113,113,226,171,140,239,184,128,8,2,118,97,114,116,104,101,116,97,
    207,145,15,3,118,97,114,116,114,105,97,110,103,108,101,108,101,102,116,226,138,178,16,3,
    118,97,114,116,114,105,97,110,103,108,101,114,105,103,104,116,226,138,179,3,2,118,99,121,
    208,178,5,3,118,100,97,115,104,226,138,162,3,3,118,101,101,226,136,168,6,3,118,101,
    101,98,97,114,226,138,187,5,3,118,101,101,101,113,226,137,154,6,3,118,101,108,108,105,
    112,226,139,174,6,1,118,101,114,98,97,114,124,4,1,118,101,114,116,124,3,4,118,102,
    114,240,157,148,179,5,3,118,108,116,114,105,226,138,178,5,6,118,110,115,117,98,226,138,
    130,226,131,146,5,6,118,110,115,117,112,226,138,131,226,131,146,4,4,118,111,112,102,240,
    157,149,167,5,3,118,112,114,111,112,226,136,157,5,3,118,114,116,114,105,226,138,179,4,
    4,118,115,99,114,240,157,147,139,6,6,118,115,117,98,110,69,226,171,139,239,184,128,6,
    6,118,115,117,98,110,101,226,138,138,239,184,128,6,6,118,115,117,112,110,69,226,171,140,
    239,184,128,6,6,118,115,117,112,110,101,226,138,139,239,184,128,7,3,118,122,105,103,122,
    97,103,226,166,154,5,2,119,99,105,114,99,197,181,6,3,119,101,100,98,97,114,226,169,
    159,5,3,119,101,100,103,101,226,136,167,6,3,119,101,100,103,101,113,226,137,153,6,3,
    119,101,105,101,114,112,226,132,152,3,4,119,102,114,240,157,148,180,4,4,119,111,112,102,
    240,157,149,168,2,3,119,112,226,132,152,2,3,119,114,226,137,128,6,3,119,114,101,97,
    116,104,226,137,128,4,4,119,115,99,114,240,157,147,140,4,3,120,99,97,112,226,139,130,
    5,3,120,99,105,114,99,226,151,175,4,3,120,99,117,112,226,139,131,5,3,120,100,116,
    114,105,226,150,189,3,4,120,102,114,240,157,148,181,5,3,120,104,65,114,114,226,159,186,
    5,3,120,104,97,114,114,226,159,183,2,2,120,105,206,190,5,3,120,108,65,114,114,226,
    159,184,5,3,120,108,97,114,114,226,159,181,4,3,120,109,97,112,226,159,188,4,3,120,
    110,105,115,226,139,187,5,3,120,111,100,111,116,226,168,128,4,4,120,111,112,102,240,157,
    149,169,6,3,120,111,112,108,117,115,226,168,129,6,3,120,111,116,105,109,101,226,168,130,
    5,3,120,114,65,114,114,226,159,185,5,3,120,114,97,114,114,226,159,182,4,4,120,115,
    99,114,240,157,147,141,6,3,120,115,113,99,117,112,226,168,134,6,3,120,117,112,108,117,
    115,226,168,132,5,3,120,117,116,114,105,226,150,179,4,3,120,118,101,101,226,139,129,6,
    3,120,119,101,100,103,101,226,139,128,4,2,121,97,99,121,209,143,5,2,121,99,105,114,
    99,197,183,3,2,121,99,121,209,139,3,4,121,102,114,240,157,148,182,4,2,121,105,99,
    121,209,151,4,4,121,111,112,102,240,157,149,170,4,4,121,115,99,114,240,157,147,142,4,
    2,121,117,99,121,209,142,6,2,122,97,99,117,116,101,197,186,6,2,122,99,97,114,111,
    110,197,190,3,2,122,99,121,208,183,4,2,122,100,111,116,197,188,6,3,122,101,101,116,
    114,102,226,132,168,4,2,122,101,116,97,206,182,3,4,122,102,114,240,157,148,183,4,2,
    122,104,99,121,208,182,7,3,122,105,103,114,97,114,114,226,135,157,4,4,122,111,112,102,
    240,157,149,171,4,4,122,115,99,114,240,157,147,143,
];

// The value's UTF-8 bytes in the low bytes and its length in the top byte.
#[repr(C)]
#[derive(Clone, Copy)]
struct Entry {
    key: u64,
    val: u64,
}
#[repr(C, align(16))]
#[derive(Clone, Copy)]
struct Long {
    name: [u8; 32],
    val: u64,
    len: u32,
    pad: u32,
}
#[repr(C, align(16))]
struct Aligned<T>(T);

static mut INPUT: Aligned<[u8; INPUT_CAP + PAD]> = Aligned([0; INPUT_CAP + PAD]);
static mut OUTPUT: Aligned<[u8; OUTPUT_CAP + PAD]> = Aligned([0; OUTPUT_CAP + PAD]);
static mut FAST: [Entry; (1 << FAST_BITS) + FAST_TAIL] = [Entry { key: 0, val: 0 }; (1 << FAST_BITS) + FAST_TAIL];
static mut LEG: [Entry; (1 << LEG_BITS) + LEG_TAIL] = [Entry { key: 0, val: 0 }; (1 << LEG_BITS) + LEG_TAIL];
static mut LONGS: [Long; LONG_COUNT] = [Long { name: [0; 32], val: 0, len: 0, pad: 0 }; LONG_COUNT];
static mut LONG_SLOTS: [u16; 1 << LONG_BITS] = [0; 1 << LONG_BITS];
// Longest legacy name starting with these two bytes (hashed), or 0.
static mut LEG_MAX: [u8; 4096] = [0; 4096];
static mut HEXV: [u8; 256] = [0; 256];
static mut POS: [u32; WINDOW + 16] = [0; WINDOW + 16];
static mut READY: bool = false;

// Windows-1252 remapping for references to 0x80-0x9F.
static C1: [u16; 32] = [
    0x20AC, 0x81, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x8D,
    0x017D, 0x8F, 0x90, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161, 0x203A,
    0x0153, 0x9D, 0x017E, 0x0178,
];
static UTF8_MARKS: [u32; 5] = [0, 0, 0x80C0, 0x8080E0, 0x808080F0];
// Byte j of the 32 loaded at `LEN_MASK + 32 - n` is 0xFF when j < n.
static LEN_MASK: Aligned<[u8; 64]> = Aligned({
    let mut a = [0u8; 64];
    let mut i = 0;
    while i < 32 {
        a[i] = 0xFF;
        i += 1;
    }
    a
});

#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
    loop {}
}

#[inline(always)]
unsafe fn ld(p: *const u8) -> v128 {
    v128_load(p as *const v128)
}
#[inline(always)]
unsafe fn st(p: *mut u8, v: v128) {
    v128_store(p as *mut v128, v)
}
#[inline(always)]
unsafe fn ld64(p: *const u8) -> u64 {
    (p as *const u64).read_unaligned()
}
#[inline(always)]
unsafe fn st64(p: *mut u8, x: u64) {
    (p as *mut u64).write_unaligned(x)
}
#[inline(always)]
unsafe fn st32(p: *mut u8, x: u32) {
    (p as *mut u32).write_unaligned(x)
}
#[inline(always)]
unsafe fn eq_mask(v: v128, c: u8) -> u32 {
    i8x16_bitmask(i8x16_eq(v, u8x16_splat(c))) as u32
}
#[inline(always)]
fn leg_slot(w: u64) -> usize {
    ((w as u32 & 0xFFFF).wrapping_mul(0x9E3779B1) >> 20) as usize
}
#[inline(always)]
fn long_hash(head: u64, tail: u64, n: usize) -> usize {
    ((head ^ tail.rotate_left(29)).wrapping_add(n as u64).wrapping_mul(LONG_MUL) >> (64 - LONG_BITS)) as usize
}

#[inline(never)]
unsafe fn init() {
    let fast = addr_of_mut!(FAST) as *mut Entry;
    let leg = addr_of_mut!(LEG) as *mut Entry;
    let longs = addr_of_mut!(LONGS) as *mut Long;
    let long_slots = addr_of_mut!(LONG_SLOTS) as *mut u16;
    let leg_max = addr_of_mut!(LEG_MAX) as *mut u8;
    let hexv = addr_of_mut!(HEXV) as *mut u8;
    for k in 0..(1 << FAST_BITS) + FAST_TAIL {
        (*fast.add(k)).key = EMPTY;
    }
    for k in 0..(1 << LEG_BITS) + LEG_TAIL {
        (*leg.add(k)).key = EMPTY;
    }
    for k in 0..256 {
        *hexv.add(k) = 16;
    }
    for k in 0..10 {
        *hexv.add(b'0' as usize + k) = k as u8;
    }
    for k in 0..6 {
        *hexv.add(b'a' as usize + k) = 10 + k as u8;
        *hexv.add(b'A' as usize + k) = 10 + k as u8;
    }
    let mut p = addr_of!(ENTITY_BLOB) as *const u8;
    let mut nl = 0usize;
    for _ in 0..ENTITY_COUNT {
        let n = (*p & 0x7F) as usize;
        let legacy = *p >> 7 != 0;
        let vn = *p.add(1) as usize;
        let name = p.add(2);
        let value = name.add(n);
        let mut val = (vn as u64) << 56;
        for k in 0..vn {
            val |= (*value.add(k) as u64) << (8 * k);
        }
        if n <= 7 {
            let semi = (b';' as u64) << (8 * n);
            let mut key = semi;
            for k in 0..n {
                key |= (*name.add(k) as u64) << (8 * k);
            }
            let mut e = fast.add((key.wrapping_mul(FAST_MUL) >> (64 - FAST_BITS)) as usize);
            while (*e).key != EMPTY {
                e = e.add(1);
            }
            *e = Entry { key, val };
            if legacy {
                key = (key ^ semi) | (n as u64) << 56;
                e = leg.add((key.wrapping_mul(LEG_MUL) >> (64 - LEG_BITS)) as usize);
                while (*e).key != EMPTY {
                    e = e.add(1);
                }
                *e = Entry { key, val };
                let s = leg_max.add(leg_slot(key)); // only the first two bytes matter
                if (*s as usize) < n {
                    *s = n as u8;
                }
            }
        } else {
            let l = longs.add(nl);
            nl += 1;
            let nm = addr_of_mut!((*l).name) as *mut u8;
            for k in 0..n {
                *nm.add(k) = *name.add(k);
            }
            (*l).val = val;
            (*l).len = n as u32;
            let mut h = long_hash(ld64(nm), ld64(nm.add(n - 8)), n);
            while *long_slots.add(h) != 0 {
                h = (h + 1) & LONG_MASK;
            }
            *long_slots.add(h) = nl as u16;
        }
        p = value.add(vn);
    }
    READY = true;
}

#[no_mangle]
pub extern "C" fn input_ptr() -> u32 {
    addr_of!(INPUT) as u32
}
#[no_mangle]
pub extern "C" fn input_utf8_cap() -> u32 {
    INPUT_CAP as u32
}
#[no_mangle]
pub extern "C" fn output_ptr() -> u32 {
    addr_of!(OUTPUT) as u32
}
#[no_mangle]
pub extern "C" fn output_utf8_cap() -> u32 {
    OUTPUT_CAP as u32
}

#[no_mangle]
pub unsafe extern "C" fn render(n: u32) -> u64 {
    if !READY {
        init();
    }
    let size = if (n as usize) < INPUT_CAP { n as usize } else { INPUT_CAP };
    let src = addr_of_mut!(INPUT) as *mut u8;
    let dst = addr_of_mut!(OUTPUT) as *mut u8;
    let fast = addr_of!(FAST) as *const Entry;
    let leg = addr_of!(LEG) as *const Entry;
    let longs = addr_of!(LONGS) as *const Long;
    let long_slots = addr_of!(LONG_SLOTS) as *const u16;
    let leg_max = addr_of!(LEG_MAX) as *const u8;
    let hexv = addr_of!(HEXV) as *const u8;
    let pos = addr_of_mut!(POS) as *mut u32;
    let len_mask = addr_of!(LEN_MASK) as *const u8;
    let zero = u8x16_splat(0);
    st(src.add(size), zero);
    st(src.add(size + 16), zero);
    st(src.add(size + 32), zero);
    st(src.add(size + 48), zero);

    // Stage 1 lists the position of every `&` in a window; stage 2 copies the text between
    // references and decodes each one.
    let (mut e, mut o, mut base) = (0usize, 0usize, 0usize);
    while base < size {
        let lim = if size - base > WINDOW { base + WINDOW } else { size };
        let mut out = pos;
        loop {
            let ma = eq_mask(ld(src.add(base)), b'&') as u64;
            let mb = eq_mask(ld(src.add(base + 16)), b'&') as u64;
            let mc = eq_mask(ld(src.add(base + 32)), b'&') as u64;
            let md = eq_mask(ld(src.add(base + 48)), b'&') as u64;
            let mut mm = ma | mb << 16 | mc << 32 | md << 48;
            let cnt = mm.count_ones() as usize;
            let b = base as u32;
            // Entries past cnt are garbage and are overwritten or ignored.
            for k in 0..4 {
                *out.add(k) = b + mm.trailing_zeros();
                mm &= mm.wrapping_sub(1);
            }
            if cnt > 4 {
                for k in 4..8 {
                    *out.add(k) = b + mm.trailing_zeros();
                    mm &= mm.wrapping_sub(1);
                }
                let mut k = 8;
                while mm != 0 {
                    *out.add(k) = b + mm.trailing_zeros();
                    mm &= mm.wrapping_sub(1);
                    k += 1;
                }
            }
            out = out.add(cnt);
            base += 64;
            if base >= lim {
                break;
            }
        }

        let mut q = pos as *const u32;
        while q < out as *const u32 {
            let mut i = *q as usize;
            q = q.add(1);
            // Copy the text since the last reference; src[i] is `&` and i < size.
            {
                let len = i - e;
                st(dst.add(o), ld(src.add(e)));
                st(dst.add(o + 16), ld(src.add(e + 16)));
                if len > 32 {
                    let mut j = 32;
                    loop {
                        st(dst.add(o + j), ld(src.add(e + j)));
                        j += 16;
                        if j >= len {
                            break;
                        }
                    }
                }
                o += len;
            }
            'done: {
                let w = ld64(src.add(i + 1));
                if w as u8 == b'#' {
                    // Decimal and hexadecimal share one branch-free path: classify 8 bytes,
                    // take the digits before the first other byte, and fold them pairwise.
                    'numeric: {
                        let hex = ((w >> 8) as u8 | 0x20) == b'x';
                        let mut p = src.add(i + 2 + hex as usize) as *const u8;
                        let d = ld64(p);
                        let t = d ^ 0x3030303030303030;
                        let digit = !((t & !HIGH).wrapping_add(0x7676767676767676) | t) & HIGH;
                        let y = d | 0x2020202020202020;
                        let ty = y & !HIGH;
                        let letter = ty.wrapping_add(ONES * (0x80 - b'a' as u64))
                            & !ty.wrapping_add(ONES * (0x7F - b'f' as u64))
                            & !y
                            & HIGH;
                        let stop = !(digit | if hex { letter } else { 0 }) & HIGH;
                        let mut v: u32;
                        let end: usize;
                        if stop != 0 {
                            let nb = stop.trailing_zeros() & 0x38;
                            if nb == 0 {
                                break 'numeric;
                            }
                            let mut x = ((d & 0x0F0F0F0F0F0F0F0F) + 9 * (letter >> 7)) << (64 - nb);
                            x = x.wrapping_mul(if hex { 16 } else { 10 }).wrapping_add(x >> 8) & 0x00FF00FF00FF00FF;
                            x = x.wrapping_mul(if hex { 256 } else { 100 }).wrapping_add(x >> 16) & 0x0000FFFF0000FFFF;
                            v = x.wrapping_mul(if hex { 65536 } else { 10000 }).wrapping_add(x >> 32) as u32;
                            end = p.offset_from(src as *const u8) as usize + (nb >> 3) as usize;
                        } else {
                            // Eight or more digits: saturate past U+10FFFF.
                            let radix = if hex { 16u32 } else { 10 };
                            v = 0;
                            loop {
                                let c = *hexv.add(*p as usize) as u32;
                                if c >= radix {
                                    break;
                                }
                                v = v * radix + c;
                                if v > 0x10FFFF {
                                    v = 0x110000;
                                }
                                p = p.add(1);
                            }
                            end = p.offset_from(src as *const u8) as usize;
                        }
                        i = end + (*src.add(end) == b';') as usize;
                        if v.wrapping_sub(0x80) < 0x20 {
                            v = *C1.get_unchecked((v - 0x80) as usize) as u32;
                        } else if v == 0 || v.wrapping_sub(0xD800) < 0x800 || v > 0x10FFFF {
                            v = 0xFFFD;
                        }
                        // Lay the bits out as four UTF-8 bytes, then drop the unused leading ones.
                        let len = 1 + (v > 0x7F) as u32 + (v > 0x7FF) as u32 + (v > 0xFFFF) as u32;
                        let bits = v >> 18 | (v >> 12 & 0x3F) << 8 | (v >> 6 & 0x3F) << 16 | (v & 0x3F) << 24;
                        let word = bits >> (32 - 8 * len) | *UTF8_MARKS.get_unchecked(len as usize);
                        st32(dst.add(o), if len == 1 { v } else { word });
                        o += len as usize;
                        break 'done;
                    }
                } else {
                    let t = w ^ (ONES * b';' as u64);
                    let z = t.wrapping_sub(ONES) & !t & HIGH;
                    if z != 0 {
                        // Bit index of the `;` byte; the key is the name and its `;`.
                        let kb = z.trailing_zeros() & 0x38;
                        let key = w & (2u64 << (kb + 7)).wrapping_sub(1);
                        let mut en = fast.add((key.wrapping_mul(FAST_MUL) >> (64 - FAST_BITS)) as usize);
                        loop {
                            let k = (*en).key;
                            if k == key {
                                let val = (*en).val;
                                st64(dst.add(o), val);
                                o += (val >> 56) as usize;
                                i += 2 + (kb >> 3) as usize;
                                break 'done;
                            }
                            if k == EMPTY {
                                break;
                            }
                            en = en.add(1);
                        }
                    } else {
                        // No `;` in 8 bytes: a name of 8 to 31 bytes needs its `;` in the next 24.
                        let s0 = ld(src.add(i + 1));
                        let s1 = ld(src.add(i + 17));
                        let sm = eq_mask(s0, b';') | eq_mask(s1, b';') << 16;
                        if sm != 0 {
                            let len = sm.trailing_zeros() as usize;
                            let mut h = long_hash(w, ld64(src.add(i + 1 + len - 8)), len);
                            let m0 = ld(len_mask.add(32 - len));
                            let m1 = ld(len_mask.add(48 - len));
                            loop {
                                let s = *long_slots.add(h) as usize;
                                if s == 0 {
                                    break;
                                }
                                let l = longs.add(s - 1);
                                let nm = addr_of!((*l).name) as *const u8;
                                let diff = v128_or(v128_xor(v128_and(s0, m0), ld(nm)), v128_xor(v128_and(s1, m1), ld(nm.add(16))));
                                if (*l).len as usize == len && !v128_any_true(diff) {
                                    st64(dst.add(o), (*l).val);
                                    o += ((*l).val >> 56) as usize;
                                    i += 2 + len;
                                    break 'done;
                                }
                                h = (h + 1) & LONG_MASK;
                            }
                        }
                    }
                    // Without `;`, the longest legacy name that is a prefix.
                    let mut k = *leg_max.add(leg_slot(w)) as usize;
                    while k >= 2 {
                        // The length is part of the key, so a NUL after a shorter name cannot match.
                        let key = (w & ((1u64 << (8 * k)) - 1)) | (k as u64) << 56;
                        let mut en = leg.add((key.wrapping_mul(LEG_MUL) >> (64 - LEG_BITS)) as usize);
                        loop {
                            if (*en).key == key {
                                st64(dst.add(o), (*en).val);
                                o += ((*en).val >> 56) as usize;
                                i += 1 + k;
                                break 'done;
                            }
                            if (*en).key == EMPTY {
                                break;
                            }
                            en = en.add(1);
                        }
                        k -= 1;
                    }
                }
                *dst.add(o) = b'&';
                o += 1;
                i += 1;
            }
            e = i;
        }
    }
    // Without a reference the input is the output.
    if e == 0 {
        return (src as u64) << 32 | size as u64;
    }
    let mut j = e;
    while j < size {
        st(dst.add(o + (j - e)), ld(src.add(j)));
        j += 16;
    }
    o += size - e;
    (dst as u64) << 32 | o as u64
}

Run it on the example input with qipdo (Node.js 22 or newer):

printf '%s' 'Fish &amp; chips &mdash; caf&eacute; &lt;3 &#x1F600; &copy 2026 &notit;' | npx qipdo calculated.world components/d464ff1ce894733367f1502e92893d64473bd681d8137e722369df04e7955e12.wasm

Rust port (no_std, core::arch::wasm32) of the two-stage C decoder. Stage 1 turns each 64-byte block into a bitmask of its & and appends their positions to a list without branching on what it finds; stage 2 copies the text since the last reference (32 bytes unconditionally, more in a loop) and decodes. Inputs without & are returned in place. 64 zero bytes after the input remove bounds checks. Names of up to 7 bytes ending in ; are found with a SWAR zero-byte test and one multiply into an open-addressed table of 16-byte entries; longer names use a second table and a masked 32-byte v128 compare; names without ; go through a two-byte prefix filter and a 106-entry legacy table whose key includes the length. Decimal and hexadecimal references of up to 7 digits share one branch-free SWAR path, and UTF-8 encoding does not branch on length. Passes the 6,835-case suite locally, plus 1.1 million fuzz cases against a Python reference.

Builds on
Direct port of the C submission 5fe83c0b-c589-4337-a62e-5126223e76a4 by the same author: same layout, tables, hash multipliers and control flow. The entity list is generated from Python html.entities.html5.

Build details

Compiler, size, memory and checksum
Submitted
10 November 2026 at 08:07 UTC
Language
Rust
Compiler
rustc 1.99.0 --edition 2021 --target wasm32-unknown-unknown --crate-type cdylib -C opt-level=3 -C panic=abort -C lto -C codegen-units=1 -C strip=symbols -C target-feature=+simd128,+bulk-memory -C link-arg=-zstack-size=8192 -C link-arg=--initial-memory=3145728 -C link-arg=--max-memory=3145728
Size
27.7 KiB, gzip 14.8 KiB
Download
~300 ms on Slow 4G (Lighthouse’s 1.6 Mbps, 150 ms round trips)
Memory
48 pages (3 MiB)
SIMD
yes
AI models
claude-fable-5-2
Functions, loops, branches and other static counts
Functions
6
Instructions
1,569
Loops
18
Conditional branches
60
Indirect calls
0
Memory loads
40
Memory stores
45
SIMD instructions
64
Potentially trapping instructions
108

Instruction sites in the binary, not executions, counted by qip.dev’s wasm-counts.