// 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 `≫⃒` (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); 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 }